static int sarrselfsubstringmatch(const GtUchar *dbseq, GtUword dblen, const GtUchar *query, GtUword querylen, unsigned int minlength, GtAlphabet *alpha, Processmaxpairs processmaxpairs, void *processmaxpairsinfo, GtLogger *logger, GtError *err) { Substringmatchinfo ssi; unsigned int numofchars, recommendedprefixlength; GtEncseqBuilder *eb; bool haserr = false; eb = gt_encseq_builder_new(alpha); gt_encseq_builder_disable_multiseq_support(eb); gt_encseq_builder_disable_description_support(eb); gt_encseq_builder_set_logger(eb, logger); gt_encseq_builder_add_encoded(eb, dbseq, dblen, NULL); gt_encseq_builder_add_encoded(eb, query, querylen, NULL); ssi.encseq = gt_encseq_builder_build(eb, err); gt_encseq_builder_delete(eb); ssi.minlength = minlength; ssi.processmaxpairs = processmaxpairs; ssi.processmaxpairsinfo = processmaxpairsinfo; numofchars = gt_alphabet_num_of_chars(alpha); recommendedprefixlength = gt_recommendedprefixlength(numofchars, dblen+querylen+1, GT_RECOMMENDED_MULTIPLIER_DEFAULT, true); if (constructsarrandrunmaxpairs(&ssi, GT_READMODE_FORWARD, recommendedprefixlength, 1U, /* parts */ 0, /* maximumspace */ NULL, false, logger, err) != 0) { haserr = true; } gt_encseq_delete(ssi.encseq); ssi.encseq = NULL; return haserr ? -1 : 0; }
int gt_sarrquerysubstringmatch(const GtUchar *dbseq, unsigned long dblen, const GtUchar *query, unsigned long querylen, unsigned int minlength, GtAlphabet *alpha, GtProcessquerymatch processquerymatch, void *processquerymatchinfo, GtLogger *logger, GtError *err) { unsigned int numofchars, recommendedprefixlength; bool haserr = false; GtEncseq *dbencseq; GtEncseqBuilder *eb; eb = gt_encseq_builder_new(alpha); gt_encseq_builder_disable_multiseq_support(eb); gt_encseq_builder_disable_description_support(eb); gt_encseq_builder_set_logger(eb, logger); gt_encseq_builder_add_encoded(eb, dbseq, dblen, NULL); dbencseq = gt_encseq_builder_build(eb, err); gt_encseq_builder_delete(eb); numofchars = gt_alphabet_num_of_chars(alpha); recommendedprefixlength = gt_recommendedprefixlength(numofchars,dblen, GT_RECOMMENDED_MULTIPLIER_DEFAULT, true); if (gt_constructsarrandrunmmsearch(dbencseq, GT_READMODE_FORWARD, recommendedprefixlength, 1U, /* parts */ 0, /* maximumspace */ query, querylen, minlength, processquerymatch, processquerymatchinfo, NULL, false, err) != 0) { haserr = true; } gt_encseq_delete(dbencseq); dbencseq = NULL; return haserr ? -1 : 0; }