AjBool ajRegExecC(AjPRegexp prog, const char* str) { int startoffset = 0; int options = 0; int status = 0; status = pcre_exec(prog->pcre, prog->extra, str, strlen(str), startoffset, options, prog->ovector, 3*prog->ovecsize); if(status >= 0) { prog->orig = str; if(status == 0) ajWarn("ajRegExecC too many substrings"); return ajTrue; } if(status < -1) /* -1 is a simple fail to match */ { /* others are recursion limits etc. */ ajDebug("ajRegExecC returned unexpected status '%d'\n", status); prog->orig = str; /* needed for the trace */ ajRegTrace(prog); } prog->orig = NULL; return ajFalse; }
AjBool ajRegExecall(AjPRegexp prog, const AjPStr str) { int startoffset = 0; int options = 0; if(!regDfaWorkspace) AJCNEW(regDfaWorkspace, regDfaWsCount); prog->matches = pcre_dfa_exec(prog->pcre, prog->extra, ajStrGetPtr(str), ajStrGetLen(str), startoffset, options, prog->ovector, 3*prog->ovecsize, regDfaWorkspace, regDfaWsCount); if(prog->matches >= 0) { prog->orig = ajStrGetPtr(str); if(prog->matches == 0) ajWarn("ajRegExecall too many substrings"); return ajTrue; } if(prog->matches < -1) /* -1 is a simple fail to match */ { /* others are recursion limits etc. */ ajDebug("ajRegExecall returned unexpected status '%d'\n", prog->matches); prog->orig = ajStrGetPtr(str); /* needed for the trace */ ajRegTrace(prog); } prog->orig = NULL; return ajFalse; }
static void stssearch_primTest(void **x,void *cl) { Primer* p; Primer primdata; AjBool testa; AjBool testb; AjBool testc; AjBool testd; ajint ioff; (void) cl; /* make it used */ p = (Primer*) x; primdata = *p; ntests++; if(!(ntests % 1000)) ajDebug("completed tests: %d\n", ntests); testa = ajRegExec(primdata->Prima, seqstr); if(testa) { ioff = ajRegOffset(primdata->Prima); ajDebug("%s: %S PrimerA matched at %d\n", ajSeqGetNameC(seq), primdata->Name, ioff); ajFmtPrintF(out, "%s: %S PrimerA matched at %d\n", ajSeqGetNameC(seq), primdata->Name, ioff); ajRegTrace(primdata->Prima); } testb = ajRegExec(primdata->Primb, seqstr); if(testb) { ioff = ajRegOffset(primdata->Primb); ajDebug("%s: %S PrimerB matched at %d\n", ajSeqGetNameC(seq), primdata->Name, ioff); ajFmtPrintF(out, "%s: %S PrimerB matched at %d\n", ajSeqGetNameC(seq), primdata->Name, ioff); ajRegTrace(primdata->Primb); } testc = ajRegExec(primdata->Prima, revstr); if(testc) { ioff = ajStrGetLen(seqstr) - ajRegOffset(primdata->Prima); ajDebug("%s: (rev) %S PrimerA matched at %d\n", ajSeqGetNameC(seq), primdata->Name, ioff); ajFmtPrintF(out, "%s: (rev) %S PrimerA matched at %d\n", ajSeqGetNameC(seq), primdata->Name, ioff); ajRegTrace(primdata->Prima); } testd = ajRegExec(primdata->Primb, revstr); if(testd) { ioff = ajStrGetLen(seqstr) - ajRegOffset(primdata->Primb); ajDebug("%s: (rev) %S PrimerB matched at %d\n", ajSeqGetNameC(seq), primdata->Name, ioff); ajFmtPrintF(out, "%s: (rev) %S PrimerB matched at %d\n", ajSeqGetNameC(seq), primdata->Name, ioff); ajRegTrace(primdata->Primb); } return; }