diff options
author | Calvin Morrison <mutantturkey@gmail.com> | 2013-09-12 16:56:58 -0400 |
---|---|---|
committer | Calvin Morrison <mutantturkey@gmail.com> | 2013-09-12 16:56:58 -0400 |
commit | dc659709ec94c9d414df8b04f62322f74e1e4a0d (patch) | |
tree | a6e25fe80bd246b1e25cb00b7425434448ca3e43 | |
parent | d74c19c8fceac333f9420a898b85ad0b1a8a85ff (diff) |
don't use strtol
-rw-r--r-- | kmer_utils.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/kmer_utils.c b/kmer_utils.c index 7647965..e737346 100644 --- a/kmer_utils.c +++ b/kmer_utils.c @@ -16,34 +16,35 @@ // long kmer - how long of a index value you want to return // long error_pos - what index to return for a non ACGT character // -inline long convert_kmer_to_index(char *str, unsigned long kmer, long error_pos) { +inline long convert_kmer_to_index(const char *str, long kmer, long error_pos) { - char **ptr = NULL; - char vals[kmer]; - unsigned long i = 0; + long i = 0; + long out = 0; + long multiply = 1; - for(i = 0; i < kmer; i++) { + for(i = kmer - 1; i >= 0; i--){ switch(str[i]) { case 'a': case 'A': - vals[i] = '0'; break; case 'c': case 'C': - vals[i] = '1'; + out += 1 * multiply; break; case 'g': case 'G': - vals[i] = '2'; + out += 2 * multiply; break; case 't': case 'T': - vals[i] = '3'; + out += 3 * multiply; break; default: return error_pos; } + + multiply = multiply << 2; } - return strtol(vals, ptr, 4); + return out; } |