Shows simple use of capturing matching text, split, and explode.
#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:
};
{
if (
P6FAILED( err = cpWSplit->initialize( P6WSPLIT_NOFLAGS )))
return err;
cpWRegex->setTrace( P6WREGEX_TRACE_BASIC );
err = cpWRegex->compile(
P6TEXT(
"(abc){3,7}"), P6MOD_NULL );
offset = 0;
strLength = 0;
if (
P6SUCCEEDED( err = cpWRegex->search(
P6TEXT(
"confabcabcabc-9393939"), P6MOD_FASTGREEDY, &offset, &strLength )))
{
if (4 != offset && 9 != strLength) printf( "Expected 4,9 but got %d,%d", offset, strLength );
}
offset = 0;
strLength = 0;
if (
P6SUCCEEDED( err = cpWRegex->getCaptureText( 1, &offset, &strLength )))
{
if (4 != offset && 9 != strLength) printf( "Expected 4,9 but got %d,%d", offset, strLength );
}
cpWRegex->setTrace( P6WREGEX_TRACE_OFF );
{
{
err = cpEnum->next( 1, &chunk, &numReturned );
if (eEndOfFile == err || 0 == numReturned) break;
switch( count ) {
case 0:
if (0 != chunk.
offset || 4 != chunk.
length) printf(
"Expected 0,4 but got %d,%d", chunk.
offset, chunk.
length );
break;
case 1:
if (4 != chunk.
offset || 3 != chunk.
length) printf(
"Expected 4,3 but got %d,%d", chunk.
offset, chunk.
length );
break;
case 2:
if (7 != chunk.
offset || 5 != chunk.
length) printf(
"Expected 7,5 but got %d,%d", chunk.
offset, chunk.
length );
break;
case 3:
if (12 != chunk.
offset || 16 != chunk.
length) printf(
"Expected 12,16 but got %d,%d", chunk.
offset, chunk.
length );
break;
case 4:
if (28 != chunk.
offset || 4 != chunk.
length) printf(
"Expected 28,4 but got %d,%d", chunk.
offset, chunk.
length );
break;
case 5:
if (32 != chunk.
offset || 7 != chunk.
length) printf(
"Expected 32,7 but got %d,%d", chunk.
offset, chunk.
length );
break;
case 6:
if (39 != chunk.
offset || 5 != chunk.
length) printf(
"Expected 39,5 but got %d,%d", chunk.
offset, chunk.
length );
break;
case 7:
if (44 != chunk.
offset || 4 != chunk.
length) printf(
"Expected 44,4 but got %d,%d", chunk.
offset, chunk.
length );
break;
case 8:
if (48 != chunk.
offset || 7 != chunk.
length) printf(
"Expected 48,7 but got %d,%d", chunk.
offset, chunk.
length );
break;
}
numReturned = 0;
count++;
}
}
count = 0;
{
{
err = cpEnum->next( 1, &chunk, &numReturned );
if (eEndOfFile == err || 0 == numReturned) break;
switch( count ) {
case 0:
if (0 != chunk.
offset || 6 != chunk.
length) printf(
"Expected 0,6 but got %d,%d", chunk.
offset, chunk.
length );
break;
case 1:
if (13 != chunk.
offset || 10 != chunk.
length) printf(
"Expected 13,10 but got %d,%d", chunk.
offset, chunk.
length );
break;
case 2:
if (30 != chunk.
offset || 9 != chunk.
length) printf(
"Expected 30,9 but got %d,%d", chunk.
offset, chunk.
length );
break;
case 3:
if (46 != chunk.
offset || 7 != chunk.
length) printf(
"Expected 46,7 but got %d,%d", chunk.
offset, chunk.
length );
break;
}
numReturned = 0;
count++;
}
}
if (eEndOfFile == err) err = eOk;
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;
}