Example #1
0
File: ajreg.c Project: ICO2S/emboss
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;
}
Example #2
0
File: ajreg.c Project: ICO2S/emboss
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;
}