static GtCodetype qgram2codefillspecial(unsigned int numofchars, unsigned int kmersize, const GtEncseq *encseq, GtReadmode readmode, GtUword startpos, GtUword totallength) { GtCodetype integercode; GtUword pos; bool foundspecial; GtUchar cc; if (startpos >= totallength) { integercode = (GtCodetype) (numofchars - 1); foundspecial = true; } else { /* for testing */ cc = gt_encseq_get_encoded_char(encseq,startpos,readmode); if (ISSPECIAL(cc)) { integercode = (GtCodetype) (numofchars - 1); foundspecial = true; } else { integercode = (GtCodetype) cc; foundspecial = false; } } for (pos = startpos + 1; pos < startpos + kmersize; pos++) { if (foundspecial) { ADDNEXTCHAR(integercode,numofchars-1,numofchars); } else { if (pos >= totallength) { ADDNEXTCHAR(integercode,numofchars-1,numofchars); foundspecial = true; } else { /* for testing */ cc = gt_encseq_get_encoded_char(encseq,pos,readmode); if (ISSPECIAL(cc)) { ADDNEXTCHAR(integercode,numofchars-1,numofchars); foundspecial = true; } else { ADDNEXTCHAR(integercode,cc,numofchars); } } } } return integercode; }
static GtCodetype windowkmer2code(unsigned int numofchars, unsigned int kmersize, const GtUchar *cyclicwindow, unsigned int firstindex) { unsigned int i; GtCodetype integercode; GtUchar cc; bool foundspecial; cc = cyclicwindow[firstindex]; if (ISSPECIAL(cc)) { integercode = (GtCodetype) (numofchars-1); foundspecial = true; } else { integercode = (GtCodetype) cc; foundspecial = false; } for (i=1U; i < kmersize; i++) { if (foundspecial) { ADDNEXTCHAR(integercode,numofchars-1,numofchars); } else { cc = cyclicwindow[(firstindex+i) % kmersize]; if (ISSPECIAL(cc)) { ADDNEXTCHAR(integercode,numofchars-1,numofchars); foundspecial = true; } else { ADDNEXTCHAR(integercode,cc,numofchars); } } } return integercode; }