@@ -38,24 +38,60 @@ tracked_unary_functions_t bytesum_functions() {
3838 return result;
3939}
4040
41- tracked_unary_functions_t hashing_functions () {
41+ tracked_unary_functions_t hash_functions () {
4242 auto wrap_sz = [](auto function) -> unary_function_t {
4343 return unary_function_t ([function](std::string_view s) { return function (s.data (), s.size (), 42 ); });
4444 };
4545 tracked_unary_functions_t result = {
46- {" std::hash" , [](std::string_view s) { return std::hash<std::string_view> {}(s); }},
4746 {" sz_hash_serial" , wrap_sz (sz_hash_serial)},
4847#if SZ_USE_HASWELL
49- {" sz_hash_haswell" , wrap_sz (sz_hash_haswell)},
48+ {" sz_hash_haswell" , wrap_sz (sz_hash_haswell), true },
49+ #endif
50+ #if SZ_USE_SKYLAKE
51+ {" sz_hash_skylake" , wrap_sz (sz_hash_skylake), true },
52+ #endif
53+ #if SZ_USE_ICE
54+ {" sz_hash_ice" , wrap_sz (sz_hash_ice), true },
55+ #endif
56+ #if SZ_USE_NEON
57+ {" sz_hash_neon" , wrap_sz (sz_hash_neon), true },
58+ #endif
59+ {" std::hash" , [](std::string_view s) { return std::hash<std::string_view> {}(s); }},
60+ };
61+ return result;
62+ }
63+
64+ struct wrapped_incremental_hash {
65+ sz_hash_state_t state;
66+ sz_hash_state_stream_t stream;
67+ sz_hash_state_fold_t fold;
68+
69+ wrapped_incremental_hash (sz_hash_state_stream_t s, sz_hash_state_fold_t f) : stream(s), fold(f) {
70+ sz_hash_state_init (&state, 42 );
71+ }
72+
73+ std::size_t operator ()(std::string_view s) noexcept {
74+ stream (&state, s.data (), s.size ());
75+ return fold (&state);
76+ }
77+ };
78+
79+ tracked_unary_functions_t hash_stream_functions () {
80+ tracked_unary_functions_t result = {
81+ {" sz_hash_stream_serial" , wrapped_incremental_hash (sz_hash_state_stream_serial, sz_hash_state_fold_serial)},
82+ #if SZ_USE_HASWELL
83+ {" sz_hash_stream_haswell" , wrapped_incremental_hash (sz_hash_state_stream_haswell, sz_hash_state_fold_haswell),
84+ true },
5085#endif
5186#if SZ_USE_SKYLAKE
52- {" sz_hash_skylake" , wrap_sz (sz_hash_skylake)},
87+ {" sz_hash_stream_skylake" , wrapped_incremental_hash (sz_hash_state_stream_skylake, sz_hash_state_fold_skylake),
88+ true },
5389#endif
5490#if SZ_USE_ICE
55- {" sz_hash_ice " , wrap_sz (sz_hash_ice) },
91+ {" sz_hash_stream_ice " , wrapped_incremental_hash (sz_hash_state_stream_ice, sz_hash_state_fold_ice), true },
5692#endif
5793#if SZ_USE_NEON
58- {" sz_hash_neon " , wrap_sz (sz_hash_neon) },
94+ {" sz_hash_stream_neon " , wrapped_incremental_hash (sz_hash_state_stream_neon, sz_hash_state_fold_neon), true },
5995#endif
6096 };
6197 return result;
@@ -152,7 +188,8 @@ void bench(strings_type &&strings) {
152188
153189 // Benchmark logical operations
154190 bench_unary_functions (strings, bytesum_functions ());
155- bench_unary_functions (strings, hashing_functions ());
191+ bench_unary_functions (strings, hash_functions ());
192+ bench_unary_functions (strings, hash_stream_functions ());
156193 bench_binary_functions (strings, equality_functions ());
157194 bench_binary_functions (strings, ordering_functions ());
158195
0 commit comments