int main(void) { setvbuf(stdin, 0, _IOFBF, 1024*1024); long stdin_size = get_file_size(stdin); uint8_t *buffer = calloc(stdin_size + LINE_LENGTH, 1); assert(buffer); lookup_t lookup; pthread_mutex_t mutex; job_t *job = 0; init_lookup( (const uint8_t *)"acbdghkmnsrutwvy", (const uint8_t *)"TGVHCDMKNSYAAWBR", &lookup); pthread_mutex_init(&mutex, 0); uint8_t *current = buffer; uint8_t *end = buffer + stdin_size; uint8_t *header_begin = 0; uint8_t *header_end = 0; uint8_t *body_begin = 0; while (fgets_unlocked((char *)current, end - current, stdin)) { if (current[0] == '>') { if (body_begin != 0) { job = do_process_block( header_begin, header_end, body_begin, current, &lookup, &mutex, job); } size_t len = strlen((const char *)current); header_begin = current; header_end = current + len; current += len; body_begin = current; } else { if (current[LINE_LENGTH] == '\n') { current += LINE_LENGTH; } else { size_t len = strlen((const char *)current); if (current[len - 1] == '\n') { --len; } current += len; } } } if (body_begin != 0) { job = do_process_block( header_begin, header_end, body_begin, current, &lookup, &mutex, job); } while (job) { pthread_join(job->thread, 0); if (job->free_buffer) { free(job->buffer); } job = job->prev_job; } free(buffer); return 0; }
int revcomp_main(void) { //setvbuf(input_file, 0, _IOFBF, 1024*1024); //long stdin_size = get_file_size(input_file); long lSize; size_t result; struct rqst_struct rqst; rqst.bytes = MAXSIZE; rqst.pid = PROC_ID; rqst.id = CHUNK_ID; lSize = rqst.bytes; fprintf(stdout, "entering revcomp_main \n"); // copy the file into the buffer: uint8_t *buffer = pnvread(lSize,&rqst); //uint8_t *buffer = calloc(stdin_size + LINE_LENGTH, 1); assert(buffer); lookup_t lookup; pthread_mutex_t mutex; job_t *job = 0; init_lookup( (const uint8_t *)"acbdghkmnsrutwvy", (const uint8_t *)"TGVHCDMKNSYAAWBR", &lookup); pthread_mutex_init(&mutex, 0); uint8_t *current = buffer; uint8_t *end = buffer + lSize; uint8_t *header_begin = 0; uint8_t *header_end = 0; uint8_t *body_begin = 0; fprintf(stderr,"Current %s \n",current); if (current[0] == '>') { if (body_begin != 0) { job = do_process_block( header_begin, header_end, body_begin, current, &lookup, &mutex, job); } size_t len = strlen((const char *)current); header_begin = current; header_end = current + len; current += len; body_begin = current; } else { if (current[LINE_LENGTH] == '\n') { current += LINE_LENGTH; } else { size_t len = strlen((const char *)current); if (current[len - 1] == '\n') { --len; } current += len; } } if (body_begin != 0) { job = do_process_block( header_begin, header_end, body_begin, current, &lookup, &mutex, job); } while (job) { pthread_join(job->thread, 0); if (job->free_buffer) { nv_free(job->buffer); } job = job->prev_job; } fprintf(stdout, "revcomp main returning \n"); /*free(buffer);*/ return 0; }