diff options
author | Patrick Simianer <simianer@cl.uni-heidelberg.de> | 2013-03-03 12:06:43 +0100 |
---|---|---|
committer | Patrick Simianer <simianer@cl.uni-heidelberg.de> | 2013-03-03 12:06:43 +0100 |
commit | 6b172ef1b1651e6ccf016b26c9ea94fad6df3152 (patch) | |
tree | a62dffda9143a619531be9f96912938659d3a890 /klm/util/string_piece_hash.hh | |
parent | 349ee7d5599bb973506c8bbb56926cf9d366b564 (diff) | |
parent | 7deec52e8feb1c908a91224f308e8cbd9a170576 (diff) |
Merge branch 'master' of github.com:pks/cdec-dtrain
Diffstat (limited to 'klm/util/string_piece_hash.hh')
-rw-r--r-- | klm/util/string_piece_hash.hh | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/klm/util/string_piece_hash.hh b/klm/util/string_piece_hash.hh new file mode 100644 index 00000000..f206b1d8 --- /dev/null +++ b/klm/util/string_piece_hash.hh @@ -0,0 +1,43 @@ +#ifndef UTIL_STRING_PIECE_HASH__ +#define UTIL_STRING_PIECE_HASH__ + +#include "util/string_piece.hh" + +#include <boost/functional/hash.hpp> +#include <boost/version.hpp> + +inline size_t hash_value(const StringPiece &str) { + return boost::hash_range(str.data(), str.data() + str.length()); +} + +/* Support for lookup of StringPiece in boost::unordered_map<std::string> */ +struct StringPieceCompatibleHash : public std::unary_function<const StringPiece &, size_t> { + size_t operator()(const StringPiece &str) const { + return hash_value(str); + } +}; + +struct StringPieceCompatibleEquals : public std::binary_function<const StringPiece &, const std::string &, bool> { + bool operator()(const StringPiece &first, const StringPiece &second) const { + return first == second; + } +}; +template <class T> typename T::const_iterator FindStringPiece(const T &t, const StringPiece &key) { +#if BOOST_VERSION < 104200 + std::string temp(key.data(), key.size()); + return t.find(temp); +#else + return t.find(key, StringPieceCompatibleHash(), StringPieceCompatibleEquals()); +#endif +} + +template <class T> typename T::iterator FindStringPiece(T &t, const StringPiece &key) { +#if BOOST_VERSION < 104200 + std::string temp(key.data(), key.size()); + return t.find(temp); +#else + return t.find(key, StringPieceCompatibleHash(), StringPieceCompatibleEquals()); +#endif +} + +#endif // UTIL_STRING_PIECE_HASH__ |