diff options
author | Hadriel Kaplan <hadrielk@yahoo.com> | 2015-02-06 13:52:37 -0500 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2015-02-11 09:14:50 +0000 |
commit | a837570d02dca2ad94ff5046b13592d84a12a345 (patch) | |
tree | 0a06b1d9a1c7c1e6bc67f57412f7adc3a2a1db71 /epan/tvbuff.h | |
parent | a618f1c0d63fd290cbdc93272beaf1ca7e838027 (diff) |
Combine SSE and pre-compiled patterns for faster pbrk
This combines the SSE4.2 instructions usage, with pre-compiled
pattern searching usage, for a faster pbrk search method.
Testing against large files of HTTP and SIP, there is about
a 5% performance improvement by using pre-"compiled" patterns
for guint8_pbrk() instead of passing it the search string and
having it build the match array every time.
Similar to regular expressions, "compiling" the pattern match array
in advance only once and using the "compiled" patterns for
the searches is faster than compiling it every time.
Change-Id: Ifcbc14a6c93f32d15663a10d974bacdca5119a8e
Ping-Bug: 10798
Reviewed-on: https://code.wireshark.org/review/6990
Petri-Dish: Hadriel Kaplan <hadrielk@yahoo.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/tvbuff.h')
-rw-r--r-- | epan/tvbuff.h | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/epan/tvbuff.h b/epan/tvbuff.h index 4a72b542a3..c5936020f2 100644 --- a/epan/tvbuff.h +++ b/epan/tvbuff.h @@ -36,6 +36,7 @@ #include <glib.h> #include <epan/guid-utils.h> #include <epan/wmem/wmem.h> +#include "wsutil/ws_mempbrk.h" #ifdef __cplusplus extern "C" { @@ -505,14 +506,18 @@ WS_DLL_PUBLIC const guint8 *tvb_get_ptr(tvbuff_t *tvb, const gint offset, WS_DLL_PUBLIC gint tvb_find_guint8(tvbuff_t *tvb, const gint offset, const gint maxlength, const guint8 needle); -/** Find first occurrence of any of the needles in tvbuff, starting at offset. + +/** Find first occurrence of any of the needles of the pre-compiled pattern in + * tvbuff, starting at offset. The passed in pattern must have been "compiled" + * before-hand, using tvb_pbrk_compile() above. * Searches at most maxlength number of bytes. Returns the offset of the * found needle, or -1 if not found and the found needle. * Will not throw an exception, even if * maxlength exceeds boundary of tvbuff; in that case, -1 will be returned if * the boundary is reached before finding needle. */ -WS_DLL_PUBLIC gint tvb_pbrk_guint8(tvbuff_t *tvb, const gint offset, - const gint maxlength, const guint8 *needles, guchar *found_needle); +WS_DLL_PUBLIC gint tvb_pbrk_pattern_guint8(tvbuff_t *tvb, const gint offset, + const gint maxlength, const tvb_pbrk_pattern* pattern, guchar *found_needle); + /** Find size of stringz (NUL-terminated string) by looking for terminating * NUL. The size of the string includes the terminating NUL. |