static void gt_seq_iterator_sequence_buffer_set_symbolmap(GtSeqIterator *si, const GtUchar *symbolmap) { GtSeqIteratorSequenceBuffer *seqit; gt_assert(si); seqit = gt_seq_iterator_sequence_buffer_cast(si); gt_sequence_buffer_set_symbolmap(seqit->fb, symbolmap); }
GtKmercodeiterator *gt_kmercodeiterator_filetab_new( const GtStrArray *filenametab, unsigned int numofchars, unsigned int kmersize, const GtUchar *symbolmap, bool plainformat, GtError *err) { GtKmercodeiterator *kmercodeiterator; GtUchar charcode; bool haserr = false; int retval; gt_error_check(err); kmercodeiterator = gt_malloc(sizeof (*kmercodeiterator)); kmercodeiterator->esr = NULL; kmercodeiterator->hasprocessedfirst = false; kmercodeiterator->inputexhausted = false; kmercodeiterator->spwp = kmerstream_new(numofchars,kmersize); kmercodeiterator->totallength = 0; if (plainformat) { kmercodeiterator->fb = gt_sequence_buffer_plain_new(filenametab); } else { kmercodeiterator->fb = gt_sequence_buffer_new_guess_type(filenametab, err); } if (kmercodeiterator->fb == NULL) { haserr = true; } if (!haserr) { gt_sequence_buffer_set_symbolmap(kmercodeiterator->fb, symbolmap); for (kmercodeiterator->currentposition = 0; kmercodeiterator->currentposition < (unsigned long) kmersize; kmercodeiterator->currentposition++) { retval = gt_sequence_buffer_next(kmercodeiterator->fb,&charcode,err); if (retval < 0) { haserr = true; break; } if (retval == 0) { kmercodeiterator->inputexhausted = true; break; } kmercodeiterator->spwp->windowwidth++; updatespecialpositions(kmercodeiterator->spwp,charcode,false,0); kmercodeiterator->spwp->cyclicwindow[kmercodeiterator-> spwp->windowwidth-1] = charcode; } } if (haserr) { gt_kmercodeiterator_delete(kmercodeiterator); return NULL; } return kmercodeiterator; }
static int testfullscan(const GtStrArray *filenametab, const Encodedsequence *encseq, Readmode readmode, GtError *err) { Seqpos pos, totallength; GtUchar ccscan = 0, ccra, ccsr; GtSequenceBuffer *fb = NULL; int retval; bool haserr = false; Encodedsequencescanstate *esr; unsigned long long fullscanpbar = 0; gt_error_check(err); totallength = getencseqtotallength(encseq); gt_progressbar_start(&fullscanpbar,(unsigned long long) totallength); if (filenametab != NULL) { fb = gt_sequence_buffer_new_guess_type((GtStrArray*) filenametab, err); if (!fb) haserr = true; if (!haserr) gt_sequence_buffer_set_symbolmap(fb, getencseqAlphabetsymbolmap(encseq)); } if (!haserr) { esr = newEncodedsequencescanstate(); initEncodedsequencescanstate(esr,encseq,readmode,0); for (pos=0; /* Nothing */; pos++) { if (filenametab != NULL && readmode == Forwardmode) { retval = gt_sequence_buffer_next(fb,&ccscan,err); if (retval < 0) { haserr = true; break; } if (retval == 0) { break; } } else { if (pos >= totallength) { break; } } ccra = getencodedchar(encseq,pos,readmode); /* Random access */ if (filenametab != NULL && readmode == Forwardmode) { if (ccscan != ccra) { gt_error_set(err,"access=%s, position=" FormatSeqpos ": scan (readnextchar) = %u != " "%u = random access", encseqaccessname(encseq), pos, (unsigned int) ccscan, (unsigned int) ccra); haserr = true; break; } } ccsr = sequentialgetencodedchar(encseq,esr,pos,readmode); if (ccra != ccsr) { gt_error_set(err,"access=%s, mode=%s: position=" FormatSeqpos ": random access = %u != %u = sequential read", encseqaccessname(encseq), showreadmode(readmode), pos, (unsigned int) ccra, (unsigned int) ccsr); haserr = true; break; } fullscanpbar++; } gt_progressbar_stop(); } if (!haserr) { if (pos != totallength) { gt_error_set(err,"sequence length must be " FormatSeqpos " but is " FormatSeqpos,totallength,pos); haserr = true; } } freeEncodedsequencescanstate(&esr); gt_sequence_buffer_delete(fb); return haserr ? -1 : 0; }