diff options
author | graehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-07-24 21:18:01 +0000 |
---|---|---|
committer | graehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-07-24 21:18:01 +0000 |
commit | 2cb224de7db49b761ac06b031090fe7f846744fe (patch) | |
tree | dc1d4e949081ea0e0868773bd7a31b96faa77487 /decoder/hash.h | |
parent | 1fbdaa4d49acf90d2124aef8810d723ddbb0dad5 (diff) |
FSA: simpler Scan1 ScanT1 methods, otherewise also expose edge to full Scan
git-svn-id: https://ws10smt.googlecode.com/svn/trunk@399 ec762483-ff6d-05da-a07a-a48fb63a330f
Diffstat (limited to 'decoder/hash.h')
-rwxr-xr-x | decoder/hash.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/decoder/hash.h b/decoder/hash.h index 3e4ad1ff..3a60a429 100755 --- a/decoder/hash.h +++ b/decoder/hash.h @@ -1,6 +1,8 @@ #ifndef CDEC_HASH_H #define CDEC_HASH_H +#include "murmur_hash.h" + #include "config.h" #ifdef HAVE_SPARSEHASH # include <google/dense_hash_map> @@ -13,7 +15,40 @@ # define HASH_MAP_RESERVED(h,empty,deleted) # define HASH_MAP_EMPTY(h,empty) #endif + #include <boost/functional/hash.hpp> +// assumes C is POD +template <class C> +struct murmur_hash +{ + typedef MurmurInt return_type; + typedef C /*const&*/ argument_type; + return_type operator()(argument_type const& c) const { + return MurmurHash((void*)&c,sizeof(c)); + } +}; + +// murmur_hash_array isn't std guaranteed safe (you need to use string::data()) +template <> +struct murmur_hash<std::string> +{ + typedef MurmurInt return_type; + typedef std::string /*const&*/ argument_type; + return_type operator()(argument_type const& c) const { + return MurmurHash(c.data(),c.size()); + } +}; + +// uses begin(),size() assuming contiguous layout and POD +template <class C> +struct murmur_hash_array +{ + typedef MurmurInt return_type; + typedef C /*const&*/ argument_type; + return_type operator()(argument_type const& c) const { + return MurmurHash(&*c.begin(),c.size()*sizeof(*c.begin())); + } +}; #endif |