tools/buzstats: add initial buzhash query tool

This commit is contained in:
Danny Robson 2019-04-22 14:23:52 +10:00
parent 8e92563a15
commit 4cc20526ce
2 changed files with 33 additions and 1 deletions

View File

@ -542,7 +542,7 @@ endif ()
###############################################################################
foreach (tool cpuid poisson macro scratch)
foreach (tool buzstats cpuid poisson macro scratch)
add_executable (util_${tool} tools/${tool}.cpp)
set_target_properties (util_${tool} PROPERTIES OUTPUT_NAME ${tool})
target_link_libraries (util_${tool} cruft)

32
tools/buzstats.cpp Normal file
View File

@ -0,0 +1,32 @@
#include "hash/buzhash.hpp"
#include "io.hpp"
#include <iostream>
int main (int argc, char const **argv)
{
(void)argc;
cruft::mapped_file src (argv[1]);
cruft::view bytes (src);
static constexpr std::size_t BITS = 16;
std::vector<std::size_t> counts (BITS, 0);
static constexpr std::size_t WINDOW = 48;
cruft::hash::buzhash<u64> h (WINDOW, bytes);
for (auto const &val: bytes.consume (WINDOW)) {
auto const res = h (&val);
std::size_t mask = ~u64(0) >> (64 - BITS);
for (std::size_t i = 0; i < BITS; ++i) {
if ((res & mask) == 0)
counts[i]++;
mask >>= 1;
}
}
for (auto const &i: counts)
std::cout << i << '\n';
}