diff options
author | graehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-08-31 01:08:42 +0000 |
---|---|---|
committer | graehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-08-31 01:08:42 +0000 |
commit | 2af5a445f3905c69c42be5c758c52a2f21b17446 (patch) | |
tree | b970b770210046d6a1b41d3385084dd7d4d06961 /utils/hash.h | |
parent | 61be4c3048df90d7decdbe4caf91d7ed80433a3f (diff) |
l2r bugfixes
git-svn-id: https://ws10smt.googlecode.com/svn/trunk@634 ec762483-ff6d-05da-a07a-a48fb63a330f
Diffstat (limited to 'utils/hash.h')
-rwxr-xr-x | utils/hash.h | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/utils/hash.h b/utils/hash.h index 2062578f..2290bc34 100755 --- a/utils/hash.h +++ b/utils/hash.h @@ -95,7 +95,6 @@ typename H::mapped_type & get_or_call(H &ht,K const& k,F const& f) { } } - // the below could also return a ref to the mapped max/min. they have the advantage of not falsely claiming an improvement when an equal value already existed. otherwise you could just modify the get_default and if equal assume new. template <class H,class K> bool improve_mapped_max(H &ht,K const& k,typename H::mapped_type const& v) { @@ -110,6 +109,32 @@ bool improve_mapped_max(H &ht,K const& k,typename H::mapped_type const& v) { return false; } + +// return true if there was no old value. like ht[k]=v but lets you know whether it was a new addition +template <class H,class K> +bool put(H &ht,K const& k,typename H::mapped_type const& v) { + std::pair<typename H::iterator,bool> inew=ht.insert(typename H::value_type(k,v)); + if (inew.second) + return true; + inew.first->second=v; + return false; +} + +// does not update old value (returns false) if one exists, otherwise add +template <class H,class K> +bool maybe_add(H &ht,K const& k,typename H::mapped_type const& v) { + std::pair<typename H::iterator,bool> inew=ht.insert(typename H::value_type(k,v)); + return inew.second; +} + +// ht[k] must not exist (yet) +template <class H,class K> +void add(H &ht,K const& k,typename H::mapped_type const& v) { + bool fresh=maybe_add(ht,k,v); + assert(fresh); +} + + template <class H,class K> bool improve_mapped_min(H &ht,K const& k,typename H::mapped_type const& v) { std::pair<typename H::iterator,bool> inew=ht.insert(typename H::value_type(k,v)); |