#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory>
#include "p6rgx.h"
using namespace P6R;
namespace {
{
public:
{
if (!ppIface) return eAccessFault;
*ppIface = NULL;
if(iid == IID_p6ICom) *ppIface =
static_cast<p6IDataStream*
>(
this);
else if(iid == IID_p6IDataStream) *ppIface =
static_cast<p6IDataStream*
>(
this);
else return eNoInterface;
return eOk;
}
{
return m_cRef++;
}
{
if(0 == (tmp = (--m_cRef))) { delete this; }
return tmp;
}
{
return eOk;
}
{
if (m_cBuffer && cData+1 > m_cBuffer)
{
free( m_pBuffer );
m_pBuffer = NULL;
m_cBuffer = 0;
}
if (!m_pBuffer)
{
m_pBuffer = (
P6CHAR*) malloc(cData+1);
m_cBuffer = cData;
}
if (m_pBuffer)
{
memcpy( m_pBuffer, pData, cData );
m_pBuffer[cData] = '\0';
printf( m_pBuffer );
}
return eOk;
}
{
CConsoleStream *pObj = NULL;
if(NULL != pOuter) return eNoAgregation;
if(NULL == ppIface) return eAccessFault;
*ppIface = NULL;
if (NULL != (pObj = new (std::nothrow) CConsoleStream() ))
{
pObj->addref();
err = pObj->queryInterface( iid, ppIface );
pObj->release();
}
return err;
}
CConsoleStream() : m_cRef(0), m_pBuffer(NULL), m_cBuffer(0) {;}
virtual ~CConsoleStream() { if (m_pBuffer) free(m_pBuffer); }
protected:
};
{
err = cpWRegex->compile(
P6TEXT(
"(?<=\\$4400)\\bwasher\\b"), P6MOD_NULL );
if (
P6FAILED( err )) printf(
"1 - Expected 0 but got %x\n", err );
offset = 0;
strLength = 0;
err = cpWRegex->search(
P6TEXT(
"Price $4400 for the washer brand"), (P6MOD_FASTGREEDY | P6MOD_FULLLOOKBEHIND), &offset, &strLength );
if (
P6FAILED( err )) printf(
"2 - Expected 0 but got %x\n", err );
if (!(20 == offset && 6 == strLength)) printf( "3 - Expected 20,6 but got %d,%d\n", offset, strLength );
cpWRegex->setTrace( P6WREGEX_TRACE_BASIC );
offset = 0;
strLength = 0;
err = cpWRegex->search(
P6TEXT(
"Price $4400 for washer brand"), (P6MOD_NULL | P6MOD_FULLLOOKBEHIND), &offset, &strLength );
if (
P6FAILED( err )) printf(
"4 - Expected 0 but got %x\n", err );
if (!(16 == offset && 6 == strLength)) printf( "5 - Expected 16,6 but got %d,%d\n", offset, strLength );
cpWRegex->setTrace( P6WREGEX_TRACE_OFF );
err = cpWRegex->compile(
P6TEXT(
"(?<!\\$4400)\\bwasher\\b"), P6MOD_NULL );
if (
P6FAILED( err )) printf(
"6 - Expected 0 but got %x\n", err );
offset = 0;
strLength = 0;
err = cpWRegex->search(
P6TEXT(
"Price for the good washer"), (P6MOD_FASTGREEDY | P6MOD_FULLLOOKBEHIND), &offset, &strLength );
if (
P6FAILED( err )) printf(
"7 - Expected 0 but got %x\n", err );
if (!(19 == offset && 6 == strLength)) printf( "8 - Expected 19,6 but got %d,%d\n", offset, strLength );
offset = 0;
strLength = 0;
err = cpWRegex->search(
P6TEXT(
"Price for the good washer"), (P6MOD_NULL | P6MOD_FULLLOOKBEHIND), &offset, &strLength );
if (
P6FAILED( err )) printf(
"9 - Expected 0 but got %x\n", err );
if (!(19 == offset && 6 == strLength)) printf( "10 - Expected 19,6 but got %d,%d\n", offset, strLength );
offset = 0;
strLength = 0;
err = cpWRegex->search(
P6TEXT(
"Price $4400 good washer"), (P6MOD_FASTGREEDY | P6MOD_FULLLOOKBEHIND), &offset, &strLength );
if (
P6FAILED( err )) printf(
"11 - Expected 0 but got %x\n", err );
if (!(0 == offset && 0 == strLength)) printf( "12 - Expected 0,0 but got %d,%d\n", offset, strLength );
err = cpWRegex->compile(
P6TEXT(
"\\b(?!Cat)\\w+"), P6MOD_NULL );
if (
P6FAILED( err )) printf(
"13 - Expected 0 but got %x\n", err );
offset = 0;
strLength = 0;
err = cpWRegex->search(
P6TEXT(
"Cattle are fine"), P6MOD_FASTGREEDY, &offset, &strLength );
if (
P6FAILED( err )) printf(
"14 - Expected 0 but got %x\n", err );
if (!(7 == offset && 3 == strLength)) printf( "15 - Expected 7,3 but got %d,%d\n", offset, strLength );
err = cpWRegex->compile(
P6TEXT(
"(?<=\\$4400 )\\bwasher\\b"), P6MOD_NULL );
if (
P6FAILED( err )) printf(
"16 - Expected 0 but got %x\n", err );
offset = 0;
strLength = 0;
err = cpWRegex->search(
P6TEXT(
"Price $4400 washer brand"), P6MOD_FASTGREEDY, &offset, &strLength );
if (
P6FAILED( err )) printf(
"17 - Expected 0 but got %x\n", err );
if (!(12 == offset && 6 == strLength)) printf( "18 - Expected 12,6 but got %d,%d\n", offset, strLength );
offset = 0;
strLength = 0;
err = cpWRegex->search(
P6TEXT(
"Price $4400 washer brand"), P6MOD_NULL, &offset, &strLength );
if (
P6FAILED( err )) printf(
"19 - Expected 0 but got %x\n", err );
if (!(12 == offset && 6 == strLength)) printf( "20 - Expected 12,6 but got %d,%d\n", offset, strLength );
err = cpWRegex->compile(
P6TEXT(
"\\b( \\w+ ) \\s (?= \\1\\b (?! ' \\w | (?<=that) \\s))"), P6MOD_SKIPWHITESPACE );
if (
P6FAILED( err )) printf(
"21 - Expected 0 but got %x\n", err );
offset = 0;
strLength = 0;
err = cpWRegex->search(
P6TEXT(
"Now is the time time for all good men"), P6MOD_FASTGREEDY, &offset, &strLength );
if (
P6FAILED( err )) printf(
"22 - Expected 0 but got %x\n", err );
if (!(11 == offset && 5 == strLength)) printf( "23 - Expected 11,5 but got %d,%d\n", offset, strLength );
err = cpWRegex->compile(
P6TEXT(
"\\d+-\\d+-\\d+(?<=^\\w+:)"), P6MOD_NULL );
if (
P6FAILED( err )) printf(
"24 - Expected 0 but got %x\n", err );
offset = 0;
strLength = 0;
err = cpWRegex->search(
P6TEXT(
"Subject: unlimited 123-45-5 abc"), (P6MOD_NULL | P6MOD_FULLLOOKBEHIND), &offset, &strLength );
if (
P6FAILED( err )) printf(
"25 - Expected 0 but got %x\n", err );
if (!(19 == offset && 8 == strLength)) printf( "26 - Expected 19,8 but got %d,%d\n", offset, strLength );
offset = 0;
strLength = 0;
err = cpWRegex->search(
P6TEXT(
"Subject: unlimited 123-45-5 abc"), (P6MOD_FASTGREEDY | P6MOD_FULLLOOKBEHIND), &offset, &strLength );
if (
P6FAILED( err )) printf(
"27 - Expected 0 but got %x\n", err );
if (!(19 == offset && 8 == strLength)) printf( "28 - Expected 19,8 but got %d,%d\n", offset, strLength );
err = cpWRegex->compile(
P6TEXT(
"\\b(\\w+)\\s(?=\\1\\b)"), P6MOD_NULL );
if (
P6FAILED( err )) printf(
"29 - Expected 0 but got %x\n", err );
offset = 0;
strLength = 0;
err = cpWRegex->search(
P6TEXT(
"Now is the time time for all good men"), P6MOD_FASTGREEDY, &offset, &strLength );
if (
P6FAILED( err )) printf(
"30 - Expected 0 but got %x\n", err );
if (!(11 == offset && 5 == strLength)) printf( "31 - Expected 11,5 but got %d,%d\n", offset, strLength );
offset = 0;
strLength = 0;
err = cpWRegex->search(
P6TEXT(
"Now is the time time for all good men"), P6MOD_NULL, &offset, &strLength );
if (
P6FAILED( err )) printf(
"32 - Expected 0 but got %x\n", err );
if (!(11 == offset && 5 == strLength)) printf( "33 - Expected 11,5 but got %d,%d\n", offset, strLength );
return err;
}
}
int main(int argc,char *argv[])
{
{
{
err = runRegex( cpDataStream );
}
else printf("ERROR: Failed to initialize the loader [ %x ]\n", err );
}
else printf( "ERROR: Failed to create CConsoleStream [ %x ]\n", err );
return err;
}