Sample implementation of a proposed C++ hashing framework
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
benchmark @ 2b95421 Drop CMake logic that's now handled by the benchmark library. Apr 3, 2015
.gitmodules Initial implementation of microbenchmark. Apr 1, 2015
CMakeLists.txt Add test of type-invariant hashing support. Sep 16, 2015
LICENSE Add Apache license and README. Mar 18, 2015
README.md Drop obsolete API documentation. Sep 9, 2015
benchmarks.cc Move stuff in ::std to ::std_. Sep 8, 2015
debug.h Drop state_type from HashCodes that don't need it. Sep 8, 2015
farmhash-direct.h Add comparison of farmhash implementation with "direct" implementation. Apr 1, 2015
farmhash.h Factor out hash algorithm helper functions. Oct 27, 2015
farmhash_golden_test.cc Test restructuring: use gtest in std_test.cc, delete empty fnv1a_test, Mar 26, 2015
fnv1a.h Clean up some bugs, esp. ODR violations. Sep 15, 2015
hashcode_test.cc Add demonstration of Pimpl support. Sep 15, 2015
n3980-farmhash.h Hoist one-off initialization into caller, which seems to improve perf… Apr 3, 2015
n3980.h Move stuff in ::std to ::std_. Sep 8, 2015
pimpl.cc Add demonstration of Pimpl support. Sep 15, 2015
pimpl.h Add demonstration of Pimpl support. Sep 15, 2015
std.h Have std_::hash invoke hash_combine. Sep 15, 2015
std_impl.h Factor out hash algorithm helper functions. Oct 27, 2015
std_test.cc Have std_::hash invoke hash_combine. Sep 15, 2015
type-invariant_test.cc Add test of type-invariant hashing support. Sep 16, 2015
type_erased_hash_code.h Add demonstration of Pimpl support. Sep 15, 2015

README.md

#Introduction

This is a sample implementation of a forthcoming C++ standard library proposal. It is intended only for demonstration and evaluation purposes, and is not suitable for use in production systems. This is not an official Google product (experimental or otherwise), it is just code that happens to be owned by Google.

The APIs in std.h and std_impl.h are proposed for standardization. fnv1a.h and farmhash.h are example implementations of particular algorithms using this framework, but are not themselves proposed for standardization. std_test.cc shows some simple examples of the extension API for type owners, as well as the end-user API (which is just std::hash).

The code uses some C++14 language and library features. It doesn't work with libstdc++ as of version 4.8, but it does work with libc++ 3.4. A CMakeLists.txt is included for building the tests with CMake. Example usage:

$ cmake -DCMAKE_CXX_COMPILER=/usr/bin/clang++-libc++ $SOURCE_DIR
$ make
$ make test

The tests depend on GoogleTest, which must be provided separately. By default, CMake will expect to find the GoogleTest source in /usr/src/gtest and the headers in a default include path, but these can be configured with -Dgtest_src_dir and -DCMAKE_INCLUDE_PATH, respectively. Similarly, the benchmarks depend on google/benchmark. This is included as a git submodule (run git submodule init; git submodule update to set it up), or you can install the source distribution in another location, and configure that location with -Dbenchmark_src_dir.

API documentation will be provided in the forthcoming paper.