From 3340cd8c77dc2335915a3bb9a766f9a089774e1d Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 13:00:05 +0000 Subject: Utilisateur : Fcolin Date : 3/03/05 Heure : 14:02 Archivé dans $/Bus/Ivy Commentaire: Passage a la lib PCRE (vss 19) --- Ivy/IvyApplication.cxx | 66 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 6 deletions(-) (limited to 'Ivy/IvyApplication.cxx') diff --git a/Ivy/IvyApplication.cxx b/Ivy/IvyApplication.cxx index f0d4f75..faafaf4 100644 --- a/Ivy/IvyApplication.cxx +++ b/Ivy/IvyApplication.cxx @@ -4,7 +4,8 @@ #include "stdafx.h" #include "IvyApplication.h" -#include "Regexp.h" + + //#define IVY_DEBUG @@ -55,7 +56,10 @@ IvyApplication::~IvyApplication() { // bus->RemoveApplication( this ); for ( unsigned int i = 0; i < regexp_in.size(); i++) +#ifdef USE_PCRE +#else delete regexp_in[i]; +#endif regexp_in.clear(); if ( m_hSocket != INVALID_SOCKET ) Close(); @@ -95,12 +99,19 @@ void IvyApplication::OnReceive(char * line) int err; unsigned int id; int kind_of_msg = Bye; + char *arg; + int argc = 0; + +#ifdef USE_PCRE + pcre *exp; + const char *argv[max_subexp]; + const char *errmsg; + int erroffset; +#else Regexp *exp; - - - int argc = 0; const char *argv[Regexp::NSUBEXP]; - char *arg; +#endif + #ifdef IVY_DEBUG TRACE("Receive %s\n",line); @@ -149,6 +160,19 @@ void IvyApplication::OnReceive(char * line) #endif //IVY_DEBUG return; } +#ifdef USE_PCRE + exp = pcre_compile( arg, PCRE_CASELESS, &errmsg, &erroffset, NULL ); + if ( !exp ) + { + string err( "Error can't compile regexp '" ); + err += arg; + err += "' error "; + err += errmsg; + SendMsg( Error, Error, err.c_str() ); + TRACE("IvyApplication %s\n",err.c_str()); + return; + } +#else exp = new Regexp( arg ); if ( !exp->CompiledOK() ) { @@ -160,6 +184,7 @@ void IvyApplication::OnReceive(char * line) TRACE("IvyApplication %s\n",err.c_str()); return; } +#endif if ( regexp_in.size() < (id + 1) ) regexp_in.resize( id + 1 ); regexp_in[ id ] = exp; @@ -175,7 +200,10 @@ void IvyApplication::OnReceive(char * line) if ( regexp_in[id] ) { exp = regexp_in[ id ]; +#ifdef USE_PCRE +#else delete exp; +#endif regexp_in[ id ] = NULL; } break; @@ -289,7 +317,11 @@ void IvyApplication::OnClose(int nErrorCode) bus->CallApplicationDisconnectedCallback( this ); for ( unsigned int i = 0; i < regexp_in.size(); i++) +#ifdef USE_PCRE + pcre_free( regexp_in[i] ); +#else delete regexp_in[i]; +#endif regexp_in.clear(); Close(); // bus->RemoveApplication( this ); @@ -298,12 +330,33 @@ void IvyApplication::OnClose(int nErrorCode) int IvyApplication::SendMsg(const char *message) { int count = 0; +#ifdef USE_PCRE + pcre *exp; + int ovector[max_subexp*3]; +#else Regexp *exp; +#endif /* send to already connected */ for ( unsigned int i = 0; i < regexp_in.size(); i++ ) { exp = regexp_in[i]; - +#ifdef USE_PCRE + int match_count = pcre_exec( exp, NULL, message, strlen( message ), 0, 0, ovector, max_subexp ); + if ( match_count > 1 ) + { + string buffer; + const char *substring; + for ( int j = 1; j < match_count; j++ ) + { + pcre_get_substring(message, ovector, match_count, j, &substring); + buffer += substring; + buffer += ARG_END; + pcre_free_substring( substring ); + } + SendMsg( Msg, i, buffer.c_str() ); + count++; + } +#else if ( exp && exp->Match( message ) ) { string buffer; @@ -315,6 +368,7 @@ int IvyApplication::SendMsg(const char *message) SendMsg( Msg, i, buffer.c_str() ); count++; } +#endif } return count; } -- cgit v1.1