// Iterates through a string and maps all the nucleotides to their enum counter // Returns length of white-space elimited mapped string, now in buffer, which was // updated by reference. size_t clear_whitespaces_do_mapping ( signed char* buffer, long size ) { size_t non_ws_index = 0, traverse_index = 0; while ( traverse_index < size ) { char curr_char = buffer[traverse_index]; switch ( curr_char ) { case 'A': case 'C': case 'G': case 'T': /*this used to be a copy not also does mapping*/ buffer[non_ws_index++] = char_mapping(curr_char); break; } ++traverse_index; } return non_ws_index; }
static size_t read_sequence(FILE *file, int fnum, signed char *dest, size_t fsize) { fread(dest, sizeof(char), fsize, file); size_t seqlen = 0, traverse_index = 0; while ( traverse_index < fsize ) { char curr_char = dest[traverse_index]; switch ( curr_char ) { case 'A': case 'C': case 'G': case 'T': dest[seqlen++] = char_mapping(curr_char); break; } ++traverse_index; } dest[seqlen] = '\0'; PRINTF("Size of input sequence %d has length %zu\n", fnum, seqlen); return seqlen; }