This library contains an extensible framework for implementing hashing algorithms that can support user-defined types, based on the paper "Types don't know #" by Howard Hinnant, Vinnie Falco and John Bytheway.
It also contains implementations of several popular hashing algorithms:
The hashing algorithms conform to the following concept:
struct HashAlgorithm
{
using result_type = /*integral or array<unsigned char, N>*/; // result type
HashAlgorithm(); // default-constructible
explicit HashAlgorithm( uint64_t seed ); // seed-constructible
HashAlgorithm( unsigned char const* seed, size_t n ); // seed-constructible
HashAlgorithm( HashAlgorithm const& r ); // copy-constructible
HashAlgorithm& operator=( HashAlgorithm const& r ); // assignable
void update( void const* data, size_t n ); // feed bytes
result_type result(); // obtain result; also advances state,
// and can be called multiple times
};
See the documentation for more information.
The library requires C++11. The following compilers:
- g++ 4.8 or later
- clang++ 3.9 or later
- Visual Studio 2015 and above
are being tested on Github Actions and Appveyor.
Distributed under the Boost Software License, Version 1.0.