void gt_inplace_reversecomplement(GtUchar *seq,GtUword len) { GtUchar tmp, *frontptr, *backptr; for (frontptr = seq, backptr = seq + len - 1; frontptr < backptr; frontptr++, backptr--) { tmp = *frontptr; *frontptr = GT_COMPLEMENTBASE(*backptr); *backptr = GT_COMPLEMENTBASE(tmp); } }
static GtUchar gt_mmsearch_accessquery(const GtQueryrepresentation *queryrep, GtUword pos) { GtUword abspos, cc; gt_assert(queryrep != NULL); gt_assert(pos < queryrep->seqlen); abspos = queryrep->startpos + (queryrep->readmode == GT_READMODE_FORWARD ? pos : GT_REVERSEPOS(queryrep->seqlen,pos)); if (queryrep->sequence != NULL) { cc = queryrep->sequence[abspos]; } else { gt_assert(queryrep->encseq != NULL); cc = gt_encseq_get_encoded_char(queryrep->encseq,abspos, GT_READMODE_FORWARD); } if (GT_ISDIRCOMPLEMENT(queryrep->readmode)) { if (ISSPECIAL(cc)) { return cc; } return GT_COMPLEMENTBASE(cc); } else { return cc; } }
void bare_encseq_convert(GtBareEncseq *bare_encseq,bool forward,bool direct) { GtUchar *leftptr, *rightptr; if (forward) { gt_assert(!direct); for (leftptr = bare_encseq->sequence; leftptr < bare_encseq->sequence + bare_encseq->totallength; leftptr++) { if (ISNOTSPECIAL(*leftptr)) { *leftptr = GT_COMPLEMENTBASE(*leftptr); } } } else { if (direct) { for (leftptr = bare_encseq->sequence, rightptr = bare_encseq->sequence + bare_encseq->totallength - 1; leftptr < rightptr; leftptr++, rightptr--) { GtUchar tmp = *leftptr; *leftptr = *rightptr; *rightptr = tmp; } } else { for (leftptr = bare_encseq->sequence, rightptr = bare_encseq->sequence + bare_encseq->totallength - 1; leftptr <= rightptr; leftptr++, rightptr--) { GtUchar tmp = *leftptr; *leftptr = ISSPECIAL(*rightptr) ? *rightptr : GT_COMPLEMENTBASE(*rightptr); *rightptr = ISSPECIAL(tmp) ? tmp : GT_COMPLEMENTBASE(tmp); } } } }
void gt_copy_reversecomplement(GtUchar *dest,const GtUchar *src, GtUword len) { GtUchar *destptr; const GtUchar *srcptr; for (destptr = dest, srcptr = src + len - 1; destptr < dest + len; destptr++, srcptr--) { *destptr = GT_COMPLEMENTBASE(*srcptr); } }