Repository: qpid-proton Updated Branches: refs/heads/master 8f27d0e73 -> 6ac7bd29e
PROTON-1138: message user_id->user, make internal: comparable, value_base, scalar_base, remove scalar_base as_xxx methods Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/6ac7bd29 Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/6ac7bd29 Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/6ac7bd29 Branch: refs/heads/master Commit: 6ac7bd29e78611bacb541a8073d48f6708d65ab8 Parents: 8f27d0e Author: Clifford Jansen <[email protected]> Authored: Fri May 13 18:40:37 2016 -0700 Committer: Clifford Jansen <[email protected]> Committed: Fri May 13 18:40:37 2016 -0700 ---------------------------------------------------------------------- .../cpp/include/proton/annotation_key.hpp | 4 +-- .../bindings/cpp/include/proton/byte_array.hpp | 2 +- .../bindings/cpp/include/proton/comparable.hpp | 3 ++- .../bindings/cpp/include/proton/decoder.hpp | 7 +++-- .../bindings/cpp/include/proton/duration.hpp | 2 +- .../bindings/cpp/include/proton/encoder.hpp | 9 ++++--- .../bindings/cpp/include/proton/message.hpp | 9 ++----- .../bindings/cpp/include/proton/message_id.hpp | 4 +-- proton-c/bindings/cpp/include/proton/scalar.hpp | 2 +- .../bindings/cpp/include/proton/scalar_base.hpp | 10 +++---- .../bindings/cpp/include/proton/timestamp.hpp | 2 +- proton-c/bindings/cpp/include/proton/value.hpp | 13 +++++++-- proton-c/bindings/cpp/src/decoder.cpp | 4 +-- proton-c/bindings/cpp/src/encoder.cpp | 6 ++--- proton-c/bindings/cpp/src/message.cpp | 4 +-- proton-c/bindings/cpp/src/message_test.cpp | 6 ++--- proton-c/bindings/cpp/src/scalar_base.cpp | 11 ++------ proton-c/bindings/cpp/src/scalar_test.cpp | 28 ++++++++++---------- proton-c/bindings/cpp/src/value.cpp | 10 +++++-- 19 files changed, 71 insertions(+), 65 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/proton-c/bindings/cpp/include/proton/annotation_key.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/annotation_key.hpp b/proton-c/bindings/cpp/include/proton/annotation_key.hpp index acea44e..042e95d 100644 --- a/proton-c/bindings/cpp/include/proton/annotation_key.hpp +++ b/proton-c/bindings/cpp/include/proton/annotation_key.hpp @@ -28,9 +28,9 @@ namespace proton { /// A key for use with AMQP annotation maps. /// /// An annotation_key can contain either a uint64_t or a proton::symbol. -class annotation_key : public scalar_base { +class annotation_key : public internal::scalar_base { public: - using scalar_base::type; + using internal::scalar_base::type; /// An empty annotation key has a uint64_t == 0 value. annotation_key() { put_(uint64_t(0)); } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/proton-c/bindings/cpp/include/proton/byte_array.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/byte_array.hpp b/proton-c/bindings/cpp/include/proton/byte_array.hpp index 9ba6abf..e5c5dbf 100644 --- a/proton-c/bindings/cpp/include/proton/byte_array.hpp +++ b/proton-c/bindings/cpp/include/proton/byte_array.hpp @@ -33,7 +33,7 @@ PN_CPP_EXTERN void print_hex(std::ostream& o, const uint8_t* p, size_t n); /// Used to represent fixed-sized data types that don't have a natural C++ representation /// as an array of bytes. -template <size_t N> class byte_array : private comparable<byte_array<N> > { +template <size_t N> class byte_array : private internal::comparable<byte_array<N> > { public: ///@name Sequence container typedefs ///@{ http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/proton-c/bindings/cpp/include/proton/comparable.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/comparable.hpp b/proton-c/bindings/cpp/include/proton/comparable.hpp index cca0e62..72bcbb4 100644 --- a/proton-c/bindings/cpp/include/proton/comparable.hpp +++ b/proton-c/bindings/cpp/include/proton/comparable.hpp @@ -21,6 +21,7 @@ */ namespace proton { +namespace internal { ///@cond INTERNAL @@ -35,6 +36,6 @@ template <class T> class comparable { ///@endcond -} +}} #endif // COMPARABLE_HPP http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/proton-c/bindings/cpp/include/proton/decoder.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/decoder.hpp b/proton-c/bindings/cpp/include/proton/decoder.hpp index e6fc78b..32d3adb 100644 --- a/proton-c/bindings/cpp/include/proton/decoder.hpp +++ b/proton-c/bindings/cpp/include/proton/decoder.hpp @@ -32,7 +32,10 @@ class annotation_key; class message_id; class scalar; class value; + +namespace internal { class value_base; +} /// @ingroup codec namespace codec { @@ -50,7 +53,7 @@ class decoder : public data { explicit decoder(const data& d, bool exact=false) : data(d), exact_(exact) {} /// Attach decoder to a proton::value. The decoder is rewound to the start of the data. - PN_CPP_EXTERN explicit decoder(const value_base&, bool exact=false); + PN_CPP_EXTERN explicit decoder(const internal::value_base&, bool exact=false); /// Decode AMQP data from a buffer and add it to the end of the decoders stream. */ PN_CPP_EXTERN void decode(const char* buffer, size_t size); @@ -91,7 +94,7 @@ class decoder : public data { PN_CPP_EXTERN decoder& operator>>(message_id&); PN_CPP_EXTERN decoder& operator>>(annotation_key&); PN_CPP_EXTERN decoder& operator>>(scalar&); - PN_CPP_EXTERN decoder& operator>>(value_base&); + PN_CPP_EXTERN decoder& operator>>(internal::value_base&); PN_CPP_EXTERN decoder& operator>>(null&); ///@} http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/proton-c/bindings/cpp/include/proton/duration.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/duration.hpp b/proton-c/bindings/cpp/include/proton/duration.hpp index c5f75d7..1b413a3 100644 --- a/proton-c/bindings/cpp/include/proton/duration.hpp +++ b/proton-c/bindings/cpp/include/proton/duration.hpp @@ -31,7 +31,7 @@ namespace proton { /// A span of time in milliseconds. -class duration : private comparable<duration> { +class duration : private internal::comparable<duration> { public: typedef int64_t numeric_type; ///< Numeric type used to store milliseconds http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/proton-c/bindings/cpp/include/proton/encoder.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/encoder.hpp b/proton-c/bindings/cpp/include/proton/encoder.hpp index b9d4461..fd15128 100644 --- a/proton-c/bindings/cpp/include/proton/encoder.hpp +++ b/proton-c/bindings/cpp/include/proton/encoder.hpp @@ -26,8 +26,11 @@ namespace proton { +namespace internal{ class scalar_base; class value_base; +} + /// @ingroup codec namespace codec { @@ -42,7 +45,7 @@ class encoder : public data { explicit encoder(const data& d) : data(d) {} /// Encoder into v. Clears any current value in v. - PN_CPP_EXTERN explicit encoder(value_base& v); + PN_CPP_EXTERN explicit encoder(internal::value_base& v); /** * Encode the current values into buffer and update size to reflect the @@ -86,13 +89,13 @@ class encoder : public data { PN_CPP_EXTERN encoder& operator<<(const std::string&); PN_CPP_EXTERN encoder& operator<<(const symbol&); PN_CPP_EXTERN encoder& operator<<(const binary&); - PN_CPP_EXTERN encoder& operator<<(const scalar_base&); + PN_CPP_EXTERN encoder& operator<<(const internal::scalar_base&); PN_CPP_EXTERN encoder& operator<<(const null&); ///@} /// Insert a proton::value. /// @internal NOTE insert value_base, not value to avoid recursive implicit conversions. - PN_CPP_EXTERN encoder& operator<<(const value_base&); + PN_CPP_EXTERN encoder& operator<<(const internal::value_base&); /// Start a complex type PN_CPP_EXTERN encoder& operator<<(const start&); http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/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 c24b4e7..2dbb4ec 100644 --- a/proton-c/bindings/cpp/include/proton/message.hpp +++ b/proton-c/bindings/cpp/include/proton/message.hpp @@ -83,13 +83,8 @@ class message { PN_CPP_EXTERN void id(const message_id& id); PN_CPP_EXTERN message_id id() const; - /// @cond INTERNAL - /// XXX consider just user, in order to be consistent with similar - /// fields elsewhere in the API - /// XXX ask gordon about use case - decision sort of: "user" instead of "user_id" - PN_CPP_EXTERN void user_id(const std::string &user); - PN_CPP_EXTERN std::string user_id() const; - /// @endcond + PN_CPP_EXTERN void user(const std::string &user); + PN_CPP_EXTERN std::string user() const; /// Encode entire message into a byte vector, growing it if /// necessary. http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/proton-c/bindings/cpp/include/proton/message_id.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/message_id.hpp b/proton-c/bindings/cpp/include/proton/message_id.hpp index 2860a2a..abf4fe2 100644 --- a/proton-c/bindings/cpp/include/proton/message_id.hpp +++ b/proton-c/bindings/cpp/include/proton/message_id.hpp @@ -37,7 +37,7 @@ namespace proton { /// - proton::uuid /// - proton::binary /// -class message_id : public scalar_base { +class message_id : public internal::scalar_base { public: /// An empty message_id has a uint64_t == 0 value. message_id() { put_(uint64_t(0)); } @@ -57,7 +57,7 @@ class message_id : public scalar_base { /// @} private: - message_id(const pn_atom_t& a): scalar_base(a) {} + message_id(const pn_atom_t& a): internal::scalar_base(a) {} ///@cond INTERNAL friend class message; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/proton-c/bindings/cpp/include/proton/scalar.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/scalar.hpp b/proton-c/bindings/cpp/include/proton/scalar.hpp index af16a89..a08aa48 100644 --- a/proton-c/bindings/cpp/include/proton/scalar.hpp +++ b/proton-c/bindings/cpp/include/proton/scalar.hpp @@ -31,7 +31,7 @@ class encoder; /// A holder for an instance of any scalar AMQP type, see \ref types. /// -class scalar : public scalar_base { +class scalar : public internal::scalar_base { public: /// Create an empty scalar. PN_CPP_EXTERN scalar() {} http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/proton-c/bindings/cpp/include/proton/scalar_base.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/scalar_base.hpp b/proton-c/bindings/cpp/include/proton/scalar_base.hpp index 43003c8..eea3fb2 100644 --- a/proton-c/bindings/cpp/include/proton/scalar_base.hpp +++ b/proton-c/bindings/cpp/include/proton/scalar_base.hpp @@ -36,12 +36,14 @@ #include <string> namespace proton { +class message; namespace codec { class decoder; class encoder; } +namespace internal { /// Base class for scalar types. class scalar_base : private comparable<scalar_base> { @@ -51,10 +53,6 @@ class scalar_base : private comparable<scalar_base> { /// @cond INTERNAL /// deprecated - PN_CPP_EXTERN int64_t as_int() const; - PN_CPP_EXTERN uint64_t as_uint() const; - PN_CPP_EXTERN double as_double() const; - PN_CPP_EXTERN std::string as_string() const; template <class T> void get(T& x) const { get_(x); } template <class T> T get() const { T x; get_(x); return x; } /// @endcond @@ -125,13 +123,11 @@ class scalar_base : private comparable<scalar_base> { pn_atom_t atom_; binary bytes_; // Hold binary data. - friend class message; + friend class proton::message; friend class codec::encoder; friend class codec::decoder; }; -namespace internal { - template<class T> T get(const scalar_base& s) { T x; s.get(x); return x; } template <class R, class F> R visit(const scalar_base& s, F f) { http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/proton-c/bindings/cpp/include/proton/timestamp.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/timestamp.hpp b/proton-c/bindings/cpp/include/proton/timestamp.hpp index af08e40..7736e00 100644 --- a/proton-c/bindings/cpp/include/proton/timestamp.hpp +++ b/proton-c/bindings/cpp/include/proton/timestamp.hpp @@ -23,7 +23,7 @@ namespace proton { /// 64 bit timestamp in milliseconds since the epoch 00:00:00 (UTC), 1 January 1970. -class timestamp : private comparable<timestamp> { +class timestamp : private internal::comparable<timestamp> { public: typedef int64_t numeric_type; ///< Numeric type holding milliseconds value PN_CPP_EXTERN static timestamp now(); ///< Current wall-clock time http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/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 8957fdc..7b347f7 100644 --- a/proton-c/bindings/cpp/include/proton/value.hpp +++ b/proton-c/bindings/cpp/include/proton/value.hpp @@ -28,6 +28,12 @@ #include <iosfwd> namespace proton { +class message; + +namespace internal { + +class value_base; +PN_CPP_EXTERN std::ostream& operator<<(std::ostream& o, const value_base& x); ///@internal - separate value data from implicit conversion constructors to avoid recursions. class value_base { @@ -43,14 +49,17 @@ class value_base { codec::data& data() const; mutable class codec::data data_; - friend class message; + friend class proton::message; friend class codec::encoder; friend class codec::decoder; friend PN_CPP_EXTERN std::ostream& operator<<(std::ostream&, const value_base&); }; +} + + /// A holder for any AMQP value, simple or complex, see @ref types. -class value : public value_base, private comparable<value> { +class value : public internal::value_base, private internal::comparable<value> { private: // Enabler for encodable types excluding proton::value. template<class T, class U=void> struct assignable : http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/proton-c/bindings/cpp/src/decoder.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/decoder.cpp b/proton-c/bindings/cpp/src/decoder.cpp index ba94c00..7bfbeb3 100644 --- a/proton-c/bindings/cpp/src/decoder.cpp +++ b/proton-c/bindings/cpp/src/decoder.cpp @@ -43,7 +43,7 @@ namespace codec { * to be returned by the decoder. */ -decoder::decoder(const value_base& v, bool exact) : data(v.data()), exact_(exact) { rewind(); } +decoder::decoder(const internal::value_base& v, bool exact) : data(v.data()), exact_(exact) { rewind(); } namespace { template <class T> T check(T result) { @@ -138,7 +138,7 @@ decoder& decoder::operator>>(null&) { return *this; } -decoder& decoder::operator>>(value_base& x) { +decoder& decoder::operator>>(internal::value_base& x) { if (*this == x.data_) throw conversion_error("extract into self"); data d = x.data(); http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/proton-c/bindings/cpp/src/encoder.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/encoder.cpp b/proton-c/bindings/cpp/src/encoder.cpp index a228960..4067cf8 100644 --- a/proton-c/bindings/cpp/src/encoder.cpp +++ b/proton-c/bindings/cpp/src/encoder.cpp @@ -45,7 +45,7 @@ void encoder::check(long result) { } -encoder::encoder(value_base& v) : data(v.data()) { +encoder::encoder(internal::value_base& v) : data(v.data()) { clear(); } @@ -142,9 +142,9 @@ encoder& encoder::operator<<(const symbol& x) { return insert(x, pn_data_put_amq encoder& encoder::operator<<(const binary& x) { return insert(x, pn_data_put_amqp_binary); } encoder& encoder::operator<<(const null&) { pn_data_put_null(pn_object()); return *this; } -encoder& encoder::operator<<(const scalar_base& x) { return insert(x.atom_, pn_data_put_atom); } +encoder& encoder::operator<<(const internal::scalar_base& x) { return insert(x.atom_, pn_data_put_atom); } -encoder& encoder::operator<<(const value_base& x) { +encoder& encoder::operator<<(const internal::value_base& x) { if (*this == x.data_) throw conversion_error("cannot insert into self"); if (x.empty()) { http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/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 291b106..a3842d9 100644 --- a/proton-c/bindings/cpp/src/message.cpp +++ b/proton-c/bindings/cpp/src/message.cpp @@ -97,11 +97,11 @@ message_id message::id() const { return pn_message_get_id(pn_msg()); } -void message::user_id(const std::string &id) { +void message::user(const std::string &id) { check(pn_message_set_user_id(pn_msg(), pn_bytes(id))); } -std::string message::user_id() const { +std::string message::user() const { return str(pn_message_get_user_id(pn_msg())); } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/proton-c/bindings/cpp/src/message_test.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/message_test.cpp b/proton-c/bindings/cpp/src/message_test.cpp index d5ba474..2379af7 100644 --- a/proton-c/bindings/cpp/src/message_test.cpp +++ b/proton-c/bindings/cpp/src/message_test.cpp @@ -45,7 +45,7 @@ void test_message_properties() { ASSERT_EQUAL("hello", s); CHECK_MESSAGE_ID(id); - CHECK_STR(user_id); + CHECK_STR(user); CHECK_STR(to); CHECK_STR(subject); CHECK_STR(reply_to); @@ -62,7 +62,7 @@ void test_message_properties() { message m2(m); ASSERT_EQUAL("hello", get<std::string>(m2.body())); ASSERT_EQUAL(message_id("id"), m2.id()); - ASSERT_EQUAL("user_id", m2.user_id()); + ASSERT_EQUAL("user", m2.user()); ASSERT_EQUAL("to", m2.to()); ASSERT_EQUAL("subject", m2.subject()); ASSERT_EQUAL("reply_to", m2.reply_to()); @@ -77,7 +77,7 @@ void test_message_properties() { m2 = m; ASSERT_EQUAL("hello", get<std::string>(m2.body())); ASSERT_EQUAL(message_id("id"), m2.id()); - ASSERT_EQUAL("user_id", m2.user_id()); + ASSERT_EQUAL("user", m2.user()); ASSERT_EQUAL("to", m2.to()); ASSERT_EQUAL("subject", m2.subject()); ASSERT_EQUAL("reply_to", m2.reply_to()); http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/proton-c/bindings/cpp/src/scalar_base.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/scalar_base.cpp b/proton-c/bindings/cpp/src/scalar_base.cpp index 180c40c..c7f97e8 100644 --- a/proton-c/bindings/cpp/src/scalar_base.cpp +++ b/proton-c/bindings/cpp/src/scalar_base.cpp @@ -31,6 +31,7 @@ #include <ostream> namespace proton { +namespace internal { scalar_base::scalar_base() { atom_.type = PN_NULL; } scalar_base::scalar_base(const pn_atom_t& a) { set(a); } @@ -108,14 +109,6 @@ void scalar_base::get_(symbol& x) const { ok(PN_SYMBOL); x = symbol(bytes_.begin void scalar_base::get_(binary& x) const { ok(PN_BINARY); x = bytes_; } void scalar_base::get_(null&) const { ok(PN_NULL); } -int64_t scalar_base::as_int() const { return internal::coerce<int64_t>(*this); } - -uint64_t scalar_base::as_uint() const { return internal::coerce<uint64_t>(*this); } - -double scalar_base::as_double() const { return internal::coerce<double>(*this); } - -std::string scalar_base::as_string() const { return internal::coerce<std::string>(*this); } - namespace { struct equal_op { @@ -155,4 +148,4 @@ std::ostream& operator<<(std::ostream& o, const scalar_base& s) { return internal::visit<std::ostream&>(s, ostream_op(o)); } -} // namespace proton +}} // namespaces http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/proton-c/bindings/cpp/src/scalar_test.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/scalar_test.cpp b/proton-c/bindings/cpp/src/scalar_test.cpp index 4183af3..f306ba8 100644 --- a/proton-c/bindings/cpp/src/scalar_test.cpp +++ b/proton-c/bindings/cpp/src/scalar_test.cpp @@ -72,23 +72,23 @@ void coerce_test() { a = binary("foo"); ASSERT_MISMATCH(a.get<int16_t>(), SHORT, BINARY); - ASSERT_MISMATCH(a.as_int(), LONG, BINARY); - ASSERT_MISMATCH(a.as_double(), DOUBLE, BINARY); + ASSERT_MISMATCH(coerce<int64_t>(a), LONG, BINARY); + ASSERT_MISMATCH(coerce<double>(a), DOUBLE, BINARY); ASSERT_MISMATCH(a.get<std::string>(), STRING, BINARY); // No strict conversion - ASSERT_EQUAL(a.as_string(), std::string("foo")); // OK string-like conversion + ASSERT_EQUAL(coerce<std::string>(a), std::string("foo")); // OK string-like conversion a = int16_t(42); ASSERT_MISMATCH(a.get<std::string>(), STRING, SHORT); ASSERT_MISMATCH(a.get<timestamp>(), TIMESTAMP, SHORT); - ASSERT_MISMATCH(a.as_string(), STRING, SHORT); - ASSERT_EQUAL(a.as_int(), 42); - ASSERT_EQUAL(a.as_uint(), 42u); - ASSERT_EQUAL(a.as_double(), 42); + ASSERT_MISMATCH(coerce<std::string>(a), STRING, SHORT); + ASSERT_EQUAL(coerce<int64_t>(a), 42); + ASSERT_EQUAL(coerce<uint64_t>(a), 42u); + ASSERT_EQUAL(coerce<double>(a), 42); a = int16_t(-42); - ASSERT_EQUAL(a.as_int(), -42); - ASSERT_EQUAL(a.as_uint(), uint64_t(-42)); - ASSERT_EQUAL(a.as_double(), -42); + ASSERT_EQUAL(coerce<int64_t>(a), -42); + ASSERT_EQUAL(coerce<uint64_t>(a), uint64_t(-42)); + ASSERT_EQUAL(coerce<double>(a), -42); } void encode_decode_test() { @@ -102,20 +102,20 @@ void encode_decode_test() { } void message_id_test() { - ASSERT_EQUAL(23, message_id(23).as_int()); + ASSERT_EQUAL(23, coerce<int64_t>(message_id(23))); ASSERT_EQUAL(23u, message_id(23).get<uint64_t>()); ASSERT(message_id("foo") != message_id(binary("foo"))); ASSERT_EQUAL(scalar("foo"), message_id("foo")); - ASSERT_EQUAL("foo", message_id("foo").as_string()); + ASSERT_EQUAL("foo", coerce<std::string>(message_id("foo"))); ASSERT(message_id("a") < message_id("z")); uuid r = uuid::random(); ASSERT_EQUAL(r, message_id(r).get<uuid>()); } void annotation_key_test() { - ASSERT_EQUAL(23, annotation_key(23).as_int()); + ASSERT_EQUAL(23, coerce<int64_t>(annotation_key(23))); ASSERT_EQUAL(23u, annotation_key(23).get<uint64_t>()); - ASSERT_EQUAL("foo", annotation_key("foo").as_string()); + ASSERT_EQUAL("foo", coerce<std::string>(annotation_key("foo"))); ASSERT_EQUAL(scalar(symbol("foo")), annotation_key("foo")); } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6ac7bd29/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 7019dfd..ca229b9 100644 --- a/proton-c/bindings/cpp/src/value.cpp +++ b/proton-c/bindings/cpp/src/value.cpp @@ -52,6 +52,8 @@ void swap(value& x, value& y) { std::swap(x.data_, y.data_); } void value::clear() { if (!!data_) data_.clear(); } +namespace internal { + type_id value_base::type() const { return (!data_ || data_.empty()) ? NULL_TYPE : codec::decoder(*this).next_type(); } @@ -65,6 +67,8 @@ codec::data& value_base::data() const { return data_; } +} + namespace { // Compare nodes, return -1 if a<b, 0 if a==b, +1 if a>b @@ -167,10 +171,11 @@ bool operator<(const value& x, const value& y) { return compare(x, y) < 0; } -std::ostream& operator<<(std::ostream& o, const value_base& x) { +namespace internal { +std::ostream& operator<<(std::ostream& o, const internal::value_base& x) { if (x.empty()) return o << "<null>"; - decoder d(x); + proton::decoder d(x); // Print std::string and proton::foo types using their own operator << consistent with C++. switch (d.next_type()) { case STRING: return o << get<std::string>(d); @@ -185,5 +190,6 @@ std::ostream& operator<<(std::ostream& o, const value_base& x) { return o << d; } } +} } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
