This is an automated email from the ASF dual-hosted git repository.

astitcher pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-proton.git

commit 7473eb41c9082bc5fbc70641d8b8b3130432879e
Author: Andrew Stitcher <[email protected]>
AuthorDate: Wed Jan 12 11:24:31 2022 -0500

    PROTON-2485: Use C++11 standard unique_ptr instead of our version
    
    Now we only support C++11 and later we can use std::unique_ptr. As it
    has the same size as our custom version and was never in the API just
    used as a private member this should not change our ABI/API.
---
 cpp/include/proton/connection_options.hpp     |  4 +-
 cpp/include/proton/container.hpp              |  4 +-
 cpp/include/proton/internal/pn_unique_ptr.hpp | 67 ---------------------------
 cpp/include/proton/map.hpp                    |  4 +-
 cpp/include/proton/message.hpp                |  2 -
 cpp/include/proton/receiver_options.hpp       |  4 +-
 cpp/include/proton/reconnect_options.hpp      |  4 +-
 cpp/include/proton/sender_options.hpp         |  4 +-
 cpp/include/proton/session_options.hpp        |  5 +-
 cpp/include/proton/source_options.hpp         |  4 +-
 cpp/include/proton/target_options.hpp         |  4 +-
 cpp/include/proton/url.hpp                    |  4 +-
 cpp/include/proton/work_queue.hpp             |  6 +--
 cpp/src/contexts.hpp                          |  9 ++--
 cpp/src/credit_test.cpp                       |  5 +-
 cpp/src/delivery_test.cpp                     |  1 -
 cpp/src/map.cpp                               |  2 +-
 cpp/src/reconnect_options_impl.hpp            |  1 -
 18 files changed, 32 insertions(+), 102 deletions(-)

diff --git a/cpp/include/proton/connection_options.hpp 
b/cpp/include/proton/connection_options.hpp
index c96cbe7..d86a203 100644
--- a/cpp/include/proton/connection_options.hpp
+++ b/cpp/include/proton/connection_options.hpp
@@ -25,13 +25,13 @@
 #include "./duration.hpp"
 #include "./fwd.hpp"
 #include "./internal/export.hpp"
-#include "./internal/pn_unique_ptr.hpp"
 #include "./symbol.hpp"
 #include "./types_fwd.hpp"
 
 #include <proton/type_compat.h>
 
 #include <map>
+#include <memory>
 #include <vector>
 #include <string>
 
@@ -218,7 +218,7 @@ class connection_options {
     messaging_handler* handler() const;
 
     class impl;
-    internal::pn_unique_ptr<impl> impl_;
+    std::unique_ptr<impl> impl_;
 
     /// @cond INTERNAL
   friend class container;
diff --git a/cpp/include/proton/container.hpp b/cpp/include/proton/container.hpp
index eafcde7..f5a4dd6 100644
--- a/cpp/include/proton/container.hpp
+++ b/cpp/include/proton/container.hpp
@@ -27,8 +27,8 @@
 #include "./types_fwd.hpp"
 
 #include "./internal/export.hpp"
-#include "./internal/pn_unique_ptr.hpp"
 
+#include <memory>
 #include <string>
 
 /// @file
@@ -313,7 +313,7 @@ class PN_CPP_CLASS_EXTERN container {
     /// A C++11 user should never call the v03 overload so it is private in 
this case
     PN_CPP_EXTERN void schedule(duration dur, internal::v03::work fn);
     class impl;
-    internal::pn_unique_ptr<impl> impl_;
+    std::unique_ptr<impl> impl_;
 
     /// @cond INTERNAL
   friend class connection_options;
diff --git a/cpp/include/proton/internal/pn_unique_ptr.hpp 
b/cpp/include/proton/internal/pn_unique_ptr.hpp
deleted file mode 100644
index 51679d1..0000000
--- a/cpp/include/proton/internal/pn_unique_ptr.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-#ifndef PROTON_INTERNAL_UNIQUE_PTR_HPP
-#define PROTON_INTERNAL_UNIQUE_PTR_HPP
-
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-#include <memory>
-
-namespace proton {
-namespace internal {
-
-template <class T> class pn_unique_ptr;
-template <class T> void swap(pn_unique_ptr<T>& x, pn_unique_ptr<T>& y);
-
-/// A simple unique ownership pointer, used as a return value from
-/// functions that transfer ownership to the caller.
-///
-/// pn_unique_ptr return values should be converted immediately to
-/// std::unique_ptr if that is available or std::auto_ptr (by calling
-/// release()) for older C++. You should not use pn_unique_ptr in your
-/// own code.  It is a limited pointer class designed only to work
-/// around differences between C++11 and C++03.
-template <class T> class pn_unique_ptr {
-  public:
-    pn_unique_ptr(T* p=0) : ptr_(p) {}
-    pn_unique_ptr(pn_unique_ptr&& x) : ptr_(0)  { std::swap(ptr_, x.ptr_); }
-    ~pn_unique_ptr() { delete(ptr_); }
-    T& operator*() const { return *ptr_; }
-    T* operator->() const { return ptr_; }
-    T* get() const { return ptr_; }
-    void reset(T* p = 0) { pn_unique_ptr<T> tmp(p); std::swap(ptr_, tmp.ptr_); 
}
-    T* release() { T *p = ptr_; ptr_ = 0; return p; }
-    explicit operator bool() const { return get(); }
-    bool operator !() const { return !get(); }
-    void swap(pn_unique_ptr& x) { std::swap(ptr_, x.ptr_); }
-
-    operator std::unique_ptr<T>() { T *p = ptr_; ptr_ = 0; return 
std::unique_ptr<T>(p); }
-
-  private:
-    T* ptr_;
-};
-
-template <class T> void swap(pn_unique_ptr<T>& x, pn_unique_ptr<T>& y) { 
x.swap(y); }
-
-} // internal
-} // proton
-
-#endif // PROTON_INTERNAL_UNIQUE_PTR_HPP
diff --git a/cpp/include/proton/map.hpp b/cpp/include/proton/map.hpp
index ff9eed0..b114d1c 100644
--- a/cpp/include/proton/map.hpp
+++ b/cpp/include/proton/map.hpp
@@ -23,9 +23,9 @@
  */
 
 #include "./value.hpp"
-#include "./internal/pn_unique_ptr.hpp"
 
 #include <cstddef>
+#include <memory>
 
 /// @file
 /// @copybrief proton::map
@@ -132,7 +132,7 @@ class PN_CPP_CLASS_EXTERN map {
 
   private:
     typedef map_type_impl<K,T> map_type;
-    mutable internal::pn_unique_ptr<map_type> map_;
+    mutable std::unique_ptr<map_type> map_;
     mutable proton::value value_;
 
     map_type& cache() const;
diff --git a/cpp/include/proton/message.hpp b/cpp/include/proton/message.hpp
index fc87050..de23824 100644
--- a/cpp/include/proton/message.hpp
+++ b/cpp/include/proton/message.hpp
@@ -29,8 +29,6 @@
 #include "./value.hpp"
 #include "./map.hpp"
 
-#include "./internal/pn_unique_ptr.hpp"
-
 #include <proton/type_compat.h>
 
 #include <string>
diff --git a/cpp/include/proton/receiver_options.hpp 
b/cpp/include/proton/receiver_options.hpp
index bcf8276..e82ae73 100644
--- a/cpp/include/proton/receiver_options.hpp
+++ b/cpp/include/proton/receiver_options.hpp
@@ -24,11 +24,11 @@
 
 #include "./fwd.hpp"
 #include "./internal/export.hpp"
-#include "./internal/pn_unique_ptr.hpp"
 #include "./delivery_mode.hpp"
 #include "./types_fwd.hpp"
 
 #include <map>
+#include <memory>
 #include <string>
 
 /// @file
@@ -111,7 +111,7 @@ class receiver_options {
     const std::string* get_name() const; // Pointer to name if set, else 0
 
     class impl;
-    internal::pn_unique_ptr<impl> impl_;
+    std::unique_ptr<impl> impl_;
 
     /// @cond INTERNAL
   friend class receiver;
diff --git a/cpp/include/proton/reconnect_options.hpp 
b/cpp/include/proton/reconnect_options.hpp
index fab9fb8..76d5fcf 100644
--- a/cpp/include/proton/reconnect_options.hpp
+++ b/cpp/include/proton/reconnect_options.hpp
@@ -23,10 +23,10 @@
  */
 
 #include "./internal/export.hpp"
-#include "./internal/pn_unique_ptr.hpp"
 #include "./duration.hpp"
 #include "./source.hpp"
 
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -83,7 +83,7 @@ class reconnect_options {
 
   private:
     class impl;
-    internal::pn_unique_ptr<impl> impl_;
+    std::unique_ptr<impl> impl_;
 
     /// @cond INTERNAL
   friend class connection_options;
diff --git a/cpp/include/proton/sender_options.hpp 
b/cpp/include/proton/sender_options.hpp
index 143db3f..a706806 100644
--- a/cpp/include/proton/sender_options.hpp
+++ b/cpp/include/proton/sender_options.hpp
@@ -24,11 +24,11 @@
 
 #include "./fwd.hpp"
 #include "./internal/export.hpp"
-#include "./internal/pn_unique_ptr.hpp"
 #include "./delivery_mode.hpp"
 #include "./types_fwd.hpp"
 
 #include <map>
+#include <memory>
 #include <string>
 
 /// @file
@@ -102,7 +102,7 @@ class sender_options {
     const std::string* get_name() const; // Pointer to name if set, else 0
 
     class impl;
-    internal::pn_unique_ptr<impl> impl_;
+    std::unique_ptr<impl> impl_;
 
     /// @cond INTERNAL
   friend class sender;
diff --git a/cpp/include/proton/session_options.hpp 
b/cpp/include/proton/session_options.hpp
index 515a798..18196df 100644
--- a/cpp/include/proton/session_options.hpp
+++ b/cpp/include/proton/session_options.hpp
@@ -24,7 +24,8 @@
 
 #include "./fwd.hpp"
 #include "./internal/export.hpp"
-#include "./internal/pn_unique_ptr.hpp"
+
+#include <memory>
 
 /// @file
 /// @copybrief proton::session_options
@@ -60,7 +61,7 @@ class session_options {
     void apply(session&) const;
 
     class impl;
-    internal::pn_unique_ptr<impl> impl_;
+    std::unique_ptr<impl> impl_;
 
     friend class session;
     /// @endcond
diff --git a/cpp/include/proton/source_options.hpp 
b/cpp/include/proton/source_options.hpp
index 8a0f093..754090c 100644
--- a/cpp/include/proton/source_options.hpp
+++ b/cpp/include/proton/source_options.hpp
@@ -23,11 +23,11 @@
  */
 
 #include "./internal/export.hpp"
-#include "./internal/pn_unique_ptr.hpp"
 #include "./duration.hpp"
 #include "./source.hpp"
 
 #include <map>
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -101,7 +101,7 @@ class source_options {
     void apply(source&) const;
 
     class impl;
-    internal::pn_unique_ptr<impl> impl_;
+    std::unique_ptr<impl> impl_;
 
     /// @cond INTERNAL
   friend class source;
diff --git a/cpp/include/proton/target_options.hpp 
b/cpp/include/proton/target_options.hpp
index 02feba8..f5fe991 100644
--- a/cpp/include/proton/target_options.hpp
+++ b/cpp/include/proton/target_options.hpp
@@ -23,11 +23,11 @@
  */
 
 #include "./internal/export.hpp"
-#include "./internal/pn_unique_ptr.hpp"
 #include "./duration.hpp"
 #include "./target.hpp"
 
 #include <map>
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -92,7 +92,7 @@ class target_options {
     void apply(target&) const;
 
     class impl;
-    internal::pn_unique_ptr<impl> impl_;
+    std::unique_ptr<impl> impl_;
 
     /// @cond INTERNAL
   friend class target;
diff --git a/cpp/include/proton/url.hpp b/cpp/include/proton/url.hpp
index 2d7c127..1d2d5be 100644
--- a/cpp/include/proton/url.hpp
+++ b/cpp/include/proton/url.hpp
@@ -22,12 +22,12 @@
  *
  */
 
-#include "./internal/pn_unique_ptr.hpp"
 #include "./error.hpp"
 
 #include <proton/type_compat.h>
 
 #include <iosfwd>
+#include <memory>
 #include <string>
 
 /// @file
@@ -135,7 +135,7 @@ class PN_CPP_DEPRECATED("Use a third-party URL library") 
url {
 
   private:
     struct impl;
-    internal::pn_unique_ptr<impl> impl_;
+    std::unique_ptr<impl> impl_;
 
     /// @cond INTERNAL
 
diff --git a/cpp/include/proton/work_queue.hpp 
b/cpp/include/proton/work_queue.hpp
index bc09f88..4f4a1d0 100644
--- a/cpp/include/proton/work_queue.hpp
+++ b/cpp/include/proton/work_queue.hpp
@@ -26,11 +26,11 @@
 #include "./fwd.hpp"
 #include "./function.hpp"
 #include "./internal/export.hpp"
-#include "./internal/pn_unique_ptr.hpp"
 
 #include <functional>
-#include <utility>
+#include <memory>
 #include <type_traits>
+#include <utility>
 
 struct pn_connection_t;
 struct pn_session_t;
@@ -375,7 +375,7 @@ class PN_CPP_CLASS_EXTERN work_queue {
     PN_CPP_EXTERN static work_queue& get(pn_session_t*);
     PN_CPP_EXTERN static work_queue& get(pn_link_t*);
 
-    internal::pn_unique_ptr<impl> impl_;
+    std::unique_ptr<impl> impl_;
 
     /// @cond INTERNAL
   friend class container;
diff --git a/cpp/src/contexts.hpp b/cpp/src/contexts.hpp
index dcd8081..8d22837 100644
--- a/cpp/src/contexts.hpp
+++ b/cpp/src/contexts.hpp
@@ -26,7 +26,8 @@
 
 #include "proton/work_queue.hpp"
 #include "proton/message.hpp"
-#include "proton/internal/pn_unique_ptr.hpp"
+
+#include <memory>
 
 struct pn_record_t;
 struct pn_link_t;
@@ -95,8 +96,8 @@ class connection_context : public context {
     messaging_handler* handler;
     std::string reconnect_url_;
     std::vector<std::string> failover_urls_;
-    internal::pn_unique_ptr<connection_options> connection_options_;
-    internal::pn_unique_ptr<reconnect_context> reconnect_context_;
+    std::unique_ptr<connection_options> connection_options_;
+    std::unique_ptr<reconnect_context> reconnect_context_;
     listener_context* listener_context_;
     work_queue work_queue_;
 };
@@ -122,7 +123,7 @@ class listener_context : public context {
     static listener_context& get(pn_listener_t* c);
 
     listen_handler* listen_handler_;
-    internal::pn_unique_ptr<const connection_options> connection_options_;
+    std::unique_ptr<const connection_options> connection_options_;
 };
 
 class link_context : public context {
diff --git a/cpp/src/credit_test.cpp b/cpp/src/credit_test.cpp
index a6993cb..ea8452a 100644
--- a/cpp/src/credit_test.cpp
+++ b/cpp/src/credit_test.cpp
@@ -31,12 +31,11 @@
 #include "proton/transport.hpp"
 #include "proton/work_queue.hpp"
 
-#include "proton/internal/pn_unique_ptr.hpp"
-
 #include <cstdlib>
 #include <ctime>
 #include <string>
 #include <cstdio>
+#include <memory>
 #include <sstream>
 
 namespace {
@@ -212,7 +211,7 @@ class tester : public proton::messaging_handler, public 
waiter {
     virtual void first_idle() = 0;
 
   protected:
-    proton::internal::pn_unique_ptr<server_connection_handler> srv_;
+    std::unique_ptr<server_connection_handler> srv_;
     proton::container container_;
     proton::receiver receiver_;
     proton::work next_idle_;
diff --git a/cpp/src/delivery_test.cpp b/cpp/src/delivery_test.cpp
index 9765223..021c86c 100644
--- a/cpp/src/delivery_test.cpp
+++ b/cpp/src/delivery_test.cpp
@@ -36,7 +36,6 @@
 #include <proton/value.hpp>
 
 #include "proton/error_condition.hpp"
-#include "proton/internal/pn_unique_ptr.hpp"
 #include "proton/receiver_options.hpp"
 #include "proton/transport.hpp"
 #include "proton/work_queue.hpp"
diff --git a/cpp/src/map.cpp b/cpp/src/map.cpp
index fdfb3fd..6ff62ee 100644
--- a/cpp/src/map.cpp
+++ b/cpp/src/map.cpp
@@ -117,7 +117,7 @@ void map<K,T>::value(const proton::value& x) {
     if (x.empty()) {
         clear();
     } else {
-        internal::pn_unique_ptr<map_type> tmp(new map_type);
+        std::unique_ptr<map_type> tmp(new map_type);
         proton::get(x, *tmp);  // Validate by decoding, may throw
         map_.reset(tmp.release());
         value_.clear();
diff --git a/cpp/src/reconnect_options_impl.hpp 
b/cpp/src/reconnect_options_impl.hpp
index 4861292..aacc14c 100644
--- a/cpp/src/reconnect_options_impl.hpp
+++ b/cpp/src/reconnect_options_impl.hpp
@@ -23,7 +23,6 @@
  */
 
 #include "proton/duration.hpp"
-#include "proton/internal/pn_unique_ptr.hpp"
 #include "proton/reconnect_options.hpp"
 
 #include <string>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to