diff options
-rwxr-xr-x | decoder/cfg.cc | 2 | ||||
-rwxr-xr-x | utils/hash.h | 1 | ||||
-rw-r--r-- | utils/small_vector.h | 9 |
3 files changed, 7 insertions, 5 deletions
diff --git a/decoder/cfg.cc b/decoder/cfg.cc index a279c74a..c2d96b33 100755 --- a/decoder/cfg.cc +++ b/decoder/cfg.cc @@ -109,7 +109,7 @@ struct prob_pos { }//ns void CFG::UniqRules(NTHandle ni) { - typedef HASH_MAP<RHS,prob_pos> BestRHS; // faster to use trie? maybe. + typedef HASH_MAP<RHS,prob_pos,boost::hash<RHS> > BestRHS; // faster to use trie? maybe. BestRHS bestp; // once inserted, the position part (output index) never changes. but the prob may be improved (overwrite ruleid at that position). HASH_MAP_EMPTY(bestp,null_rhs); Ruleids &adj=nts[ni].ruleids; diff --git a/utils/hash.h b/utils/hash.h index 20764860..fbe10b4e 100755 --- a/utils/hash.h +++ b/utils/hash.h @@ -18,6 +18,7 @@ # define HASH_MAP_EMPTY(h,empty) #endif +#define BOOST_HASHED_MAP(k,v) HASH_MAP<k,v,boost::hash<k> > // assumes C is POD template <class C> diff --git a/utils/small_vector.h b/utils/small_vector.h index f1e53a51..89917d1c 100644 --- a/utils/small_vector.h +++ b/utils/small_vector.h @@ -253,11 +253,12 @@ public: } inline std::size_t hash_impl() const { + using namespace boost; if (size_==0) return 0; -// if (size_==1) return boost::hash_value(data_.vals[0]); - if (size<= SV_MAX) - return boost::hash_range(data_.vals,data_.vals+size_); - return boost::hash_range(data_.ptr,data_.ptr+size_); + if (size_==1) return 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_); } private: |