static void gt_mmsearchiterator_reinit(GtMMsearchiterator *mmsi, const GtEncseq *dbencseq, const ESASuffixptr *suftab, GtUword leftbound, GtUword rightbound, GtUword itvoffset, GtReadmode readmode, const GtQuerysubstring *querysubstring, GtUword minmatchlength) { mmsi->suftab = suftab; if (mmsi->esr == NULL) { mmsi->esr = gt_encseq_create_reader_with_readmode(dbencseq, readmode, 0); } else { gt_encseq_reader_reinit_with_readmode(mmsi->esr,dbencseq,readmode,0); } mmsi->lcpitv.left = leftbound; mmsi->lcpitv.right = rightbound; mmsi->lcpitv.offset = itvoffset; if (!gt_mmsearch(dbencseq,mmsi->esr,suftab,readmode,&mmsi->lcpitv, querysubstring,minmatchlength)) { mmsi->lcpitv.left = 1UL; mmsi->lcpitv.right = 0; } mmsi->sufindex = mmsi->lcpitv.left; }
static GtMMsearchiterator *gt_mmsearchiterator_new_generic( const GtEncseq *dbencseq, const ESASuffixptr *suftab, unsigned long leftbound, unsigned long rightbound, unsigned long itvoffset, GtReadmode readmode, const GtQuerysubstring *querysubstring, unsigned long minmatchlength) { GtMMsearchiterator *mmsi = gt_malloc(sizeof *mmsi); mmsi->lcpitv.left = leftbound; mmsi->lcpitv.right = rightbound; mmsi->lcpitv.offset = itvoffset; mmsi->suftab = suftab; mmsi->esr = gt_encseq_create_reader_with_readmode(dbencseq, readmode, 0); if (!gt_mmsearch(dbencseq,mmsi->esr,suftab,readmode,&mmsi->lcpitv, querysubstring,minmatchlength)) { mmsi->lcpitv.left = 1UL; mmsi->lcpitv.right = 0; } mmsi->sufindex = mmsi->lcpitv.left; return mmsi; }