Date: Tue, 7 Feb 2012 11:40:38 +0000 (UTC) From: Gabor Kovesdan <gabor@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r231127 - user/gabor/tre-integration/contrib/tre/lib Message-ID: <201202071140.q17BecEF087761@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: gabor Date: Tue Feb 7 11:40:38 2012 New Revision: 231127 URL: http://svn.freebsd.org/changeset/base/231127 Log: - Complete the Wu-Manber algorithm. Still untested and dependent code is incomplete. Modified: user/gabor/tre-integration/contrib/tre/lib/mregcomp.c user/gabor/tre-integration/contrib/tre/lib/tre-mfastmatch.c Modified: user/gabor/tre-integration/contrib/tre/lib/mregcomp.c ============================================================================== --- user/gabor/tre-integration/contrib/tre/lib/mregcomp.c Tue Feb 7 11:28:40 2012 (r231126) +++ user/gabor/tre-integration/contrib/tre/lib/mregcomp.c Tue Feb 7 11:40:38 2012 (r231127) @@ -46,6 +46,13 @@ __weak_reference(tre_mregwncomp, mregwnc __weak_reference(tre_mregfree, mregfree); #endif +/* TODO: + * + * - compilation + * - REG_ICASE + * - Test + */ + int tre_mcompile(mregex_t *preg, size_t nr, const char *regex[], size_t n[], int cflags) @@ -78,7 +85,7 @@ tre_mregncomp(mregex_t *preg, size_t nr, goto fail; } - // XXX ret = tre_mcompile(preg, nr, regex, n, cflags); + ret = tre_mcompile(preg, nr, regex, n, cflags); fail: for (int j = 0; j++; j < i) @@ -136,7 +143,7 @@ tre_mregwcomp(mregex_t *preg, size_t nr, void tre_mregfree(mregex_t *preg) { - + wmfree(preg); } /* EOF */ Modified: user/gabor/tre-integration/contrib/tre/lib/tre-mfastmatch.c ============================================================================== --- user/gabor/tre-integration/contrib/tre/lib/tre-mfastmatch.c Tue Feb 7 11:28:40 2012 (r231126) +++ user/gabor/tre-integration/contrib/tre/lib/tre-mfastmatch.c Tue Feb 7 11:40:38 2012 (r231127) @@ -32,13 +32,6 @@ #include "tre-mfastmatch.h" #include "xmalloc.h" -/* TODO: - * - * - REG_ICASE - * - Store pattern and sizes in pat/wpat/siz/wsiz - * - Test - */ - #define WM_B 2 #define ALLOC(var, siz) \ @@ -138,6 +131,24 @@ } \ xfree(entry); +#ifdef _SAVE_PATTERNS(dst, s) \ + do \ + { \ + ALLOC(dst, sizeof(tre_char_t *) * nr); \ + ALLOC(s, sizeof(size_t) * nr); \ + for (int i = 0; i < nr; i++) \ + { \ + ALLOC(dst[i], n[i]); \ + memcpy(dst[i], regex[i], n[i] * sizeof(tre_char_t)); \ + s[i] = n[i]; \ + } \ + } while (0); + +#define SAVE_PATTERNS \ + _SAVE_PATTERNS(wm->pat, wm->siz) +#define SAVE_PATTERNS_WIDE \ + _SAVE_PATTERNS(wm->wpat, wm->wsiz) + #ifdef TRE_WCHAR #define PROC_WM(par_arr, size_arr) \ _PROC_WM(pat_arr, size_arr, 1, shift, m) @@ -174,7 +185,7 @@ tre_wmcomp(mregex_t *preg, size_t nr, co PROC_WM_WIDE(regex, n); ALLOC(bregex, sizeof(char *) * nr); - ALLOC(bn, sizeof(int) * nr); + ALLOC(bn, sizeof(size_t) * nr); for (int i = 0; i < nr; i++) { @@ -189,30 +200,31 @@ tre_wmcomp(mregex_t *preg, size_t nr, co goto fail; } } + + wm->wpat = bregex; + wm->wsize = bn; + PROC_WM(bregex, bn); for (int i = 0; i < nr; i++) xfree(bregex[i]); xfree(bregex); + + SAVE_PATTERNS; + SAVE_PATTERNS_WIDE; #else PROC_WM(regex, n); + SAVE_PATTERNS; #endif preg->searchdata = &wm; return REG_OK; fail: #ifdef TRE_WCHAR - if (wm->wshift) - hashtable_free(wm->wshift); - if (bregex) - { - for (int i = 0; i < nr; i++) - if (bregex[i] - xfree(bregex[i]); - xfree(bregex); - } + if (wm->whash) + hashtable_free(wm->whash); #endif - if (wm->shift) - hashtable_free(wm->shift); + if (wm->hash) + hashtable_free(wm->hash); if (wm) xfree(wm); if (entry) @@ -260,7 +272,8 @@ fail: if (pats[idx][k] != data[pos - mlen + k]) \ break; \ if (k == sizes[idx]) \ - // XXX: match \ + MATCH(pos - mlen, pos - mlen + sizes[idx], \ + idx); \ } \ } \ else \ @@ -289,7 +302,7 @@ tre_wmexec(const void *str, size_t len, tre_char_t *wide_str = str; char *byte_str = str; size_t pos = preg->m; - size_T shift; + size_t shift; int ret; int err = REG_NOMATCH;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201202071140.q17BecEF087761>