Repository: qpid-proton Updated Branches: refs/heads/master be69853b9 -> 772fd54f2
PROTON-1197: [C++ binding] Ensure that symbol export for members is consistent with access - Usually only public members should have exported symbols. - This also pointed out a number of completely unused update functions in the *_options code that was private. Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/772fd54f Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/772fd54f Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/772fd54f Branch: refs/heads/master Commit: 772fd54f299251e53b7469df4c415cc5d46d3082 Parents: be69853 Author: Andrew Stitcher <[email protected]> Authored: Fri May 13 02:20:45 2016 +0100 Committer: Andrew Stitcher <[email protected]> Committed: Fri May 13 02:20:45 2016 +0100 ---------------------------------------------------------------------- proton-c/bindings/cpp/include/proton/data.hpp | 25 ++++++++++--------- .../cpp/include/proton/session_options.hpp | 1 - .../cpp/include/proton/source_options.hpp | 1 - .../cpp/include/proton/target_options.hpp | 1 - proton-c/bindings/cpp/src/data.cpp | 2 -- proton-c/bindings/cpp/src/error_condition.cpp | 2 +- proton-c/bindings/cpp/src/message.cpp | 10 ++++---- proton-c/bindings/cpp/src/node_options.cpp | 26 +------------------- proton-c/bindings/cpp/src/proton_bits.hpp | 4 +++ proton-c/bindings/cpp/src/session_options.cpp | 6 ----- proton-c/bindings/cpp/src/source.cpp | 2 +- proton-c/bindings/cpp/src/terminus.cpp | 2 +- 12 files changed, 27 insertions(+), 55 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/772fd54f/proton-c/bindings/cpp/include/proton/data.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/data.hpp b/proton-c/bindings/cpp/include/proton/data.hpp index 2dadd51..d305693 100644 --- a/proton-c/bindings/cpp/include/proton/data.hpp +++ b/proton-c/bindings/cpp/include/proton/data.hpp @@ -42,9 +42,11 @@ namespace codec { /// Wrapper for a proton data object. class data : public internal::object<pn_data_t> { - public: /// Wrap an existing proton-C data object. - data(pn_data_t* d=0) : internal::object<pn_data_t>(d) {} + data(pn_data_t* d) : internal::object<pn_data_t>(d) {} + + public: + data() : internal::object<pn_data_t>(0) {} /// Create a new data object. PN_CPP_EXTERN static data create(); @@ -67,14 +69,15 @@ class data : public internal::object<pn_data_t> { /// Append up to limit items from data object. PN_CPP_EXTERN int appendn(data src, int limit); - protected: + PN_CPP_EXTERN bool next(); PN_CPP_EXTERN void* point() const; PN_CPP_EXTERN void restore(void* h); - PN_CPP_EXTERN void narrow(); - PN_CPP_EXTERN void widen(); - PN_CPP_EXTERN bool next(); - PN_CPP_EXTERN bool prev(); + protected: + void narrow(); + void widen(); + + friend class internal::factory<data>; friend struct state_guard; friend PN_CPP_EXTERN std::ostream& operator<<(std::ostream&, const data&); }; @@ -101,10 +104,10 @@ struct start { bool is_described; ///< true if first value is a descriptor. size_t size; ///< the element count excluding the descriptor (if any) - PN_CPP_EXTERN static start array(type_id element, bool described=false) { return start(ARRAY, element, described); } - PN_CPP_EXTERN static start list() { return start(LIST); } - PN_CPP_EXTERN static start map() { return start(MAP); } - PN_CPP_EXTERN static start described() { return start(DESCRIBED, NULL_TYPE, true); } + static start array(type_id element, bool described=false) { return start(ARRAY, element, described); } + static start list() { return start(LIST); } + static start map() { return start(MAP); } + static start described() { return start(DESCRIBED, NULL_TYPE, true); } }; // Finish inserting or extracting a complex type. http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/772fd54f/proton-c/bindings/cpp/include/proton/session_options.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/session_options.hpp b/proton-c/bindings/cpp/include/proton/session_options.hpp index 182f5ff..0711022 100644 --- a/proton-c/bindings/cpp/include/proton/session_options.hpp +++ b/proton-c/bindings/cpp/include/proton/session_options.hpp @@ -61,7 +61,6 @@ class session_options { // Other useful session configuration TBD. private: void apply(session&) const; - PN_CPP_EXTERN void update(const session_options& other); class impl; internal::pn_unique_ptr<impl> impl_; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/772fd54f/proton-c/bindings/cpp/include/proton/source_options.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/source_options.hpp b/proton-c/bindings/cpp/include/proton/source_options.hpp index 0a1d280..0312d06 100644 --- a/proton-c/bindings/cpp/include/proton/source_options.hpp +++ b/proton-c/bindings/cpp/include/proton/source_options.hpp @@ -83,7 +83,6 @@ class source_options { /// @cond INTERNAL private: void apply(source&) const; - PN_CPP_EXTERN void update(const source_options& other); class impl; internal::pn_unique_ptr<impl> impl_; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/772fd54f/proton-c/bindings/cpp/include/proton/target_options.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/target_options.hpp b/proton-c/bindings/cpp/include/proton/target_options.hpp index 8863598..bafc363 100644 --- a/proton-c/bindings/cpp/include/proton/target_options.hpp +++ b/proton-c/bindings/cpp/include/proton/target_options.hpp @@ -78,7 +78,6 @@ class target_options { /// @cond INTERNAL private: void apply(target&) const; - PN_CPP_EXTERN void update(const target_options& other); class impl; internal::pn_unique_ptr<impl> impl_; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/772fd54f/proton-c/bindings/cpp/src/data.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/data.cpp b/proton-c/bindings/cpp/src/data.cpp index 5bbf743..26583af 100644 --- a/proton-c/bindings/cpp/src/data.cpp +++ b/proton-c/bindings/cpp/src/data.cpp @@ -59,8 +59,6 @@ int data::appendn(data src, int limit) { return pn_data_appendn(pn_object(), src bool data::next() { return pn_data_next(pn_object()); } -bool data::prev() { return pn_data_prev(pn_object()); } - std::ostream& operator<<(std::ostream& o, const data& d) { state_guard sg(const_cast<data&>(d)); const_cast<data&>(d).rewind(); http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/772fd54f/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 1596d59..bce21a3 100644 --- a/proton-c/bindings/cpp/src/error_condition.cpp +++ b/proton-c/bindings/cpp/src/error_condition.cpp @@ -28,7 +28,7 @@ namespace proton { error_condition::error_condition(pn_condition_t* c) : name_(str(pn_condition_get_name(c))), description_(str(pn_condition_get_description(c))), - properties_(pn_condition_info(c)) + properties_(make_wrapper(pn_condition_info(c))) {} http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/772fd54f/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 98015d8..291b106 100644 --- a/proton-c/bindings/cpp/src/message.cpp +++ b/proton-c/bindings/cpp/src/message.cpp @@ -54,7 +54,7 @@ message& message::operator=(message&& m) { message::message(const value& x) : pn_msg_(0) { body() = x; } message::~message() { - body_.data_ = codec::data(0); // Must release body before pn_message_free + body_.data_ = codec::data(); // Must release body before pn_message_free pn_message_free(pn_msg_); } @@ -69,7 +69,7 @@ void swap(message& x, message& y) { pn_message_t *message::pn_msg() const { if (!pn_msg_) pn_msg_ = pn_message(); - body_.data_ = pn_message_body(pn_msg_); + body_.data_ = make_wrapper(pn_message_body(pn_msg_)); return pn_msg_; } @@ -142,7 +142,7 @@ std::string message::reply_to() const { } void message::correlation_id(const message_id& id) { - codec::encoder e(pn_message_correlation_id(pn_msg())); + codec::encoder e(make_wrapper(pn_message_correlation_id(pn_msg()))); e << id; } @@ -216,7 +216,7 @@ value& message::body() { pn_msg(); return body_; } // Decode a map on demand template<class M> M& get_map(pn_message_t* msg, pn_data_t* (*get)(pn_message_t*), M& map) { - codec::decoder d(get(msg)); + codec::decoder d(make_wrapper(get(msg))); if (map.empty() && !d.empty()) { d.rewind(); d >> map; @@ -227,7 +227,7 @@ template<class M> M& get_map(pn_message_t* msg, pn_data_t* (*get)(pn_message_t*) // Encode a map if necessary. template<class M> M& put_map(pn_message_t* msg, pn_data_t* (*get)(pn_message_t*), M& map) { - codec::encoder e(get(msg)); + codec::encoder e(make_wrapper(get(msg))); if (e.empty() && !map.empty()) { e << map; map.clear(); // The encoded pn_data_t is now the authority. http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/772fd54f/proton-c/bindings/cpp/src/node_options.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/node_options.cpp b/proton-c/bindings/cpp/src/node_options.cpp index 1053560..5bb2f8e 100644 --- a/proton-c/bindings/cpp/src/node_options.cpp +++ b/proton-c/bindings/cpp/src/node_options.cpp @@ -103,21 +103,10 @@ class source_options::impl { pn_terminus_set_distribution_mode(unwrap(s), pn_distribution_mode_t(distribution_mode.value)); if (filters.set && !filters.value.empty()) { // Applied at most once via source_option. No need to clear. - codec::encoder e(pn_terminus_filter(unwrap(s))); + codec::encoder e(make_wrapper(pn_terminus_filter(unwrap(s)))); e << filters.value; } } - - void update(const impl& x) { - address.update(x.address); - dynamic.update(x.dynamic); - durability_mode.update(x.durability_mode); - timeout.update(x.timeout); - expiry_policy.update(x.expiry_policy); - distribution_mode.update(x.distribution_mode); - filters.update(x.filters); - } - }; source_options::source_options() : impl_(new impl()) {} @@ -131,8 +120,6 @@ source_options& source_options::operator=(const source_options& x) { return *this; } -void source_options::update(const source_options& x) { impl_->update(*x.impl_); } - source_options& source_options::address(const std::string &addr) { impl_->address = addr; return *this; } source_options& source_options::dynamic(bool b) { impl_->dynamic = b; return *this; } source_options& source_options::durability_mode(enum source::durability_mode m) { impl_->durability_mode = m; return *this; } @@ -158,15 +145,6 @@ class target_options::impl { node_durability(t, durability_mode); node_expiry(t, expiry_policy, timeout); } - - void update(const impl& x) { - address.update(x.address); - dynamic.update(x.dynamic); - durability_mode.update(x.durability_mode); - timeout.update(x.timeout); - expiry_policy.update(x.expiry_policy); - } - }; target_options::target_options() : impl_(new impl()) {} @@ -180,8 +158,6 @@ target_options& target_options::operator=(const target_options& x) { return *this; } -void target_options::update(const target_options& x) { impl_->update(*x.impl_); } - target_options& target_options::address(const std::string &addr) { impl_->address = addr; return *this; } target_options& target_options::dynamic(bool b) { impl_->dynamic = b; return *this; } target_options& target_options::durability_mode(enum target::durability_mode m) { impl_->durability_mode = m; return *this; } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/772fd54f/proton-c/bindings/cpp/src/proton_bits.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/proton_bits.hpp b/proton-c/bindings/cpp/src/proton_bits.hpp index 2a5362c..6b4a295 100644 --- a/proton-c/bindings/cpp/src/proton_bits.hpp +++ b/proton-c/bindings/cpp/src/proton_bits.hpp @@ -29,6 +29,7 @@ struct pn_error_t; +struct pn_data_t; struct pn_transport_t; struct pn_sasl_t; struct pn_ssl_t; @@ -43,6 +44,7 @@ struct pn_reactor_t; namespace proton { +namespace codec { class data; } class transport; class sasl; class ssl; @@ -81,6 +83,7 @@ namespace internal { // These traits relate the wrapped and wrapper classes for the templated factories below template <class T> struct wrapped {}; +template <> struct wrapped<codec::data> { typedef pn_data_t type; }; template <> struct wrapped<transport> { typedef pn_transport_t type; }; template <> struct wrapped<sasl> { typedef pn_sasl_t type; }; template <> struct wrapped<ssl> { typedef pn_ssl_t type; }; @@ -100,6 +103,7 @@ template <> struct wrapped<target> { typedef pn_terminus_t type; }; template <> struct wrapped<reactor> { typedef pn_reactor_t type; }; template <class T> struct wrapper {}; +template <> struct wrapper<pn_data_t> { typedef codec::data type; }; template <> struct wrapper<pn_transport_t> { typedef transport type; }; template <> struct wrapper<pn_sasl_t> { typedef sasl type; }; template <> struct wrapper<pn_ssl_t> { typedef ssl type; }; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/772fd54f/proton-c/bindings/cpp/src/session_options.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/session_options.cpp b/proton-c/bindings/cpp/src/session_options.cpp index e95884b..9f77d6b 100644 --- a/proton-c/bindings/cpp/src/session_options.cpp +++ b/proton-c/bindings/cpp/src/session_options.cpp @@ -55,10 +55,6 @@ class session_options::impl { } } - void update(const impl& x) { - handler.update(x.handler); - } - }; session_options::session_options() : impl_(new impl()) {} @@ -72,8 +68,6 @@ session_options& session_options::operator=(const session_options& x) { return *this; } -void session_options::update(const session_options& x) { impl_->update(*x.impl_); } - session_options& session_options::handler(class handler *h) { impl_->handler = h->messaging_adapter_.get(); return *this; } void session_options::apply(session& s) const { impl_->apply(s); } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/772fd54f/proton-c/bindings/cpp/src/source.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/source.cpp b/proton-c/bindings/cpp/src/source.cpp index 1c9a5bd..a407d0b 100644 --- a/proton-c/bindings/cpp/src/source.cpp +++ b/proton-c/bindings/cpp/src/source.cpp @@ -48,7 +48,7 @@ enum source::distribution_mode source::distribution_mode() const { } source::filter_map source::filters() const { - codec::decoder d(pn_terminus_filter(object_)); + codec::decoder d(make_wrapper(pn_terminus_filter(object_))); filter_map map; if (!d.empty()) { d.rewind(); http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/772fd54f/proton-c/bindings/cpp/src/terminus.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/terminus.cpp b/proton-c/bindings/cpp/src/terminus.cpp index 138a42c..75ac64a 100644 --- a/proton-c/bindings/cpp/src/terminus.cpp +++ b/proton-c/bindings/cpp/src/terminus.cpp @@ -49,7 +49,7 @@ bool terminus::dynamic() const { } value terminus::node_properties() const { - value x(pn_terminus_properties(object_)); + value x(make_wrapper(pn_terminus_properties(object_))); return x; } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
