You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by as...@apache.org on 2016/05/05 23:08:56 UTC
qpid-proton git commit: PROTON-1153: [C++ binding] Tidied up some
C++11 related details - Split apart the various C++11 feature into different
flags to test - Added in explicit boolean conversions - Added in move
assignment for message
Repository: qpid-proton
Updated Branches:
refs/heads/master c39a691ed -> 80f6d4b59
PROTON-1153: [C++ binding] Tidied up some C++11 related details
- Split apart the various C++11 feature into different flags to test
- Added in explicit boolean conversions
- Added in move assignment for message
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/80f6d4b5
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/80f6d4b5
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/80f6d4b5
Branch: refs/heads/master
Commit: 80f6d4b5913bf1ce4d768a7acebac379f7052c73
Parents: c39a691
Author: Andrew Stitcher <as...@apache.org>
Authored: Thu May 5 19:05:45 2016 -0400
Committer: Andrew Stitcher <as...@apache.org>
Committed: Thu May 5 19:05:45 2016 -0400
----------------------------------------------------------------------
proton-c/bindings/cpp/include/proton/config.hpp | 24 ++++++++++++++++++++
.../bindings/cpp/include/proton/endpoint.hpp | 2 +-
.../cpp/include/proton/error_condition.hpp | 11 +++++----
.../bindings/cpp/include/proton/message.hpp | 11 ++++-----
proton-c/bindings/cpp/include/proton/object.hpp | 10 +++++++-
.../cpp/include/proton/pn_unique_ptr.hpp | 2 +-
proton-c/bindings/cpp/include/proton/sasl.hpp | 6 +++--
.../bindings/cpp/include/proton/types_fwd.hpp | 2 +-
proton-c/bindings/cpp/include/proton/value.hpp | 2 +-
proton-c/bindings/cpp/src/error_condition.cpp | 6 +++++
proton-c/bindings/cpp/src/message.cpp | 6 ++++-
proton-c/bindings/cpp/src/value.cpp | 2 +-
12 files changed, 65 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/80f6d4b5/proton-c/bindings/cpp/include/proton/config.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/config.hpp b/proton-c/bindings/cpp/include/proton/config.hpp
index 59e8874..e6cb8ae 100644
--- a/proton-c/bindings/cpp/include/proton/config.hpp
+++ b/proton-c/bindings/cpp/include/proton/config.hpp
@@ -47,6 +47,30 @@
#define PN_CPP_HAS_LONG_LONG PN_CPP_HAS_CPP11
#endif
+#ifndef PN_CPP_HAS_NULLPTR
+#define PN_CPP_HAS_NULLPTR PN_CPP_HAS_CPP11
+#endif
+
+#ifndef PN_CPP_HAS_RVALUE_REFERENCES
+#define PN_CPP_HAS_RVALUE_REFERENCES PN_CPP_HAS_CPP11
+#endif
+
+#ifndef PN_CPP_HAS_OVERRIDE
+#define PN_CPP_HAS_OVERRIDE PN_CPP_HAS_CPP11
+#endif
+
+#ifndef PN_CPP_HAS_EXPLICIT_CONVERSIONS
+#define PN_CPP_HAS_EXPLICIT_CONVERSIONS PN_CPP_HAS_CPP11
+#endif
+
+#ifndef PN_CPP_HAS_DEFAULTED_FUNCTIONS
+#define PN_CPP_HAS_DEFAULTED_FUNCTIONS PN_CPP_HAS_CPP11
+#endif
+
+#ifndef PN_CPP_HAS_DELETED_FUNCTIONS
+#define PN_CPP_HAS_DELETED_FUNCTIONS PN_CPP_HAS_CPP11
+#endif
+
#endif // CONFIG_HPP
/// @endcond
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/80f6d4b5/proton-c/bindings/cpp/include/proton/endpoint.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/endpoint.hpp b/proton-c/bindings/cpp/include/proton/endpoint.hpp
index b4d7034..593ff32 100644
--- a/proton-c/bindings/cpp/include/proton/endpoint.hpp
+++ b/proton-c/bindings/cpp/include/proton/endpoint.hpp
@@ -49,7 +49,7 @@ PN_CPP_CLASS_EXTERN endpoint {
virtual void close() = 0;
virtual void close(const error_condition&) = 0;
-#if PN_CPP_HAS_CPP11
+#if PN_CPP_HAS_DEFAULTED_FUNCTIONS
// Make everything explicit for C++11 compilers
endpoint() = default;
endpoint& operator=(const endpoint&) = default;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/80f6d4b5/proton-c/bindings/cpp/include/proton/error_condition.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/error_condition.hpp b/proton-c/bindings/cpp/include/proton/error_condition.hpp
index 14b8544..0153f4a 100644
--- a/proton-c/bindings/cpp/include/proton/error_condition.hpp
+++ b/proton-c/bindings/cpp/include/proton/error_condition.hpp
@@ -46,19 +46,22 @@ class error_condition {
PN_CPP_EXTERN error_condition(std::string name, std::string description);
PN_CPP_EXTERN error_condition(std::string name, std::string description, proton::value properties);
-#if PN_CPP_HAS_CPP11
+#if PN_CPP_HAS_DEFAULTED_FUNCTIONS
error_condition(const error_condition&) = default;
error_condition(error_condition&&) = default;
error_condition& operator=(const error_condition&) = default;
error_condition& operator=(error_condition&&) = default;
#endif
+ /// If you are using a C++11 compiler you may use an error_condition
+ /// in boolean contexts and the expression will be true if the error_condition is set
+#if PN_CPP_HAS_EXPLICIT_CONVERSIONS
+ PN_CPP_EXTERN explicit operator bool() const;
+#endif
+
/// No condition set.
PN_CPP_EXTERN bool operator!() const;
- /// XXX add C++11 explicit bool conversion with a note about
- /// C++11-only usage
-
/// No condition has been set.
PN_CPP_EXTERN bool empty() const;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/80f6d4b5/proton-c/bindings/cpp/include/proton/message.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/message.hpp b/proton-c/bindings/cpp/include/proton/message.hpp
index b0ea95c..c24b4e7 100644
--- a/proton-c/bindings/cpp/include/proton/message.hpp
+++ b/proton-c/bindings/cpp/include/proton/message.hpp
@@ -59,11 +59,13 @@ class message {
/// Copy a message.
PN_CPP_EXTERN message(const message&);
-#if PN_CPP_HAS_CPP11
+ /// Copy a message.
+ PN_CPP_EXTERN message& operator=(const message&);
+
+#if PN_CPP_HAS_RVALUE_REFERENCES
/// Move a message.
PN_CPP_EXTERN message(message&&);
-
- // XXX move assignment operator? - do this in general for CPP11
+ PN_CPP_EXTERN message& operator=(message&&);
#endif
/// Create a message with its body set from any value that can be
@@ -72,9 +74,6 @@ class message {
PN_CPP_EXTERN ~message();
- /// Copy a message.
- PN_CPP_EXTERN message& operator=(const message&);
-
/// @name Basic properties and methods
/// @{
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/80f6d4b5/proton-c/bindings/cpp/include/proton/object.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/object.hpp b/proton-c/bindings/cpp/include/proton/object.hpp
index 7c7495d..db52975 100644
--- a/proton-c/bindings/cpp/include/proton/object.hpp
+++ b/proton-c/bindings/cpp/include/proton/object.hpp
@@ -42,7 +42,7 @@ template <class T> class pn_ptr : private pn_ptr_base, private comparable<pn_ptr
pn_ptr(T* p) : ptr_(p) { incref(ptr_); }
pn_ptr(const pn_ptr& o) : ptr_(o.ptr_) { incref(ptr_); }
-#if PN_CPP_HAS_CPP11
+#if PN_CPP_HAS_RVALUE_REFERENCES
pn_ptr(pn_ptr&& o) : ptr_(0) { std::swap(ptr_, o.ptr_); }
#endif
@@ -52,8 +52,13 @@ template <class T> class pn_ptr : private pn_ptr_base, private comparable<pn_ptr
T* get() const { return ptr_; }
T* release() { T *p = ptr_; ptr_ = 0; return p; }
+
bool operator!() const { return !ptr_; }
+#if PN_CPP_HAS_EXPLICIT_CONVERSIONS
+ explicit operator bool() const { return !!ptr_; }
+#endif
+
static pn_ptr take_ownership(T* p) { return pn_ptr<T>(p, true); }
private:
@@ -73,6 +78,9 @@ template <class T> pn_ptr<T> take_ownership(T* p) { return pn_ptr<T>::take_owner
template <class T> class object : private comparable<object<T> > {
public:
bool operator!() const { return !object_; }
+#if PN_CPP_HAS_EXPLICIT_CONVERSIONS
+ explicit operator bool() const { return object_; }
+#endif
protected:
object(pn_ptr<T> o) : object_(o) {}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/80f6d4b5/proton-c/bindings/cpp/include/proton/pn_unique_ptr.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/pn_unique_ptr.hpp b/proton-c/bindings/cpp/include/proton/pn_unique_ptr.hpp
index 2056c70..56f8aba 100644
--- a/proton-c/bindings/cpp/include/proton/pn_unique_ptr.hpp
+++ b/proton-c/bindings/cpp/include/proton/pn_unique_ptr.hpp
@@ -38,7 +38,7 @@ namespace internal {
template <class T> class pn_unique_ptr {
public:
pn_unique_ptr(T* p=0) : ptr_(p) {}
-#if PN_CPP_HAS_CPP11
+#if PN_CPP_HAS_RVALUE_REFERENCES
pn_unique_ptr(pn_unique_ptr&& x) : ptr_(0) { std::swap(ptr_, x.ptr_); }
#else
pn_unique_ptr(const pn_unique_ptr& x) : ptr_() { std::swap(ptr_, const_cast<pn_unique_ptr&>(x).ptr_); }
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/80f6d4b5/proton-c/bindings/cpp/include/proton/sasl.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/sasl.hpp b/proton-c/bindings/cpp/include/proton/sasl.hpp
index eee6b96..db6b77a 100644
--- a/proton-c/bindings/cpp/include/proton/sasl.hpp
+++ b/proton-c/bindings/cpp/include/proton/sasl.hpp
@@ -38,13 +38,15 @@ class sasl {
/// @endcond
public:
-#if PN_CPP_HAS_CPP11
+#if PN_CPP_HAS_DELETED_FUNCTIONS
sasl() = delete;
sasl(const sasl&) = delete;
- sasl(sasl&&) = default;
sasl& operator=(const sasl&) = delete;
sasl& operator=(sasl&&) = delete;
#endif
+#if PN_CPP_HAS_DEFAULTED_FUNCTIONS
+ sasl(sasl&&) = default;
+#endif
/// The result of the SASL negotiation.
enum outcome {
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/80f6d4b5/proton-c/bindings/cpp/include/proton/types_fwd.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/types_fwd.hpp b/proton-c/bindings/cpp/include/proton/types_fwd.hpp
index 77e2bf3..8ece3de 100644
--- a/proton-c/bindings/cpp/include/proton/types_fwd.hpp
+++ b/proton-c/bindings/cpp/include/proton/types_fwd.hpp
@@ -47,7 +47,7 @@ class value;
struct null {
null() {}
-#if PN_CPP_HAS_CPP11
+#if PN_CPP_HAS_NULLPTR
null(std::nullptr_t) {}
#endif
};
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/80f6d4b5/proton-c/bindings/cpp/include/proton/value.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/value.hpp b/proton-c/bindings/cpp/include/proton/value.hpp
index fb3c5a3..8957fdc 100644
--- a/proton-c/bindings/cpp/include/proton/value.hpp
+++ b/proton-c/bindings/cpp/include/proton/value.hpp
@@ -65,7 +65,7 @@ class value : public value_base, private comparable<value> {
///@{
PN_CPP_EXTERN value(const value&);
PN_CPP_EXTERN value& operator=(const value&);
-#if PN_CPP_HAS_CPP11
+#if PN_CPP_HAS_RVALUE_REFERENCES
PN_CPP_EXTERN value(value&&);
PN_CPP_EXTERN value& operator=(value&&);
#endif
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/80f6d4b5/proton-c/bindings/cpp/src/error_condition.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/error_condition.cpp b/proton-c/bindings/cpp/src/error_condition.cpp
index b575596..1596d59 100644
--- a/proton-c/bindings/cpp/src/error_condition.cpp
+++ b/proton-c/bindings/cpp/src/error_condition.cpp
@@ -48,6 +48,12 @@ error_condition::error_condition(std::string name, std::string description, valu
properties_(properties)
{}
+#if PN_CPP_HAS_EXPLICIT_CONVERSIONS
+error_condition::operator bool() const {
+ return !name_.empty();
+}
+#endif
+
bool error_condition::operator!() const {
return name_.empty();
}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/80f6d4b5/proton-c/bindings/cpp/src/message.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/message.cpp b/proton-c/bindings/cpp/src/message.cpp
index 0ca5d61..98015d8 100644
--- a/proton-c/bindings/cpp/src/message.cpp
+++ b/proton-c/bindings/cpp/src/message.cpp
@@ -43,8 +43,12 @@ namespace proton {
message::message() : pn_msg_(0) {}
message::message(const message &m) : pn_msg_(0) { *this = m; }
-#if PN_CPP_HAS_CPP11
+#if PN_CPP_HAS_RVALUE_REFERENCES
message::message(message &&m) : pn_msg_(0) { swap(*this, m); }
+message& message::operator=(message&& m) {
+ swap(*this, m);
+ return *this;
+}
#endif
message::message(const value& x) : pn_msg_(0) { body() = x; }
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/80f6d4b5/proton-c/bindings/cpp/src/value.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/value.cpp b/proton-c/bindings/cpp/src/value.cpp
index ba2f540..7019dfd 100644
--- a/proton-c/bindings/cpp/src/value.cpp
+++ b/proton-c/bindings/cpp/src/value.cpp
@@ -33,7 +33,7 @@ using namespace codec;
value::value() {}
value::value(const value& x) { *this = x; }
value::value(const codec::data& x) { if (!x.empty()) data().copy(x); }
-#if PN_CPP_HAS_CPP11
+#if PN_CPP_HAS_RVALUE_REFERENCES
value::value(value&& x) { swap(*this, x); }
value& value::operator=(value&& x) { swap(*this, x); return *this; }
#endif
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org