Show three different functions to perform text replacement including "replaceWithCallback" which is a unique P6R feature.
#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 ( 2 <= g_callbackNum ) g_callbackNum = 0;
switch( g_callbackNum ) {
case 0:
g_callbackBuffer[0] =
P6CHR(
'H');
g_callbackBuffer[1] =
P6CHR(
'H');
g_callbackBuffer[2] =
P6CHR(
' ');
g_callbackBuffer[3] =
P6CHR(
'-');
g_callbackBuffer[4] =
P6CHR(
'\\');
g_callbackBuffer[5] =
P6CHR(
'1');
g_callbackBuffer[6] =
P6CHR(
'-');
g_callbackBuffer[7] =
P6CHR(
' ');
g_callbackBuffer[8] =
P6CHR(
'H');
g_callbackBuffer[9] =
P6CHR(
'H');
g_callbackBuffer[10] =
P6CHR(
'\0');
break;
case 1:
g_callbackBuffer[0] =
P6CHR(
'Q');
g_callbackBuffer[1] =
P6CHR(
'Q');
g_callbackBuffer[2] =
P6CHR(
' ');
g_callbackBuffer[3] =
P6CHR(
'-');
g_callbackBuffer[4] =
P6CHR(
'\\');
g_callbackBuffer[5] =
P6CHR(
'1');
g_callbackBuffer[6] =
P6CHR(
'-');
g_callbackBuffer[7] =
P6CHR(
' ');
g_callbackBuffer[8] =
P6CHR(
'Q');
g_callbackBuffer[9] =
P6CHR(
'Q');
g_callbackBuffer[10] =
P6CHR(
'\0');
break;
default:
g_callbackNum++;
return NULL;
break;
}
g_callbackNum++;
return g_callbackBuffer;
}
{
{
if (cpMatch)
{
cpMatch->
next( &pResult );
err = cpStr->
wstrncmp(
P6TEXT(
"abcdHH -2- HHxxxxx123dcQQ -52- QQABC"), pResult, 36, &iResult );
if (iResult != 0) printf( "replaceWithCallback - expected 0 but got %d\n", iResult );
err = cpStr->
wstrlen( pResult, 10000, &length );
if (length != 36) printf( "replaceWithCallback - expected 36 but got %d\n", length );
}
}
{
{
if (23 != utilSize) printf( "replace - expected 23 but got %d\n", utilSize );
err = cpStr->
wstrncmp(
P6TEXT(
"abcd---xxxxx123dc---ABC"), utilString, 23, &iResult );
if (iResult != 0) printf( "replace - expected 0 but got %d\n", iResult );
}
utilSize = 0;
iResult = -1;
{
if (23 != utilSize) printf( "replaceInPace - expected 23 but got %d\n", utilSize );
err = cpStr->
wstrncmp(
P6TEXT(
"abcd---xxxxx123dc---ABC"), utilString, 23, &iResult );
if (iResult != 0) printf( "replaceInPlace - expected 0 but got %d\n", iResult );
}
}
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;
}