void * mpseNew( int method ) { MPSE * p; p = (MPSE*)malloc( sizeof(MPSE) ); if( !p ) return NULL; p->method=method; p->obj =NULL; s_bcnt =0; switch( method ) { case MPSE_AUTO: case MPSE_MWM: p->obj = mwmNew(); return (void*)p; break; case MPSE_AC: p->obj = acsmNew(); return (void*)p; break; case MPSE_KTBM: case MPSE_LOWMEM: p->obj = KTrieNew(); return (void*)p; break; default: return 0; break; } }
/* ** Test driver */ int CDECL main ( int argc, char ** argv ) { unsigned char *T, *text; int n,textlen; int nmatches, i, bm = 0; MWM_STRUCT *ps; int npats=0, len, stat, nocase=0; BINARY *p; int irep=0,irand=0,isyn=0,nrep=1024,repchar=0; if( argc < 5 ) { printf("usage: %s [-rand|-rep -n bytes -c|ch repchar -pr npats minlen ] -t|th TextToSearch -nocase [-pr numpats] -p|ph pat1 -p|ph pat2 -p|ph pat3\n",argv[0]); exit(1); } /* -- Allocate a Pattern Matching Structure - and Init it. */ ps = mwmNew(); for(i=1;i<argc;i++) { if( strcmp(argv[i],"-nocase")==0 ) { nocase = 1; } if( strcmp(argv[i],"-p")==0 ) { i++; npats++; patArray[npats] = argv[i]; len = strlen( argv[i] ); mwmAddPatternEx( ps, (unsigned char*)argv[i], len, nocase, 0, 0, (void*)npats /* ID */, 3000 /* IID -internal id*/ ); } if( strcmp(argv[i],"-ph")==0 ) { i++; npats++; patArray[npats] = argv[i]; p = converthexbytes( argv[i] ); mwmAddPatternEx( ps, p->b, p->blen, 1 /* nocase*/, 0, 0, (void*)npats /* ID */, 3000 /* IID -internal id*/ ); } if( strcmp(argv[i],"-pr")==0 ) { int m = atoi( argv[++i] ); int imin = atoi( argv[++i] ); int k; npats = 0; for(k=0;k<m;k++) { unsigned char px[256]; int len = randpat( px, imin ); npats++; patArray[npats] = (unsigned char *)malloc( len+1 ); sprintf(patArray[npats],"%s",px); mwmAddPatternEx( ps, px, len, 0 /* nocase*/, 0, 0, (void*)npats /* ID */, 3000 /* IID -internal id*/ ); } } if( strcmp(argv[i],"-rand")==0 ) { irand = 1; isyn = 1; } if( strcmp(argv[i],"-rep")==0 ) { irep = 1; isyn = 1; } if( strcmp(argv[i],"-n")==0 ) { nrep = atoi( argv[++i] ); isyn = 1; } if( strcmp(argv[i],"-c")==0 ) { repchar = argv[++i][0]; isyn = 1; } if( strcmp(argv[i],"-ch")==0 ) { BINARY * px = converthexbytes( argv[++i] ); repchar = px->b[0]; isyn = 1; } if( strcmp(argv[i],"-t")==0 ) { i++; text = argv[i]; textlen=strlen(text); } if( strcmp(argv[i],"-th")==0 ) { i++; p = converthexbytes( argv[i] ); text = p->b; textlen = p->blen; } } /* generate synthetic text */ if( isyn ) { p = syndata( nrep, irand, repchar ); text = p->b; textlen = p->blen; } /* --- Preprocess Patterns */ mwmPrepPatterns( ps ); /* ---- Do a multi-pattern search in the Text */ stat = mwmSearch( (void*)ps, (unsigned char*)text, textlen, match, 0 ); if( stat == 0 ) { printf("no pattern matches\n"); }else{ printf("%d pattern matches in list\n",stat); } return 0; }