00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef __MWM_H__
00029 #define __MWM_H__
00030
00031
00032
00033
00034 #define BITOP_TEST
00035
00036
00037 #ifdef HAVE_CONFIG_H
00038 #include "config.h"
00039 #endif
00040
00041 #ifdef BITOP_TEST
00042 #include "bitop.h"
00043 #endif
00044
00045 #ifndef WIN32
00046 #ifndef INLINE
00047 #define INLINE inline
00048 #endif
00049
00050 #ifndef UINT64
00051 #define UINT64 unsigned long long
00052 #endif
00053
00054 #else
00055 #ifndef INLINE
00056 #define INLINE __inline
00057 #endif
00058
00059 #ifndef UINT64
00060 #define UINT64 __int64
00061 #endif
00062
00063 #endif
00064
00065 #ifndef CDECL
00066 #define CDECL
00067 #endif
00068
00069
00070 #define COPY_PATTERNS
00071
00072
00073
00074
00075
00076
00077
00078 #define MWM_FEATURES "MWM:BC/BW-SHIFT + 2-BYTE-HASH"
00079
00080 #define HASHTABLESIZE (64*1024)
00081 #define HASHBYTES16 2
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101 typedef struct {
00102
00103 unsigned char *P;
00104 int M;
00105 short bcShift[256];
00106
00107 }HBM_STRUCT;
00108
00109
00110
00111
00112
00113 typedef struct _mwm_pattern_struct {
00114
00115 struct _mwm_pattern_struct * next;
00116
00117 unsigned char *psPat;
00118 unsigned char *psPatCase;
00119 unsigned psLen;
00120 void *psID;
00121 unsigned psID2;
00122 int psIID;
00123 unsigned psNoCase;
00124 int psOffset;
00125 unsigned psDepth;
00126
00127 HBM_STRUCT * psBmh;
00128
00129 } MWM_PATTERN_STRUCT;
00130
00131
00132
00133
00134
00135 #define MTH_MWM 0
00136 #define MTH_BM 1
00137
00138 #define HASH_TYPE short
00139
00140 #define BWSHIFTABLESIZE (64*1024)
00141
00142
00143
00144
00145 typedef struct _mwm_struct {
00146
00147 int msMethod;
00148
00149 MWM_PATTERN_STRUCT * plist;
00150
00151
00152 int msMaxPatterns;
00153 MWM_PATTERN_STRUCT *msPatArray;
00154
00155
00156 unsigned short *msNumArray;
00157
00158
00159 unsigned short msNumArray1[256];
00160
00161
00162 int msNumPatterns;
00163
00164
00165 unsigned msNumHashEntries;
00166 HASH_TYPE *msHash;
00167 HASH_TYPE msHash1[256];
00168
00169
00170 short msShift[256];
00171 unsigned msShiftLen;
00172
00173
00174 unsigned char* msShift2;
00175 int msLargeShifts;
00176
00177 #ifdef BITOP_TEST
00178 BITOP * RuleMask;
00179 #endif
00180
00181
00182 int msNoCase;
00183
00184
00185 int (*search)( struct _mwm_struct * ps,
00186 unsigned char * Tx, int n, unsigned char * Tc,
00187 int(*match)(void * id, int index, void * data ),
00188 void * data );
00189
00190
00191 int msDetails;
00192
00193
00194 int msSmallest;
00195 int msLargest;
00196 int msAvg;
00197 int msTotal;
00198 int * msLengths;
00199
00200 } MWM_STRUCT;
00201
00202
00203
00204
00205 void * mwmNew( void );
00206 void mwmFree( void * pv );
00207
00208 int mwmAddPatternEx ( void * pv, unsigned char * P, int m,
00209 unsigned noCase,unsigned offset, unsigned depth, void * ID, int IID );
00210
00211 void mwmLargeShifts ( void * pv, int flag );
00212 int mwmPrepPatterns ( void * pv );
00213
00214 #ifdef BITOP_TEST
00215 void mwmSetRuleMask ( void *pv, BITOP * rm );
00216 #endif
00217
00218 int mwmSearch( void *pv, unsigned char * T, int n,
00219 int ( *action )(void * id, int index, void *data), void * data );
00220
00221 UINT64 mwmGetPatByteCount();
00222 void mwmResetByteCount();
00223
00224
00225
00226 int mwmAddPattern( void * pv, unsigned char * P, int m, unsigned id );
00227 int mwmGetNumPatterns( void * pv );
00228 void mwmFeatures( void );
00229
00230
00231 #endif
00232