/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * Copyright 2013 Danny Robson */ #include #include #include 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 counts (BITS, 0); static constexpr std::size_t WINDOW = 48; cruft::hash::buzhash 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'; }