summaryrefslogtreecommitdiff
path: root/Ivy/IvyApplication.cxx
diff options
context:
space:
mode:
authorfcolin2007-02-01 13:00:05 +0000
committerfcolin2007-02-01 13:00:05 +0000
commit3340cd8c77dc2335915a3bb9a766f9a089774e1d (patch)
tree474843c9f3c6339fbcb696fec670527b66481374 /Ivy/IvyApplication.cxx
parentfc091c2b6c66878f01575c3c24121f3dde9450a3 (diff)
downloadivy-cplusplus-3340cd8c77dc2335915a3bb9a766f9a089774e1d.zip
ivy-cplusplus-3340cd8c77dc2335915a3bb9a766f9a089774e1d.tar.gz
ivy-cplusplus-3340cd8c77dc2335915a3bb9a766f9a089774e1d.tar.bz2
ivy-cplusplus-3340cd8c77dc2335915a3bb9a766f9a089774e1d.tar.xz
Utilisateur : Fcolin Date : 3/03/05 Heure : 14:02 Archivé dans $/Bus/Ivy Commentaire: Passage a la lib PCRE (vss 19)
Diffstat (limited to 'Ivy/IvyApplication.cxx')
-rw-r--r--Ivy/IvyApplication.cxx66
1 files changed, 60 insertions, 6 deletions
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;
}