From cf54677dac448084f38cf54d2596a2078492fce6 Mon Sep 17 00:00:00 2001 From: graehl Date: Fri, 13 Aug 2010 08:28:58 +0000 Subject: boost::hash git-svn-id: https://ws10smt.googlecode.com/svn/trunk@540 ec762483-ff6d-05da-a07a-a48fb63a330f --- decoder/apply_fsa_models.cc | 5 +++-- utils/hash.h | 3 ++- utils/small_vector.h | 17 ++++++++++------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/decoder/apply_fsa_models.cc b/decoder/apply_fsa_models.cc index c9bda68b..8771863c 100755 --- a/decoder/apply_fsa_models.cc +++ b/decoder/apply_fsa_models.cc @@ -10,6 +10,7 @@ #include "cfg.h" #include "hg_cfg.h" #include "utoa.h" +#include "hash.h" using namespace std; @@ -26,12 +27,12 @@ typedef CFG::RuleHandle RuleHandle; namespace { // if we don't greedy-binarize, we want to encode recognized prefixes p (X -> p . rest) efficiently. if we're doing this, we may as well also push costs so we can best-first select rules in a lazy fashion. this is effectively left-branching binarization, of course. -template +template struct prefix_map_type { typedef std::map type; }; //template typedef -#define PREFIX_MAP(k,v) prefix_map_type::type +#define PREFIX_MAP(k,v) prefix_map_type >::type typedef NTHandle LHS; struct PrefixTrieNode { prob_t backward; // (viterbi) backward prob (for cost pushing) diff --git a/utils/hash.h b/utils/hash.h index b0b1c43e..20764860 100755 --- a/utils/hash.h +++ b/utils/hash.h @@ -1,6 +1,8 @@ #ifndef CDEC_HASH_H #define CDEC_HASH_H +#include + #include "murmur_hash.h" #include "config.h" @@ -16,7 +18,6 @@ # define HASH_MAP_EMPTY(h,empty) #endif -#include // assumes C is POD template diff --git a/utils/small_vector.h b/utils/small_vector.h index 8c1c3bfe..f1e53a51 100644 --- a/utils/small_vector.h +++ b/utils/small_vector.h @@ -252,13 +252,12 @@ public: swap_pod(*this,o); } - inline std::size_t hash() const { - using namespace boost; + inline std::size_t hash_impl() const { if (size_==0) return 0; - if (size_==1) return hash_value(data_.vals[0]); +// if (size_==1) return boost::hash_value(data_.vals[0]); if (size<= SV_MAX) - return hash_range(data_.vals,data_.vals+size_); - return hash_range(data_.ptr,data_.ptr+size_); + return boost::hash_range(data_.vals,data_.vals+size_); + return boost::hash_range(data_.ptr,data_.ptr+size_); } private: @@ -271,9 +270,13 @@ public: uint16_t capacity_; // only defined when size_ > __SV_MAX_STATIC }; +namespace boost { +// shouldn't need to nest this, but getting into trouble with tr1::hash linkage +} + template -std::size_t hash_value(SmallVector const& x) { - return x.hash(); +inline std::size_t hash_value(SmallVector const& x) { + return x.hash_impl(); } template -- cgit v1.2.3