Repository: qpid-proton Updated Branches: refs/heads/master 568c09a57 -> f13715149
PROTON-1257: C++ fix cached_map assignment Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/f1371514 Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/f1371514 Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/f1371514 Branch: refs/heads/master Commit: f137151490d2242720ce63507f09ed6450120c0b Parents: 568c09a Author: Clifford Jansen <[email protected]> Authored: Thu Jul 14 10:13:16 2016 -0700 Committer: Clifford Jansen <[email protected]> Committed: Thu Jul 14 10:13:16 2016 -0700 ---------------------------------------------------------------------- proton-c/bindings/cpp/src/cached_map.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/f1371514/proton-c/bindings/cpp/src/cached_map.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/cached_map.cpp b/proton-c/bindings/cpp/src/cached_map.cpp index 50191eb..5411aa1 100644 --- a/proton-c/bindings/cpp/src/cached_map.cpp +++ b/proton-c/bindings/cpp/src/cached_map.cpp @@ -41,9 +41,18 @@ class map_type_impl : public std::map<K, V> {}; template <class K, class V> cached_map<K,V>::cached_map() {} template <class K, class V> -cached_map<K,V>::cached_map(const cached_map& cm) { if ( !cm.map_ ) return; map_type nm(*cm.map_); map_.reset(&nm); } -template <class K, class V> -cached_map<K,V>& cached_map<K,V>::operator=(const cached_map& cm) { if (!!cm.map_ ) { map_type nm(*cm.map_); map_.reset(&nm); } return *this; } +cached_map<K,V>::cached_map(const cached_map& cm) { if ( !cm.map_ ) return; map_.reset(new map_type(*cm.map_)); } +template <class K, class V> +cached_map<K,V>& cached_map<K,V>::operator=(const cached_map& cm) { + if (&cm != this) { + cached_map<K,V> t; + map_type *m = !cm.map_ ? 0 : new map_type(*cm.map_); + t.map_.reset(map_.release()); + map_.reset(m); + } + return *this; +} + template <class K, class V> #if PN_CPP_HAS_RVALUE_REFERENCES cached_map<K,V>::cached_map(cached_map&& cm) : map_(std::move(cm.map_)) {} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
