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]

Reply via email to