From c2b13417889ca05c880736e49bba91fb1ba4bd5d Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Mon, 29 Mar 2010 16:00:24 +0000 Subject: QPID-664: move Variant and Uuid from messaging to types namespace git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@928814 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/examples/messaging/drain.cpp | 1 + cpp/examples/messaging/map_receiver.cpp | 1 + cpp/examples/messaging/map_sender.cpp | 1 + cpp/examples/messaging/server.cpp | 1 - cpp/examples/messaging/spout.cpp | 3 +- cpp/examples/messaging/topic_receiver.cpp | 1 - cpp/include/qpid/client/amqp0_10/Codecs.h | 8 +- cpp/include/qpid/messaging/Address.h | 12 +- cpp/include/qpid/messaging/Codec.h | 8 +- cpp/include/qpid/messaging/Connection.h | 6 +- cpp/include/qpid/messaging/ListContent.h | 32 +- cpp/include/qpid/messaging/ListView.h | 12 +- cpp/include/qpid/messaging/MapContent.h | 22 +- cpp/include/qpid/messaging/MapView.h | 12 +- cpp/include/qpid/messaging/Message.h | 6 +- cpp/include/qpid/messaging/Uuid.h | 94 --- cpp/include/qpid/messaging/Variant.h | 174 ------ cpp/include/qpid/types/Uuid.h | 94 +++ cpp/include/qpid/types/Variant.h | 174 ++++++ cpp/src/CMakeLists.txt | 4 +- cpp/src/Makefile.am | 8 +- cpp/src/qpid/client/amqp0_10/AddressResolution.cpp | 8 +- cpp/src/qpid/client/amqp0_10/AddressResolution.h | 1 - cpp/src/qpid/client/amqp0_10/Codecs.cpp | 7 +- cpp/src/qpid/client/amqp0_10/CodecsInternal.h | 6 +- cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp | 5 +- cpp/src/qpid/client/amqp0_10/ConnectionImpl.h | 8 +- cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp | 4 +- cpp/src/qpid/client/amqp0_10/ReceiverImpl.h | 1 - cpp/src/qpid/client/amqp0_10/SenderImpl.h | 1 - cpp/src/qpid/client/amqp0_10/SessionImpl.cpp | 1 - cpp/src/qpid/client/amqp0_10/SessionImpl.h | 1 - cpp/src/qpid/messaging/Address.cpp | 2 + cpp/src/qpid/messaging/AddressParser.cpp | 2 + cpp/src/qpid/messaging/AddressParser.h | 20 +- cpp/src/qpid/messaging/Connection.cpp | 2 + cpp/src/qpid/messaging/ConnectionImpl.h | 8 +- cpp/src/qpid/messaging/ListContent.cpp | 2 + cpp/src/qpid/messaging/ListView.cpp | 2 + cpp/src/qpid/messaging/MapContent.cpp | 2 + cpp/src/qpid/messaging/MapView.cpp | 2 + cpp/src/qpid/messaging/Message.cpp | 2 + cpp/src/qpid/messaging/MessageImpl.cpp | 2 + cpp/src/qpid/messaging/MessageImpl.h | 8 +- cpp/src/qpid/messaging/Uuid.cpp | 140 ----- cpp/src/qpid/messaging/Variant.cpp | 690 --------------------- cpp/src/qpid/types/Uuid.cpp | 140 +++++ cpp/src/qpid/types/Variant.cpp | 690 +++++++++++++++++++++ cpp/src/tests/Address.cpp | 3 +- cpp/src/tests/MessagingSessionTests.cpp | 1 + cpp/src/tests/Uuid.cpp | 16 +- cpp/src/tests/Variant.cpp | 4 +- cpp/src/tests/qpid_recv.cpp | 1 + cpp/src/tests/qpid_send.cpp | 1 + cpp/src/tests/qpid_stream.cpp | 1 + 55 files changed, 1243 insertions(+), 1215 deletions(-) delete mode 100644 cpp/include/qpid/messaging/Uuid.h delete mode 100644 cpp/include/qpid/messaging/Variant.h create mode 100644 cpp/include/qpid/types/Uuid.h create mode 100644 cpp/include/qpid/types/Variant.h delete mode 100644 cpp/src/qpid/messaging/Uuid.cpp delete mode 100644 cpp/src/qpid/messaging/Variant.cpp create mode 100644 cpp/src/qpid/types/Uuid.cpp create mode 100644 cpp/src/qpid/types/Variant.cpp (limited to 'cpp') diff --git a/cpp/examples/messaging/drain.cpp b/cpp/examples/messaging/drain.cpp index 38f6bdbb98..807b361aaf 100644 --- a/cpp/examples/messaging/drain.cpp +++ b/cpp/examples/messaging/drain.cpp @@ -32,6 +32,7 @@ #include using namespace qpid::messaging; +using namespace qpid::types; struct Options : public qpid::Options { diff --git a/cpp/examples/messaging/map_receiver.cpp b/cpp/examples/messaging/map_receiver.cpp index cdbae6007e..cdbb931299 100644 --- a/cpp/examples/messaging/map_receiver.cpp +++ b/cpp/examples/messaging/map_receiver.cpp @@ -31,6 +31,7 @@ #include using namespace qpid::messaging; +using namespace qpid::types; using std::stringstream; using std::string; diff --git a/cpp/examples/messaging/map_sender.cpp b/cpp/examples/messaging/map_sender.cpp index 037bb55201..dec918e836 100644 --- a/cpp/examples/messaging/map_sender.cpp +++ b/cpp/examples/messaging/map_sender.cpp @@ -31,6 +31,7 @@ #include using namespace qpid::messaging; +using namespace qpid::types; using std::stringstream; using std::string; diff --git a/cpp/examples/messaging/server.cpp b/cpp/examples/messaging/server.cpp index 046a209e2f..837e5b7103 100644 --- a/cpp/examples/messaging/server.cpp +++ b/cpp/examples/messaging/server.cpp @@ -25,7 +25,6 @@ #include #include #include -#include #include #include diff --git a/cpp/examples/messaging/spout.cpp b/cpp/examples/messaging/spout.cpp index 4819c6bc00..e9a6987f5c 100644 --- a/cpp/examples/messaging/spout.cpp +++ b/cpp/examples/messaging/spout.cpp @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include #include #include @@ -38,6 +38,7 @@ #include using namespace qpid::messaging; +using namespace qpid::types; using qpid::sys::AbsTime; using qpid::sys::now; using qpid::sys::TIME_INFINITE; diff --git a/cpp/examples/messaging/topic_receiver.cpp b/cpp/examples/messaging/topic_receiver.cpp index 9e0264a4c3..54a7e82dfc 100644 --- a/cpp/examples/messaging/topic_receiver.cpp +++ b/cpp/examples/messaging/topic_receiver.cpp @@ -23,7 +23,6 @@ #include #include #include -#include #include #include diff --git a/cpp/include/qpid/client/amqp0_10/Codecs.h b/cpp/include/qpid/client/amqp0_10/Codecs.h index 5ef0b9fffe..097cf5877f 100644 --- a/cpp/include/qpid/client/amqp0_10/Codecs.h +++ b/cpp/include/qpid/client/amqp0_10/Codecs.h @@ -35,8 +35,8 @@ namespace amqp0_10 { class MapCodec : public qpid::messaging::Codec { public: - void encode(const qpid::messaging::Variant&, std::string&); - void decode(const std::string&, qpid::messaging::Variant&); + void encode(const qpid::types::Variant&, std::string&); + void decode(const std::string&, qpid::types::Variant&); static const std::string contentType; private: @@ -49,8 +49,8 @@ class MapCodec : public qpid::messaging::Codec class ListCodec : public qpid::messaging::Codec { public: - void encode(const qpid::messaging::Variant&, std::string&); - void decode(const std::string&, qpid::messaging::Variant&); + void encode(const qpid::types::Variant&, std::string&); + void decode(const std::string&, qpid::types::Variant&); static const std::string contentType; private: diff --git a/cpp/include/qpid/messaging/Address.h b/cpp/include/qpid/messaging/Address.h index fd790a613c..307e0cfa8d 100644 --- a/cpp/include/qpid/messaging/Address.h +++ b/cpp/include/qpid/messaging/Address.h @@ -23,7 +23,7 @@ */ #include #include "qpid/Exception.h" -#include "qpid/messaging/Variant.h" +#include "qpid/types/Variant.h" #include "qpid/messaging/ImportExport.h" #include @@ -124,7 +124,7 @@ class Address QPID_CLIENT_EXTERN Address(); QPID_CLIENT_EXTERN Address(const std::string& address); QPID_CLIENT_EXTERN Address(const std::string& name, const std::string& subject, - const Variant::Map& options, const std::string& type = ""); + const qpid::types::Variant::Map& options, const std::string& type = ""); QPID_CLIENT_EXTERN Address(const Address& address); QPID_CLIENT_EXTERN ~Address(); QPID_CLIENT_EXTERN Address& operator=(const Address&); @@ -133,14 +133,14 @@ class Address QPID_CLIENT_EXTERN const std::string& getSubject() const; QPID_CLIENT_EXTERN void setSubject(const std::string&); QPID_CLIENT_EXTERN bool hasSubject() const; - QPID_CLIENT_EXTERN const Variant::Map& getOptions() const; - QPID_CLIENT_EXTERN Variant::Map& getOptions(); - QPID_CLIENT_EXTERN void setOptions(const Variant::Map&); + QPID_CLIENT_EXTERN const qpid::types::Variant::Map& getOptions() const; + QPID_CLIENT_EXTERN qpid::types::Variant::Map& getOptions(); + QPID_CLIENT_EXTERN void setOptions(const qpid::types::Variant::Map&); QPID_CLIENT_EXTERN std::string getType() const; QPID_CLIENT_EXTERN void setType(const std::string&); - QPID_CLIENT_EXTERN const Variant& getOption(const std::string& key) const; + QPID_CLIENT_EXTERN const qpid::types::Variant& getOption(const std::string& key) const; QPID_CLIENT_EXTERN std::string toStr() const; QPID_CLIENT_EXTERN operator bool() const; diff --git a/cpp/include/qpid/messaging/Codec.h b/cpp/include/qpid/messaging/Codec.h index b9b1cc862a..a69baa5af1 100644 --- a/cpp/include/qpid/messaging/Codec.h +++ b/cpp/include/qpid/messaging/Codec.h @@ -25,9 +25,11 @@ #include "qpid/messaging/ImportExport.h" namespace qpid { +namespace types{ +class Variant; +} namespace messaging { -class Variant; /** * */ @@ -35,8 +37,8 @@ class Codec { public: QPID_CLIENT_EXTERN virtual ~Codec() {} - virtual void encode(const Variant&, std::string&) = 0; - virtual void decode(const std::string&, Variant&) = 0; + virtual void encode(const qpid::types::Variant&, std::string&) = 0; + virtual void decode(const std::string&, qpid::types::Variant&) = 0; private: }; }} // namespace qpid::messaging diff --git a/cpp/include/qpid/messaging/Connection.h b/cpp/include/qpid/messaging/Connection.h index b5eeeb2980..24fb9650d8 100644 --- a/cpp/include/qpid/messaging/Connection.h +++ b/cpp/include/qpid/messaging/Connection.h @@ -24,7 +24,7 @@ #include #include "qpid/messaging/ImportExport.h" #include "qpid/messaging/Handle.h" -#include "qpid/messaging/Variant.h" +#include "qpid/types/Variant.h" namespace qpid { namespace messaging { @@ -74,11 +74,11 @@ class Connection : public qpid::messaging::Handle * doubled every failure until the value of max-retry-interval * is reached. */ - QPID_CLIENT_EXTERN Connection(const Variant::Map& options = Variant::Map()); + QPID_CLIENT_EXTERN Connection(const qpid::types::Variant::Map& options = qpid::types::Variant::Map()); QPID_CLIENT_EXTERN Connection(const std::string& options); QPID_CLIENT_EXTERN ~Connection(); QPID_CLIENT_EXTERN Connection& operator=(const Connection&); - QPID_CLIENT_EXTERN void setOption(const std::string& name, const Variant& value); + QPID_CLIENT_EXTERN void setOption(const std::string& name, const qpid::types::Variant& value); QPID_CLIENT_EXTERN void open(const std::string& url); /** * Closes a connection and all sessions associated with it. An diff --git a/cpp/include/qpid/messaging/ListContent.h b/cpp/include/qpid/messaging/ListContent.h index 3db8a8eac6..1e7d34af54 100644 --- a/cpp/include/qpid/messaging/ListContent.h +++ b/cpp/include/qpid/messaging/ListContent.h @@ -22,7 +22,7 @@ * */ #include "qpid/messaging/ImportExport.h" -#include "Variant.h" +#include "qpid/types/Variant.h" namespace qpid { namespace messaging { @@ -36,13 +36,13 @@ class Message; class ListContent { public: - typedef Variant::List::iterator iterator; - typedef Variant::List::reverse_iterator reverse_iterator; - typedef Variant::List::const_iterator const_iterator; - typedef Variant::List::const_reverse_iterator const_reverse_iterator; + typedef qpid::types::Variant::List::iterator iterator; + typedef qpid::types::Variant::List::reverse_iterator reverse_iterator; + typedef qpid::types::Variant::List::const_iterator const_iterator; + typedef qpid::types::Variant::List::const_reverse_iterator const_reverse_iterator; QPID_CLIENT_EXTERN ListContent(Message&); - QPID_CLIENT_EXTERN ListContent(Message&, const Variant::List&); + QPID_CLIENT_EXTERN ListContent(Message&, const qpid::types::Variant::List&); QPID_CLIENT_EXTERN ~ListContent(); QPID_CLIENT_EXTERN const_iterator begin() const; @@ -57,27 +57,27 @@ class ListContent QPID_CLIENT_EXTERN bool empty() const; QPID_CLIENT_EXTERN size_t size() const; - QPID_CLIENT_EXTERN const Variant& front() const; - QPID_CLIENT_EXTERN Variant& front(); - QPID_CLIENT_EXTERN const Variant& back() const; - QPID_CLIENT_EXTERN Variant& back(); + QPID_CLIENT_EXTERN const qpid::types::Variant& front() const; + QPID_CLIENT_EXTERN qpid::types::Variant& front(); + QPID_CLIENT_EXTERN const qpid::types::Variant& back() const; + QPID_CLIENT_EXTERN qpid::types::Variant& back(); - QPID_CLIENT_EXTERN void push_front(const Variant&); - QPID_CLIENT_EXTERN void push_back(const Variant&); + QPID_CLIENT_EXTERN void push_front(const qpid::types::Variant&); + QPID_CLIENT_EXTERN void push_back(const qpid::types::Variant&); QPID_CLIENT_EXTERN void pop_front(); QPID_CLIENT_EXTERN void pop_back(); - QPID_CLIENT_EXTERN iterator insert(iterator position, const Variant&); - QPID_CLIENT_EXTERN void insert(iterator position, size_t n, const Variant&); + QPID_CLIENT_EXTERN iterator insert(iterator position, const qpid::types::Variant&); + QPID_CLIENT_EXTERN void insert(iterator position, size_t n, const qpid::types::Variant&); QPID_CLIENT_EXTERN iterator erase(iterator position); QPID_CLIENT_EXTERN iterator erase(iterator first, iterator last); QPID_CLIENT_EXTERN void clear(); QPID_CLIENT_EXTERN void encode(); - QPID_CLIENT_EXTERN const Variant::List& asList() const; - QPID_CLIENT_EXTERN Variant::List& asList(); + QPID_CLIENT_EXTERN const qpid::types::Variant::List& asList() const; + QPID_CLIENT_EXTERN qpid::types::Variant::List& asList(); private: ListContentImpl* impl; diff --git a/cpp/include/qpid/messaging/ListView.h b/cpp/include/qpid/messaging/ListView.h index d7c3536a9c..dce82a657c 100644 --- a/cpp/include/qpid/messaging/ListView.h +++ b/cpp/include/qpid/messaging/ListView.h @@ -23,7 +23,7 @@ */ #include "qpid/messaging/ImportExport.h" -#include "Variant.h" +#include "qpid/types/Variant.h" namespace qpid { namespace messaging { @@ -37,8 +37,8 @@ class Message; class ListView { public: - typedef Variant::List::const_iterator const_iterator; - typedef Variant::List::const_reverse_iterator const_reverse_iterator; + typedef qpid::types::Variant::List::const_iterator const_iterator; + typedef qpid::types::Variant::List::const_reverse_iterator const_reverse_iterator; QPID_CLIENT_EXTERN ListView(const Message&); QPID_CLIENT_EXTERN ~ListView(); @@ -52,10 +52,10 @@ class ListView QPID_CLIENT_EXTERN bool empty() const; QPID_CLIENT_EXTERN size_t size() const; - QPID_CLIENT_EXTERN const Variant& front() const; - QPID_CLIENT_EXTERN const Variant& back() const; + QPID_CLIENT_EXTERN const qpid::types::Variant& front() const; + QPID_CLIENT_EXTERN const qpid::types::Variant& back() const; - QPID_CLIENT_EXTERN const Variant::List& asList() const; + QPID_CLIENT_EXTERN const qpid::types::Variant::List& asList() const; private: ListViewImpl* impl; }; diff --git a/cpp/include/qpid/messaging/MapContent.h b/cpp/include/qpid/messaging/MapContent.h index 78ef51e593..863eaed786 100644 --- a/cpp/include/qpid/messaging/MapContent.h +++ b/cpp/include/qpid/messaging/MapContent.h @@ -23,7 +23,7 @@ */ #include "qpid/messaging/ImportExport.h" -#include "Variant.h" +#include "qpid/types/Variant.h" #include #include @@ -40,14 +40,14 @@ class MapContent { public: typedef std::string key_type; - typedef std::pair value_type; - typedef std::map::const_iterator const_iterator; - typedef std::map::iterator iterator; - typedef std::map::const_reverse_iterator const_reverse_iterator; - typedef std::map::reverse_iterator reverse_iterator; + typedef std::pair value_type; + typedef std::map::const_iterator const_iterator; + typedef std::map::iterator iterator; + typedef std::map::const_reverse_iterator const_reverse_iterator; + typedef std::map::reverse_iterator reverse_iterator; QPID_CLIENT_EXTERN MapContent(Message&); - QPID_CLIENT_EXTERN MapContent(Message&, const Variant::Map&); + QPID_CLIENT_EXTERN MapContent(Message&, const qpid::types::Variant::Map&); QPID_CLIENT_EXTERN ~MapContent(); QPID_CLIENT_EXTERN const_iterator begin() const; @@ -64,8 +64,8 @@ class MapContent QPID_CLIENT_EXTERN const_iterator find(const key_type&) const; QPID_CLIENT_EXTERN iterator find(const key_type&); - QPID_CLIENT_EXTERN const Variant& operator[](const key_type&) const; - QPID_CLIENT_EXTERN Variant& operator[](const key_type&); + QPID_CLIENT_EXTERN const qpid::types::Variant& operator[](const key_type&) const; + QPID_CLIENT_EXTERN qpid::types::Variant& operator[](const key_type&); QPID_CLIENT_EXTERN std::pair insert(const value_type&); QPID_CLIENT_EXTERN iterator insert(iterator position, const value_type&); @@ -76,8 +76,8 @@ class MapContent QPID_CLIENT_EXTERN void encode(); - QPID_CLIENT_EXTERN const std::map& asMap() const; - QPID_CLIENT_EXTERN std::map& asMap(); + QPID_CLIENT_EXTERN const std::map& asMap() const; + QPID_CLIENT_EXTERN std::map& asMap(); private: MapContentImpl* impl; diff --git a/cpp/include/qpid/messaging/MapView.h b/cpp/include/qpid/messaging/MapView.h index baa999b4ad..e359a9d929 100644 --- a/cpp/include/qpid/messaging/MapView.h +++ b/cpp/include/qpid/messaging/MapView.h @@ -22,7 +22,7 @@ * */ #include "qpid/messaging/ImportExport.h" -#include "Variant.h" +#include "qpid/types/Variant.h" #include #include @@ -39,9 +39,9 @@ class MapView { public: typedef std::string key_type; - typedef std::pair value_type; - typedef std::map::const_iterator const_iterator; - typedef std::map::const_reverse_iterator const_reverse_iterator; + typedef std::pair value_type; + typedef std::map::const_iterator const_iterator; + typedef std::map::const_reverse_iterator const_reverse_iterator; QPID_CLIENT_EXTERN MapView(const Message&); QPID_CLIENT_EXTERN ~MapView(); @@ -56,9 +56,9 @@ class MapView QPID_CLIENT_EXTERN size_t size() const; QPID_CLIENT_EXTERN const_iterator find(const key_type&) const; - QPID_CLIENT_EXTERN const Variant& operator[](const key_type&) const; + QPID_CLIENT_EXTERN const qpid::types::Variant& operator[](const key_type&) const; - QPID_CLIENT_EXTERN const std::map& asMap() const; + QPID_CLIENT_EXTERN const std::map& asMap() const; private: MapViewImpl* impl; }; diff --git a/cpp/include/qpid/messaging/Message.h b/cpp/include/qpid/messaging/Message.h index 21404d482b..04923ee03b 100644 --- a/cpp/include/qpid/messaging/Message.h +++ b/cpp/include/qpid/messaging/Message.h @@ -24,7 +24,7 @@ #include #include "qpid/messaging/Duration.h" -#include "qpid/messaging/Variant.h" +#include "qpid/types/Variant.h" #include "qpid/messaging/ImportExport.h" namespace qpid { @@ -79,8 +79,8 @@ class Message QPID_CLIENT_EXTERN bool isRedelivered() const; - QPID_CLIENT_EXTERN const Variant::Map& getHeaders() const; - QPID_CLIENT_EXTERN Variant::Map& getHeaders(); + QPID_CLIENT_EXTERN const qpid::types::Variant::Map& getHeaders() const; + QPID_CLIENT_EXTERN qpid::types::Variant::Map& getHeaders(); QPID_CLIENT_EXTERN const std::string& getContent() const; QPID_CLIENT_EXTERN std::string& getContent(); diff --git a/cpp/include/qpid/messaging/Uuid.h b/cpp/include/qpid/messaging/Uuid.h deleted file mode 100644 index d83f8495b7..0000000000 --- a/cpp/include/qpid/messaging/Uuid.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef QPID_MESSAGING_UUID_H -#define QPID_MESSAGING_UUID_H - -/* - * - * 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 "qpid/messaging/ImportExport.h" -#include -#include - -namespace qpid { -namespace messaging { - -class Uuid -{ - public: - static const size_t SIZE; - /** - * If unique is true, this will generate a new unique uuid, if not - * it will construct a null uuid. - */ - QPID_CLIENT_EXTERN Uuid(bool unique=false); - QPID_CLIENT_EXTERN Uuid(const Uuid&); - QPID_CLIENT_EXTERN Uuid& operator=(const Uuid&); - /** Copy the UUID from data16, which must point to a 16-byte UUID */ - QPID_CLIENT_EXTERN Uuid(const unsigned char* data16); - - /** Set to a new unique identifier. */ - QPID_CLIENT_EXTERN void generate(); - - /** Set to all zeros. */ - QPID_CLIENT_EXTERN void clear(); - - /** Test for null (all zeros). */ - QPID_CLIENT_EXTERN bool isNull() const; - QPID_CLIENT_EXTERN operator bool() const; - QPID_CLIENT_EXTERN bool operator!() const; - - /** String value in format 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb. */ - QPID_CLIENT_EXTERN std::string str() const; - - QPID_CLIENT_EXTERN size_t size() const; - QPID_CLIENT_EXTERN const unsigned char* data() const; - - friend QPID_CLIENT_EXTERN bool operator==(const Uuid&, const Uuid&); - friend QPID_CLIENT_EXTERN bool operator!=(const Uuid&, const Uuid&); - friend QPID_CLIENT_EXTERN bool operator<(const Uuid&, const Uuid&); - friend QPID_CLIENT_EXTERN bool operator>(const Uuid&, const Uuid&); - friend QPID_CLIENT_EXTERN bool operator<=(const Uuid&, const Uuid&); - friend QPID_CLIENT_EXTERN bool operator>=(const Uuid&, const Uuid&); - friend QPID_CLIENT_EXTERN std::ostream& operator<<(std::ostream&, Uuid); - friend QPID_CLIENT_EXTERN std::istream& operator>>(std::istream&, Uuid&); - - private: - unsigned char bytes[16]; -}; - -/** Returns true if the uuids are equal, false otherwise. **/ -QPID_CLIENT_EXTERN bool operator==(const Uuid&, const Uuid&); -/** Returns true if the uuids are NOT equal, false if they are. **/ -QPID_CLIENT_EXTERN bool operator!=(const Uuid&, const Uuid&); - -QPID_CLIENT_EXTERN bool operator<(const Uuid&, const Uuid&); -QPID_CLIENT_EXTERN bool operator>(const Uuid&, const Uuid&); -QPID_CLIENT_EXTERN bool operator<=(const Uuid&, const Uuid&); -QPID_CLIENT_EXTERN bool operator>=(const Uuid&, const Uuid&); - -/** Print in format 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb. */ -QPID_CLIENT_EXTERN std::ostream& operator<<(std::ostream&, Uuid); - -/** Read from format 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb. */ -QPID_CLIENT_EXTERN std::istream& operator>>(std::istream&, Uuid&); - -}} // namespace qpid::messaging - -#endif /*!QPID_MESSAGING_UUID_H*/ diff --git a/cpp/include/qpid/messaging/Variant.h b/cpp/include/qpid/messaging/Variant.h deleted file mode 100644 index 51c6bd98fe..0000000000 --- a/cpp/include/qpid/messaging/Variant.h +++ /dev/null @@ -1,174 +0,0 @@ -#ifndef QPID_MESSAGING_VARIANT_H -#define QPID_MESSAGING_VARIANT_H - -/* - * - * 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 -#include -#include -#include -#include "Uuid.h" -#include "qpid/Exception.h" -#include "qpid/sys/IntegerTypes.h" -#include "qpid/messaging/ImportExport.h" - -namespace qpid { -namespace messaging { - -/** - * Thrown when an illegal conversion of a variant is attempted. - */ -struct InvalidConversion : public qpid::Exception -{ - InvalidConversion(const std::string& msg); -}; - -enum VariantType { - VAR_VOID = 0, - VAR_BOOL, - VAR_UINT8, - VAR_UINT16, - VAR_UINT32, - VAR_UINT64, - VAR_INT8, - VAR_INT16, - VAR_INT32, - VAR_INT64, - VAR_FLOAT, - VAR_DOUBLE, - VAR_STRING, - VAR_MAP, - VAR_LIST, - VAR_UUID -}; - -class VariantImpl; - -/** - * Represents a value of variable type. - */ -class Variant -{ - public: - typedef std::map Map; - typedef std::list List; - - QPID_CLIENT_EXTERN Variant(); - QPID_CLIENT_EXTERN Variant(bool); - QPID_CLIENT_EXTERN Variant(uint8_t); - QPID_CLIENT_EXTERN Variant(uint16_t); - QPID_CLIENT_EXTERN Variant(uint32_t); - QPID_CLIENT_EXTERN Variant(uint64_t); - QPID_CLIENT_EXTERN Variant(int8_t); - QPID_CLIENT_EXTERN Variant(int16_t); - QPID_CLIENT_EXTERN Variant(int32_t); - QPID_CLIENT_EXTERN Variant(int64_t); - QPID_CLIENT_EXTERN Variant(float); - QPID_CLIENT_EXTERN Variant(double); - QPID_CLIENT_EXTERN Variant(const std::string&); - QPID_CLIENT_EXTERN Variant(const char*); - QPID_CLIENT_EXTERN Variant(const Map&); - QPID_CLIENT_EXTERN Variant(const List&); - QPID_CLIENT_EXTERN Variant(const Variant&); - QPID_CLIENT_EXTERN Variant(const Uuid&); - - QPID_CLIENT_EXTERN ~Variant(); - - QPID_CLIENT_EXTERN VariantType getType() const; - QPID_CLIENT_EXTERN bool isVoid() const; - - QPID_CLIENT_EXTERN Variant& operator=(bool); - QPID_CLIENT_EXTERN Variant& operator=(uint8_t); - QPID_CLIENT_EXTERN Variant& operator=(uint16_t); - QPID_CLIENT_EXTERN Variant& operator=(uint32_t); - QPID_CLIENT_EXTERN Variant& operator=(uint64_t); - QPID_CLIENT_EXTERN Variant& operator=(int8_t); - QPID_CLIENT_EXTERN Variant& operator=(int16_t); - QPID_CLIENT_EXTERN Variant& operator=(int32_t); - QPID_CLIENT_EXTERN Variant& operator=(int64_t); - QPID_CLIENT_EXTERN Variant& operator=(float); - QPID_CLIENT_EXTERN Variant& operator=(double); - QPID_CLIENT_EXTERN Variant& operator=(const std::string&); - QPID_CLIENT_EXTERN Variant& operator=(const char*); - QPID_CLIENT_EXTERN Variant& operator=(const Map&); - QPID_CLIENT_EXTERN Variant& operator=(const List&); - QPID_CLIENT_EXTERN Variant& operator=(const Variant&); - QPID_CLIENT_EXTERN Variant& operator=(const Uuid&); - - QPID_CLIENT_EXTERN bool asBool() const; - QPID_CLIENT_EXTERN uint8_t asUint8() const; - QPID_CLIENT_EXTERN uint16_t asUint16() const; - QPID_CLIENT_EXTERN uint32_t asUint32() const; - QPID_CLIENT_EXTERN uint64_t asUint64() const; - QPID_CLIENT_EXTERN int8_t asInt8() const; - QPID_CLIENT_EXTERN int16_t asInt16() const; - QPID_CLIENT_EXTERN int32_t asInt32() const; - QPID_CLIENT_EXTERN int64_t asInt64() const; - QPID_CLIENT_EXTERN float asFloat() const; - QPID_CLIENT_EXTERN double asDouble() const; - QPID_CLIENT_EXTERN std::string asString() const; - QPID_CLIENT_EXTERN Uuid asUuid() const; - - QPID_CLIENT_EXTERN operator bool() const; - QPID_CLIENT_EXTERN operator uint8_t() const; - QPID_CLIENT_EXTERN operator uint16_t() const; - QPID_CLIENT_EXTERN operator uint32_t() const; - QPID_CLIENT_EXTERN operator uint64_t() const; - QPID_CLIENT_EXTERN operator int8_t() const; - QPID_CLIENT_EXTERN operator int16_t() const; - QPID_CLIENT_EXTERN operator int32_t() const; - QPID_CLIENT_EXTERN operator int64_t() const; - QPID_CLIENT_EXTERN operator float() const; - QPID_CLIENT_EXTERN operator double() const; - QPID_CLIENT_EXTERN operator const char*() const; - QPID_CLIENT_EXTERN operator Uuid() const; - - QPID_CLIENT_EXTERN const Map& asMap() const; - QPID_CLIENT_EXTERN Map& asMap(); - QPID_CLIENT_EXTERN const List& asList() const; - QPID_CLIENT_EXTERN List& asList(); - /** - * Unlike asString(), getString() will not do any conversions and - * will throw InvalidConversion if the type is not STRING. - */ - QPID_CLIENT_EXTERN const std::string& getString() const; - QPID_CLIENT_EXTERN std::string& getString(); - - QPID_CLIENT_EXTERN void setEncoding(const std::string&); - QPID_CLIENT_EXTERN const std::string& getEncoding() const; - - QPID_CLIENT_EXTERN bool isEqualTo(const Variant& a) const; - - QPID_CLIENT_EXTERN void reset(); - private: - VariantImpl* impl; -}; - -QPID_CLIENT_EXTERN std::ostream& operator<<(std::ostream& out, const Variant& value); -QPID_CLIENT_EXTERN std::ostream& operator<<(std::ostream& out, const Variant::Map& map); -QPID_CLIENT_EXTERN std::ostream& operator<<(std::ostream& out, const Variant::List& list); -QPID_CLIENT_EXTERN bool operator==(const Variant& a, const Variant& b); - -typedef Variant::Map VariantMap; - -}} // namespace qpid::messaging - -#endif /*!QPID_MESSAGING_VARIANT_H*/ diff --git a/cpp/include/qpid/types/Uuid.h b/cpp/include/qpid/types/Uuid.h new file mode 100644 index 0000000000..41042a0731 --- /dev/null +++ b/cpp/include/qpid/types/Uuid.h @@ -0,0 +1,94 @@ +#ifndef QPID_TYPES_UUID_H +#define QPID_TYPES_UUID_H + +/* + * + * 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 "qpid/CommonImportExport.h" +#include +#include + +namespace qpid { +namespace types { + +class Uuid +{ + public: + static const size_t SIZE; + /** + * If unique is true, this will generate a new unique uuid, if not + * it will construct a null uuid. + */ + QPID_COMMON_EXTERN Uuid(bool unique=false); + QPID_COMMON_EXTERN Uuid(const Uuid&); + QPID_COMMON_EXTERN Uuid& operator=(const Uuid&); + /** Copy the UUID from data16, which must point to a 16-byte UUID */ + QPID_COMMON_EXTERN Uuid(const unsigned char* data16); + + /** Set to a new unique identifier. */ + QPID_COMMON_EXTERN void generate(); + + /** Set to all zeros. */ + QPID_COMMON_EXTERN void clear(); + + /** Test for null (all zeros). */ + QPID_COMMON_EXTERN bool isNull() const; + QPID_COMMON_EXTERN operator bool() const; + QPID_COMMON_EXTERN bool operator!() const; + + /** String value in format 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb. */ + QPID_COMMON_EXTERN std::string str() const; + + QPID_COMMON_EXTERN size_t size() const; + QPID_COMMON_EXTERN const unsigned char* data() const; + + friend QPID_COMMON_EXTERN bool operator==(const Uuid&, const Uuid&); + friend QPID_COMMON_EXTERN bool operator!=(const Uuid&, const Uuid&); + friend QPID_COMMON_EXTERN bool operator<(const Uuid&, const Uuid&); + friend QPID_COMMON_EXTERN bool operator>(const Uuid&, const Uuid&); + friend QPID_COMMON_EXTERN bool operator<=(const Uuid&, const Uuid&); + friend QPID_COMMON_EXTERN bool operator>=(const Uuid&, const Uuid&); + friend QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream&, Uuid); + friend QPID_COMMON_EXTERN std::istream& operator>>(std::istream&, Uuid&); + + private: + unsigned char bytes[16]; +}; + +/** Returns true if the uuids are equal, false otherwise. **/ +QPID_COMMON_EXTERN bool operator==(const Uuid&, const Uuid&); +/** Returns true if the uuids are NOT equal, false if they are. **/ +QPID_COMMON_EXTERN bool operator!=(const Uuid&, const Uuid&); + +QPID_COMMON_EXTERN bool operator<(const Uuid&, const Uuid&); +QPID_COMMON_EXTERN bool operator>(const Uuid&, const Uuid&); +QPID_COMMON_EXTERN bool operator<=(const Uuid&, const Uuid&); +QPID_COMMON_EXTERN bool operator>=(const Uuid&, const Uuid&); + +/** Print in format 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb. */ +QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream&, Uuid); + +/** Read from format 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb. */ +QPID_COMMON_EXTERN std::istream& operator>>(std::istream&, Uuid&); + +}} // namespace qpid::types + +#endif /*!QPID_TYPES_UUID_H*/ diff --git a/cpp/include/qpid/types/Variant.h b/cpp/include/qpid/types/Variant.h new file mode 100644 index 0000000000..f57adcd31e --- /dev/null +++ b/cpp/include/qpid/types/Variant.h @@ -0,0 +1,174 @@ +#ifndef QPID_TYPES_VARIANT_H +#define QPID_TYPES_VARIANT_H + +/* + * + * 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 +#include +#include +#include +#include "Uuid.h" +#include "qpid/Exception.h" +#include "qpid/sys/IntegerTypes.h" +#include "qpid/CommonImportExport.h" + +namespace qpid { +namespace types { + +/** + * Thrown when an illegal conversion of a variant is attempted. + */ +struct InvalidConversion : public qpid::Exception +{ + InvalidConversion(const std::string& msg); +}; + +enum VariantType { + VAR_VOID = 0, + VAR_BOOL, + VAR_UINT8, + VAR_UINT16, + VAR_UINT32, + VAR_UINT64, + VAR_INT8, + VAR_INT16, + VAR_INT32, + VAR_INT64, + VAR_FLOAT, + VAR_DOUBLE, + VAR_STRING, + VAR_MAP, + VAR_LIST, + VAR_UUID +}; + +class VariantImpl; + +/** + * Represents a value of variable type. + */ +class Variant +{ + public: + typedef std::map Map; + typedef std::list List; + + QPID_COMMON_EXTERN Variant(); + QPID_COMMON_EXTERN Variant(bool); + QPID_COMMON_EXTERN Variant(uint8_t); + QPID_COMMON_EXTERN Variant(uint16_t); + QPID_COMMON_EXTERN Variant(uint32_t); + QPID_COMMON_EXTERN Variant(uint64_t); + QPID_COMMON_EXTERN Variant(int8_t); + QPID_COMMON_EXTERN Variant(int16_t); + QPID_COMMON_EXTERN Variant(int32_t); + QPID_COMMON_EXTERN Variant(int64_t); + QPID_COMMON_EXTERN Variant(float); + QPID_COMMON_EXTERN Variant(double); + QPID_COMMON_EXTERN Variant(const std::string&); + QPID_COMMON_EXTERN Variant(const char*); + QPID_COMMON_EXTERN Variant(const Map&); + QPID_COMMON_EXTERN Variant(const List&); + QPID_COMMON_EXTERN Variant(const Variant&); + QPID_COMMON_EXTERN Variant(const Uuid&); + + QPID_COMMON_EXTERN ~Variant(); + + QPID_COMMON_EXTERN VariantType getType() const; + QPID_COMMON_EXTERN bool isVoid() const; + + QPID_COMMON_EXTERN Variant& operator=(bool); + QPID_COMMON_EXTERN Variant& operator=(uint8_t); + QPID_COMMON_EXTERN Variant& operator=(uint16_t); + QPID_COMMON_EXTERN Variant& operator=(uint32_t); + QPID_COMMON_EXTERN Variant& operator=(uint64_t); + QPID_COMMON_EXTERN Variant& operator=(int8_t); + QPID_COMMON_EXTERN Variant& operator=(int16_t); + QPID_COMMON_EXTERN Variant& operator=(int32_t); + QPID_COMMON_EXTERN Variant& operator=(int64_t); + QPID_COMMON_EXTERN Variant& operator=(float); + QPID_COMMON_EXTERN Variant& operator=(double); + QPID_COMMON_EXTERN Variant& operator=(const std::string&); + QPID_COMMON_EXTERN Variant& operator=(const char*); + QPID_COMMON_EXTERN Variant& operator=(const Map&); + QPID_COMMON_EXTERN Variant& operator=(const List&); + QPID_COMMON_EXTERN Variant& operator=(const Variant&); + QPID_COMMON_EXTERN Variant& operator=(const Uuid&); + + QPID_COMMON_EXTERN bool asBool() const; + QPID_COMMON_EXTERN uint8_t asUint8() const; + QPID_COMMON_EXTERN uint16_t asUint16() const; + QPID_COMMON_EXTERN uint32_t asUint32() const; + QPID_COMMON_EXTERN uint64_t asUint64() const; + QPID_COMMON_EXTERN int8_t asInt8() const; + QPID_COMMON_EXTERN int16_t asInt16() const; + QPID_COMMON_EXTERN int32_t asInt32() const; + QPID_COMMON_EXTERN int64_t asInt64() const; + QPID_COMMON_EXTERN float asFloat() const; + QPID_COMMON_EXTERN double asDouble() const; + QPID_COMMON_EXTERN std::string asString() const; + QPID_COMMON_EXTERN Uuid asUuid() const; + + QPID_COMMON_EXTERN operator bool() const; + QPID_COMMON_EXTERN operator uint8_t() const; + QPID_COMMON_EXTERN operator uint16_t() const; + QPID_COMMON_EXTERN operator uint32_t() const; + QPID_COMMON_EXTERN operator uint64_t() const; + QPID_COMMON_EXTERN operator int8_t() const; + QPID_COMMON_EXTERN operator int16_t() const; + QPID_COMMON_EXTERN operator int32_t() const; + QPID_COMMON_EXTERN operator int64_t() const; + QPID_COMMON_EXTERN operator float() const; + QPID_COMMON_EXTERN operator double() const; + QPID_COMMON_EXTERN operator const char*() const; + QPID_COMMON_EXTERN operator Uuid() const; + + QPID_COMMON_EXTERN const Map& asMap() const; + QPID_COMMON_EXTERN Map& asMap(); + QPID_COMMON_EXTERN const List& asList() const; + QPID_COMMON_EXTERN List& asList(); + /** + * Unlike asString(), getString() will not do any conversions and + * will throw InvalidConversion if the type is not STRING. + */ + QPID_COMMON_EXTERN const std::string& getString() const; + QPID_COMMON_EXTERN std::string& getString(); + + QPID_COMMON_EXTERN void setEncoding(const std::string&); + QPID_COMMON_EXTERN const std::string& getEncoding() const; + + QPID_COMMON_EXTERN bool isEqualTo(const Variant& a) const; + + QPID_COMMON_EXTERN void reset(); + private: + VariantImpl* impl; +}; + +QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream& out, const Variant& value); +QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream& out, const Variant::Map& map); +QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream& out, const Variant::List& list); +QPID_COMMON_EXTERN bool operator==(const Variant& a, const Variant& b); + +typedef Variant::Map VariantMap; + +}} // namespace qpid::types + +#endif /*!QPID_TYPES_VARIANT_H*/ diff --git a/cpp/src/CMakeLists.txt b/cpp/src/CMakeLists.txt index 733b4848f9..40590993eb 100644 --- a/cpp/src/CMakeLists.txt +++ b/cpp/src/CMakeLists.txt @@ -567,6 +567,8 @@ set (qpidcommon_SOURCES qpid/SessionId.cpp qpid/StringUtils.cpp qpid/Url.cpp + qpid/types/Uuid.cpp + qpid/types/Variant.cpp qpid/amqp_0_10/SessionHandler.cpp qpid/framing/AccumulatedAck.cpp qpid/framing/AMQBody.cpp @@ -690,8 +692,6 @@ set (qpidclient_SOURCES qpid/messaging/SessionImpl.h qpid/messaging/Sender.cpp qpid/messaging/SenderImpl.h - qpid/messaging/Uuid.cpp - qpid/messaging/Variant.cpp qpid/client/amqp0_10/AcceptTracker.h qpid/client/amqp0_10/AcceptTracker.cpp qpid/client/amqp0_10/AddressResolution.h diff --git a/cpp/src/Makefile.am b/cpp/src/Makefile.am index 2256ca7df0..7da7f42dcb 100644 --- a/cpp/src/Makefile.am +++ b/cpp/src/Makefile.am @@ -425,6 +425,8 @@ libqpidcommon_la_SOURCES += \ qpid/memory.h \ qpid/pointer_to_other.h \ qpid/ptr_map.h \ + qpid/types/Uuid.cpp \ + qpid/types/Variant.cpp \ qpid/sys/AggregateOutput.cpp \ qpid/sys/AggregateOutput.h \ qpid/sys/AsynchIO.h \ @@ -716,8 +718,6 @@ libqpidclient_la_SOURCES = \ qpid/messaging/Sender.cpp \ qpid/messaging/Receiver.cpp \ qpid/messaging/Session.cpp \ - qpid/messaging/Uuid.cpp \ - qpid/messaging/Variant.cpp \ qpid/messaging/ConnectionImpl.h \ qpid/messaging/SenderImpl.h \ qpid/messaging/ReceiverImpl.h \ @@ -830,8 +830,8 @@ nobase_include_HEADERS += \ ../include/qpid/messaging/Receiver.h \ ../include/qpid/messaging/Sender.h \ ../include/qpid/messaging/Session.h \ - ../include/qpid/messaging/Uuid.h \ - ../include/qpid/messaging/Variant.h \ + ../include/qpid/types/Uuid.h \ + ../include/qpid/types/Variant.h \ ../include/qpid/client/amqp0_10/Codecs.h \ ../include/qpid/client/amqp0_10/FailoverUpdates.h diff --git a/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp b/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp index 9f2d4eef78..990b2a19d8 100644 --- a/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp +++ b/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp @@ -26,7 +26,7 @@ #include "qpid/client/amqp0_10/OutgoingMessage.h" #include "qpid/messaging/Address.h" #include "qpid/messaging/Message.h" -#include "qpid/messaging/Variant.h" +#include "qpid/types/Variant.h" #include "qpid/Exception.h" #include "qpid/log/Statement.h" #include "qpid/framing/enum.h" @@ -47,13 +47,13 @@ namespace amqp0_10 { using qpid::Exception; using qpid::messaging::Address; using qpid::messaging::InvalidAddress; -using qpid::messaging::Variant; using qpid::framing::ExchangeBoundResult; using qpid::framing::ExchangeQueryResult; using qpid::framing::FieldTable; using qpid::framing::QueueQueryResult; using qpid::framing::ReplyTo; using qpid::framing::Uuid; +using namespace qpid::types; using namespace qpid::framing::message; using namespace boost::assign; @@ -278,7 +278,7 @@ const Variant& getOption(const Variant::Map& options, const std::vectorsecond.getType() != qpid::messaging::VAR_MAP) + if (j->second.getType() != VAR_MAP) throw InvalidAddress((boost::format("Expected %1% to be a map") % j->first).str()); return getOption(j->second.asMap(), path, index); } else { @@ -326,7 +326,7 @@ Opt& Opt::operator/(const std::string& name) options = 0; } else { value = &(j->second); - if (value->getType() == qpid::messaging::VAR_MAP) options = &(value->asMap()); + if (value->getType() == VAR_MAP) options = &(value->asMap()); else options = 0; } } diff --git a/cpp/src/qpid/client/amqp0_10/AddressResolution.h b/cpp/src/qpid/client/amqp0_10/AddressResolution.h index 5b81b06131..fc8f1a1d18 100644 --- a/cpp/src/qpid/client/amqp0_10/AddressResolution.h +++ b/cpp/src/qpid/client/amqp0_10/AddressResolution.h @@ -21,7 +21,6 @@ * under the License. * */ -#include "qpid/messaging/Variant.h" #include "qpid/client/Session.h" namespace qpid { diff --git a/cpp/src/qpid/client/amqp0_10/Codecs.cpp b/cpp/src/qpid/client/amqp0_10/Codecs.cpp index 3e17fc968b..ce806572e5 100644 --- a/cpp/src/qpid/client/amqp0_10/Codecs.cpp +++ b/cpp/src/qpid/client/amqp0_10/Codecs.cpp @@ -19,7 +19,7 @@ * */ #include "qpid/client/amqp0_10/Codecs.h" -#include "qpid/messaging/Variant.h" +#include "qpid/types/Variant.h" #include "qpid/framing/Array.h" #include "qpid/framing/Buffer.h" #include "qpid/framing/FieldTable.h" @@ -32,6 +32,7 @@ using namespace qpid::framing; using namespace qpid::messaging; +using namespace qpid::types; namespace qpid { namespace client { @@ -115,11 +116,11 @@ void setEncodingFor(Variant& out, uint8_t code) } } -qpid::messaging::Uuid getUuid(FieldValue& value) +qpid::types::Uuid getUuid(FieldValue& value) { unsigned char data[16]; value.getFixedWidthValue<16>(data); - return qpid::messaging::Uuid(data); + return qpid::types::Uuid(data); } Variant toVariant(boost::shared_ptr in) diff --git a/cpp/src/qpid/client/amqp0_10/CodecsInternal.h b/cpp/src/qpid/client/amqp0_10/CodecsInternal.h index b5a561a9c3..a110d80b8a 100644 --- a/cpp/src/qpid/client/amqp0_10/CodecsInternal.h +++ b/cpp/src/qpid/client/amqp0_10/CodecsInternal.h @@ -21,7 +21,7 @@ * under the License. * */ -#include "qpid/messaging/Variant.h" +#include "qpid/types/Variant.h" #include "qpid/framing/FieldTable.h" namespace qpid { @@ -33,8 +33,8 @@ namespace amqp0_10 { * Codecs.cpp but not exposed through API */ -void translate(const qpid::messaging::Variant::Map& from, qpid::framing::FieldTable& to); -void translate(const qpid::framing::FieldTable& from, qpid::messaging::Variant::Map& to); +void translate(const qpid::types::Variant::Map& from, qpid::framing::FieldTable& to); +void translate(const qpid::framing::FieldTable& from, qpid::types::Variant::Map& to); }}} // namespace qpid::client::amqp0_10 diff --git a/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp b/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp index ce4e1ecc2a..ee044aaf2b 100644 --- a/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp +++ b/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp @@ -32,7 +32,8 @@ namespace qpid { namespace client { namespace amqp0_10 { -using qpid::messaging::Variant; +using qpid::types::Variant; +using qpid::types::VAR_LIST; using qpid::framing::Uuid; void convert(const Variant::List& from, std::vector& to) @@ -62,7 +63,7 @@ bool setIfFound< std::vector >(const Variant::Map& map, { Variant::Map::const_iterator i = map.find(key); if (i != map.end()) { - if (i->second.getType() == qpid::messaging::VAR_LIST) { + if (i->second.getType() == VAR_LIST) { convert(i->second.asList(), value); } else { value.push_back(i->second.asString()); diff --git a/cpp/src/qpid/client/amqp0_10/ConnectionImpl.h b/cpp/src/qpid/client/amqp0_10/ConnectionImpl.h index 37a78b2373..2c59d8add8 100644 --- a/cpp/src/qpid/client/amqp0_10/ConnectionImpl.h +++ b/cpp/src/qpid/client/amqp0_10/ConnectionImpl.h @@ -22,7 +22,7 @@ * */ #include "qpid/messaging/ConnectionImpl.h" -#include "qpid/messaging/Variant.h" +#include "qpid/types/Variant.h" #include "qpid/Url.h" #include "qpid/client/Connection.h" #include "qpid/client/ConnectionSettings.h" @@ -39,14 +39,14 @@ class SessionImpl; class ConnectionImpl : public qpid::messaging::ConnectionImpl { public: - ConnectionImpl(const qpid::messaging::Variant::Map& options); + ConnectionImpl(const qpid::types::Variant::Map& options); void open(const std::string& url); void close(); qpid::messaging::Session newSession(bool transactional, const std::string& name); qpid::messaging::Session getSession(const std::string& name) const; void closed(SessionImpl&); void connect(); - void setOption(const std::string& name, const qpid::messaging::Variant& value); + void setOption(const std::string& name, const qpid::types::Variant& value); private: typedef std::map Sessions; @@ -63,7 +63,7 @@ class ConnectionImpl : public qpid::messaging::ConnectionImpl int64_t maxReconnectInterval; int32_t retries; - void setOptions(const qpid::messaging::Variant::Map& options); + void setOptions(const qpid::types::Variant::Map& options); void connect(const qpid::sys::AbsTime& started); bool tryConnect(); bool tryConnect(const std::vector& urls); diff --git a/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp b/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp index 669ffd7e9a..8e501511e4 100644 --- a/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp +++ b/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp @@ -28,7 +28,7 @@ #include "qpid/messaging/Address.h" #include "qpid/messaging/Message.h" #include "qpid/messaging/MessageImpl.h" -#include "qpid/messaging/Variant.h" +#include "qpid/types/Variant.h" #include "qpid/framing/DeliveryProperties.h" #include "qpid/framing/FrameSet.h" #include "qpid/framing/MessageProperties.h" @@ -44,7 +44,7 @@ using namespace qpid::framing::message; using qpid::sys::AbsTime; using qpid::sys::Duration; using qpid::messaging::MessageImplAccess; -using qpid::messaging::Variant; +using qpid::types::Variant; namespace { const std::string EMPTY_STRING; diff --git a/cpp/src/qpid/client/amqp0_10/ReceiverImpl.h b/cpp/src/qpid/client/amqp0_10/ReceiverImpl.h index 689a7f6f25..d509490688 100644 --- a/cpp/src/qpid/client/amqp0_10/ReceiverImpl.h +++ b/cpp/src/qpid/client/amqp0_10/ReceiverImpl.h @@ -24,7 +24,6 @@ #include "qpid/messaging/Address.h" #include "qpid/messaging/Message.h" #include "qpid/messaging/ReceiverImpl.h" -#include "qpid/messaging/Variant.h" #include "qpid/client/AsyncSession.h" #include "qpid/client/amqp0_10/SessionImpl.h" #include "qpid/messaging/Duration.h" diff --git a/cpp/src/qpid/client/amqp0_10/SenderImpl.h b/cpp/src/qpid/client/amqp0_10/SenderImpl.h index 9e4181f42f..a99d4bd294 100644 --- a/cpp/src/qpid/client/amqp0_10/SenderImpl.h +++ b/cpp/src/qpid/client/amqp0_10/SenderImpl.h @@ -24,7 +24,6 @@ #include "qpid/messaging/Address.h" #include "qpid/messaging/Message.h" #include "qpid/messaging/SenderImpl.h" -#include "qpid/messaging/Variant.h" #include "qpid/client/AsyncSession.h" #include "qpid/client/amqp0_10/SessionImpl.h" #include diff --git a/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp b/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp index 65308dd0be..245ec878be 100644 --- a/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp +++ b/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp @@ -43,7 +43,6 @@ using qpid::messaging::KeyError; using qpid::messaging::MessageImplAccess; using qpid::messaging::Sender; using qpid::messaging::Receiver; -using qpid::messaging::VariantMap; namespace qpid { namespace client { diff --git a/cpp/src/qpid/client/amqp0_10/SessionImpl.h b/cpp/src/qpid/client/amqp0_10/SessionImpl.h index a7eaae3cdd..a616db6239 100644 --- a/cpp/src/qpid/client/amqp0_10/SessionImpl.h +++ b/cpp/src/qpid/client/amqp0_10/SessionImpl.h @@ -23,7 +23,6 @@ */ #include "qpid/messaging/SessionImpl.h" #include "qpid/messaging/Duration.h" -#include "qpid/messaging/Variant.h" #include "qpid/client/Session.h" #include "qpid/client/SubscriptionManager.h" #include "qpid/client/amqp0_10/AddressResolution.h" diff --git a/cpp/src/qpid/messaging/Address.cpp b/cpp/src/qpid/messaging/Address.cpp index a5d0671360..2902b8fc4b 100644 --- a/cpp/src/qpid/messaging/Address.cpp +++ b/cpp/src/qpid/messaging/Address.cpp @@ -26,6 +26,8 @@ namespace qpid { namespace messaging { +using namespace qpid::types; + namespace { const std::string SUBJECT_DIVIDER = "/"; const std::string OPTIONS_DIVIDER = ";"; diff --git a/cpp/src/qpid/messaging/AddressParser.cpp b/cpp/src/qpid/messaging/AddressParser.cpp index 4b29f126f2..4f22410843 100644 --- a/cpp/src/qpid/messaging/AddressParser.cpp +++ b/cpp/src/qpid/messaging/AddressParser.cpp @@ -25,6 +25,8 @@ namespace qpid { namespace messaging { +using namespace qpid::types; + AddressParser::AddressParser(const std::string& s) : input(s), current(0) {} bool AddressParser::error(const std::string& message) diff --git a/cpp/src/qpid/messaging/AddressParser.h b/cpp/src/qpid/messaging/AddressParser.h index 801b5cead1..a3f41eb04d 100644 --- a/cpp/src/qpid/messaging/AddressParser.h +++ b/cpp/src/qpid/messaging/AddressParser.h @@ -31,8 +31,8 @@ class AddressParser public: AddressParser(const std::string&); bool parse(Address& address); - bool parseMap(Variant::Map& map); - bool parseList(Variant::List& list); + bool parseMap(qpid::types::Variant::Map& map); + bool parseList(qpid::types::Variant::List& list); private: const std::string& input; std::string::size_type current; @@ -40,15 +40,15 @@ class AddressParser bool readChar(char c); bool readQuotedString(std::string& s); - bool readQuotedValue(Variant& value); + bool readQuotedValue(qpid::types::Variant& value); bool readString(std::string& value, char delimiter); bool readWord(std::string& word, const std::string& delims = RESERVED); - bool readSimpleValue(Variant& word); + bool readSimpleValue(qpid::types::Variant& word); bool readKey(std::string& key); - bool readValue(Variant& value); - bool readKeyValuePair(Variant::Map& map); - bool readMap(Variant& value); - bool readList(Variant& value); + bool readValue(qpid::types::Variant& value); + bool readKeyValuePair(qpid::types::Variant::Map& map); + bool readMap(qpid::types::Variant& value); + bool readList(qpid::types::Variant& value); bool readName(std::string& name); bool readSubject(std::string& subject); bool error(const std::string& message); @@ -56,8 +56,8 @@ class AddressParser bool iswhitespace(); bool in(const std::string& delims); bool isreserved(); - void readListItems(Variant::List& list); - void readMapEntries(Variant::Map& map); + void readListItems(qpid::types::Variant::List& list); + void readMapEntries(qpid::types::Variant::Map& map); }; }} // namespace qpid::messaging diff --git a/cpp/src/qpid/messaging/Connection.cpp b/cpp/src/qpid/messaging/Connection.cpp index cb06af7693..853ba1d100 100644 --- a/cpp/src/qpid/messaging/Connection.cpp +++ b/cpp/src/qpid/messaging/Connection.cpp @@ -30,6 +30,8 @@ namespace qpid { namespace messaging { +using namespace qpid::types; + typedef PrivateImplRef PI; Connection::Connection(ConnectionImpl* impl) { PI::ctor(*this, impl); } diff --git a/cpp/src/qpid/messaging/ConnectionImpl.h b/cpp/src/qpid/messaging/ConnectionImpl.h index 2f03c9610b..474f486736 100644 --- a/cpp/src/qpid/messaging/ConnectionImpl.h +++ b/cpp/src/qpid/messaging/ConnectionImpl.h @@ -25,10 +25,14 @@ #include "qpid/RefCounted.h" namespace qpid { + +namespace types { +class Variant; +} + namespace messaging { class Session; -class Variant; class ConnectionImpl : public virtual qpid::RefCounted { @@ -38,7 +42,7 @@ class ConnectionImpl : public virtual qpid::RefCounted virtual void close() = 0; virtual Session newSession(bool transactional, const std::string& name) = 0; virtual Session getSession(const std::string& name) const = 0; - virtual void setOption(const std::string& name, const Variant& value) = 0; + virtual void setOption(const std::string& name, const qpid::types::Variant& value) = 0; private: }; }} // namespace qpid::messaging diff --git a/cpp/src/qpid/messaging/ListContent.cpp b/cpp/src/qpid/messaging/ListContent.cpp index 038c1fad0b..4bd990e062 100644 --- a/cpp/src/qpid/messaging/ListContent.cpp +++ b/cpp/src/qpid/messaging/ListContent.cpp @@ -25,6 +25,8 @@ namespace qpid { namespace messaging { +using namespace qpid::types; + class ListContentImpl : public Variant { Message* msg; diff --git a/cpp/src/qpid/messaging/ListView.cpp b/cpp/src/qpid/messaging/ListView.cpp index b717d157fa..5cf453254f 100644 --- a/cpp/src/qpid/messaging/ListView.cpp +++ b/cpp/src/qpid/messaging/ListView.cpp @@ -25,6 +25,8 @@ namespace qpid { namespace messaging { +using namespace qpid::types; + class ListViewImpl : public Variant { public: diff --git a/cpp/src/qpid/messaging/MapContent.cpp b/cpp/src/qpid/messaging/MapContent.cpp index 1f190b85aa..11dcfbaf70 100644 --- a/cpp/src/qpid/messaging/MapContent.cpp +++ b/cpp/src/qpid/messaging/MapContent.cpp @@ -25,6 +25,8 @@ namespace qpid { namespace messaging { +using namespace qpid::types; + class MapContentImpl : public Variant { Message* msg; diff --git a/cpp/src/qpid/messaging/MapView.cpp b/cpp/src/qpid/messaging/MapView.cpp index ffa6e91a16..8bb0a724d2 100644 --- a/cpp/src/qpid/messaging/MapView.cpp +++ b/cpp/src/qpid/messaging/MapView.cpp @@ -25,6 +25,8 @@ namespace qpid { namespace messaging { +using namespace qpid::types; + class MapViewImpl : public Variant { public: diff --git a/cpp/src/qpid/messaging/Message.cpp b/cpp/src/qpid/messaging/Message.cpp index 4f8a358764..d953b3ff75 100644 --- a/cpp/src/qpid/messaging/Message.cpp +++ b/cpp/src/qpid/messaging/Message.cpp @@ -24,6 +24,8 @@ namespace qpid { namespace messaging { +using namespace qpid::types; + Message::Message(const std::string& bytes) : impl(new MessageImpl(bytes)) {} Message::Message(const char* bytes, size_t count) : impl(new MessageImpl(bytes, count)) {} diff --git a/cpp/src/qpid/messaging/MessageImpl.cpp b/cpp/src/qpid/messaging/MessageImpl.cpp index 5d754ac487..5f8ac20551 100644 --- a/cpp/src/qpid/messaging/MessageImpl.cpp +++ b/cpp/src/qpid/messaging/MessageImpl.cpp @@ -28,6 +28,8 @@ namespace { const std::string EMPTY_STRING = ""; } +using namespace qpid::types; + MessageImpl::MessageImpl(const std::string& c) : ttl(0), durable(false), diff --git a/cpp/src/qpid/messaging/MessageImpl.h b/cpp/src/qpid/messaging/MessageImpl.h index bdbc1f6a1e..3898ff9f98 100644 --- a/cpp/src/qpid/messaging/MessageImpl.h +++ b/cpp/src/qpid/messaging/MessageImpl.h @@ -22,7 +22,7 @@ * */ #include "qpid/messaging/Address.h" -#include "qpid/messaging/Variant.h" +#include "qpid/types/Variant.h" #include "qpid/framing/SequenceNumber.h" namespace qpid { @@ -39,7 +39,7 @@ struct MessageImpl uint64_t ttl; bool durable; bool redelivered; - Variant::Map headers; + qpid::types::Variant::Map headers; std::string bytes; @@ -57,8 +57,8 @@ struct MessageImpl void setContentType(const std::string& s); const std::string& getContentType() const; - const Variant::Map& getHeaders() const; - Variant::Map& getHeaders(); + const qpid::types::Variant::Map& getHeaders() const; + qpid::types::Variant::Map& getHeaders(); void setBytes(const std::string& bytes); void setBytes(const char* chars, size_t count); diff --git a/cpp/src/qpid/messaging/Uuid.cpp b/cpp/src/qpid/messaging/Uuid.cpp deleted file mode 100644 index 87eb34456f..0000000000 --- a/cpp/src/qpid/messaging/Uuid.cpp +++ /dev/null @@ -1,140 +0,0 @@ -/* - * - * 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 "qpid/messaging/Uuid.h" -#include "qpid/sys/uuid.h" -#include -#include -#include - -namespace qpid { -namespace messaging { - -using namespace std; - -const size_t Uuid::SIZE=16; -static const size_t UNPARSED_SIZE=36; - -Uuid::Uuid(bool unique) -{ - if (unique) { - generate(); - } else { - clear(); - } -} - -Uuid::Uuid(const Uuid& other) -{ - ::memcpy(bytes, other.bytes, Uuid::SIZE); -} - -Uuid::Uuid(const unsigned char* uuid) -{ - ::memcpy(bytes, uuid, Uuid::SIZE); -} - -Uuid& Uuid::operator=(const Uuid& other) -{ - if (this == &other) return *this; - ::memcpy(bytes, other.bytes, Uuid::SIZE); - return *this; -} - -void Uuid::generate() -{ - uuid_generate(bytes); -} - -void Uuid::clear() -{ - uuid_clear(bytes); -} - -// Force int 0/!0 to false/true; avoids compile warnings. -bool Uuid::isNull() const -{ - return !!uuid_is_null(bytes); -} - -Uuid::operator bool() const { return !isNull(); } -bool Uuid::operator!() const { return isNull(); } - -size_t Uuid::size() const { return SIZE; } - -const unsigned char* Uuid::data() const -{ - return bytes; -} - -bool operator==(const Uuid& a, const Uuid& b) -{ - return uuid_compare(a.bytes, b.bytes) == 0; -} - -bool operator!=(const Uuid& a, const Uuid& b) -{ - return !(a == b); -} - -bool operator<(const Uuid& a, const Uuid& b) -{ - return uuid_compare(a.bytes, b.bytes) < 0; -} - -bool operator>(const Uuid& a, const Uuid& b) -{ - return uuid_compare(a.bytes, b.bytes) > 0; -} - -bool operator<=(const Uuid& a, const Uuid& b) -{ - return uuid_compare(a.bytes, b.bytes) <= 0; -} - -bool operator>=(const Uuid& a, const Uuid& b) -{ - return uuid_compare(a.bytes, b.bytes) >= 0; -} - -ostream& operator<<(ostream& out, Uuid uuid) -{ - char unparsed[UNPARSED_SIZE + 1]; - uuid_unparse(uuid.bytes, unparsed); - return out << unparsed; -} - -istream& operator>>(istream& in, Uuid& uuid) -{ - char unparsed[UNPARSED_SIZE + 1] = {0}; - in.get(unparsed, sizeof(unparsed)); - if (uuid_parse(unparsed, uuid.bytes) != 0) - in.setstate(ios::failbit); - return in; -} - -std::string Uuid::str() const -{ - std::ostringstream os; - os << *this; - return os.str(); -} - -}} // namespace qpid::messaging diff --git a/cpp/src/qpid/messaging/Variant.cpp b/cpp/src/qpid/messaging/Variant.cpp deleted file mode 100644 index 2567b7508b..0000000000 --- a/cpp/src/qpid/messaging/Variant.cpp +++ /dev/null @@ -1,690 +0,0 @@ -/* - * - * 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 "qpid/messaging/Variant.h" -#include "qpid/Msg.h" -#include "qpid/log/Statement.h" -#include -#include -#include -#include - -namespace qpid { -namespace messaging { - -InvalidConversion::InvalidConversion(const std::string& msg) : Exception(msg) {} - - -namespace { -std::string EMPTY; -} - -class VariantImpl -{ - public: - VariantImpl(); - VariantImpl(bool); - VariantImpl(uint8_t); - VariantImpl(uint16_t); - VariantImpl(uint32_t); - VariantImpl(uint64_t); - VariantImpl(int8_t); - VariantImpl(int16_t); - VariantImpl(int32_t); - VariantImpl(int64_t); - VariantImpl(float); - VariantImpl(double); - VariantImpl(const std::string&, const std::string& encoding=std::string()); - VariantImpl(const Variant::Map&); - VariantImpl(const Variant::List&); - VariantImpl(const Uuid&); - ~VariantImpl(); - - VariantType getType() const; - - bool asBool() const; - uint8_t asUint8() const; - uint16_t asUint16() const; - uint32_t asUint32() const; - uint64_t asUint64() const; - int8_t asInt8() const; - int16_t asInt16() const; - int32_t asInt32() const; - int64_t asInt64() const; - float asFloat() const; - double asDouble() const; - std::string asString() const; - Uuid asUuid() const; - - const Variant::Map& asMap() const; - Variant::Map& asMap(); - const Variant::List& asList() const; - Variant::List& asList(); - - const std::string& getString() const; - std::string& getString(); - - void setEncoding(const std::string&); - const std::string& getEncoding() const; - - bool isEqualTo(VariantImpl&) const; - bool isEquivalentTo(VariantImpl&) const; - - static VariantImpl* create(const Variant&); - private: - const VariantType type; - union { - bool b; - uint8_t ui8; - uint16_t ui16; - uint32_t ui32; - uint64_t ui64; - int8_t i8; - int16_t i16; - int32_t i32; - int64_t i64; - float f; - double d; - void* v;//variable width data - } value; - std::string encoding;//optional encoding for variable length data - - std::string getTypeName(VariantType type) const; - template T convertFromString() const - { - std::string* s = reinterpret_cast(value.v); - try { - return boost::lexical_cast(*s); - } catch(const boost::bad_lexical_cast&) { - throw InvalidConversion(QPID_MSG("Cannot convert " << *s)); - } - } -}; - - -VariantImpl::VariantImpl() : type(VAR_VOID) { value.i64 = 0; } -VariantImpl::VariantImpl(bool b) : type(VAR_BOOL) { value.b = b; } -VariantImpl::VariantImpl(uint8_t i) : type(VAR_UINT8) { value.ui8 = i; } -VariantImpl::VariantImpl(uint16_t i) : type(VAR_UINT16) { value.ui16 = i; } -VariantImpl::VariantImpl(uint32_t i) : type(VAR_UINT32) { value.ui32 = i; } -VariantImpl::VariantImpl(uint64_t i) : type(VAR_UINT64) { value.ui64 = i; } -VariantImpl::VariantImpl(int8_t i) : type(VAR_INT8) { value.i8 = i; } -VariantImpl::VariantImpl(int16_t i) : type(VAR_INT16) { value.i16 = i; } -VariantImpl::VariantImpl(int32_t i) : type(VAR_INT32) { value.i32 = i; } -VariantImpl::VariantImpl(int64_t i) : type(VAR_INT64) { value.i64 = i; } -VariantImpl::VariantImpl(float f) : type(VAR_FLOAT) { value.f = f; } -VariantImpl::VariantImpl(double d) : type(VAR_DOUBLE) { value.d = d; } -VariantImpl::VariantImpl(const std::string& s, const std::string& e) - : type(VAR_STRING), encoding(e) { value.v = new std::string(s); } -VariantImpl::VariantImpl(const Variant::Map& m) : type(VAR_MAP) { value.v = new Variant::Map(m); } -VariantImpl::VariantImpl(const Variant::List& l) : type(VAR_LIST) { value.v = new Variant::List(l); } -VariantImpl::VariantImpl(const Uuid& u) : type(VAR_UUID) { value.v = new Uuid(u); } - -VariantImpl::~VariantImpl() { - switch (type) { - case VAR_STRING: - delete reinterpret_cast(value.v); - break; - case VAR_MAP: - delete reinterpret_cast(value.v); - break; - case VAR_LIST: - delete reinterpret_cast(value.v); - break; - case VAR_UUID: - delete reinterpret_cast(value.v); - break; - default: - break; - } -} - -VariantType VariantImpl::getType() const { return type; } - -namespace { - -bool same_char(char a, char b) -{ - return toupper(a) == toupper(b); -} - -bool caseInsensitiveMatch(const std::string& a, const std::string& b) -{ - return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin(), &same_char); -} - -const std::string TRUE("True"); -const std::string FALSE("False"); - -bool toBool(const std::string& s) -{ - if (caseInsensitiveMatch(s, TRUE)) return true; - if (caseInsensitiveMatch(s, FALSE)) return false; - try { return boost::lexical_cast(s); } catch(const boost::bad_lexical_cast&) {} - throw InvalidConversion(QPID_MSG("Cannot convert " << s << " to bool")); -} - -template std::string toString(const T& t) -{ - std::stringstream out; - out << t; - return out.str(); -} - -template bool equal(const T& a, const T& b) -{ - return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin()); -} - -} - -bool VariantImpl::asBool() const -{ - switch(type) { - case VAR_VOID: return false; - case VAR_BOOL: return value.b; - case VAR_UINT8: return value.ui8; - case VAR_UINT16: return value.ui16; - case VAR_UINT32: return value.ui32; - case VAR_UINT64: return value.ui64; - case VAR_INT8: return value.i8; - case VAR_INT16: return value.i16; - case VAR_INT32: return value.i32; - case VAR_INT64: return value.i64; - case VAR_STRING: return toBool(*reinterpret_cast(value.v)); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_BOOL))); - } -} -uint8_t VariantImpl::asUint8() const -{ - switch(type) { - case VAR_UINT8: return value.ui8; - case VAR_STRING: return convertFromString(); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_UINT8))); - } -} -uint16_t VariantImpl::asUint16() const -{ - switch(type) { - case VAR_UINT8: return value.ui8; - case VAR_UINT16: return value.ui16; - case VAR_STRING: return convertFromString(); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_UINT16))); - } -} -uint32_t VariantImpl::asUint32() const -{ - switch(type) { - case VAR_UINT8: return value.ui8; - case VAR_UINT16: return value.ui16; - case VAR_UINT32: return value.ui32; - case VAR_STRING: return convertFromString(); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_UINT32))); - } -} -uint64_t VariantImpl::asUint64() const -{ - switch(type) { - case VAR_UINT8: return value.ui8; - case VAR_UINT16: return value.ui16; - case VAR_UINT32: return value.ui32; - case VAR_UINT64: return value.ui64; - case VAR_STRING: return convertFromString(); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_UINT64))); - } -} -int8_t VariantImpl::asInt8() const -{ - switch(type) { - case VAR_INT8: return value.i8; - case VAR_STRING: return convertFromString(); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_INT8))); - } -} -int16_t VariantImpl::asInt16() const -{ - switch(type) { - case VAR_INT8: return value.i8; - case VAR_INT16: return value.i16; - case VAR_STRING: return convertFromString(); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_INT16))); - } -} -int32_t VariantImpl::asInt32() const -{ - switch(type) { - case VAR_INT8: return value.i8; - case VAR_INT16: return value.i16; - case VAR_INT32: return value.i32; - case VAR_STRING: return convertFromString(); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_INT32))); - } -} -int64_t VariantImpl::asInt64() const -{ - switch(type) { - case VAR_INT8: return value.i8; - case VAR_INT16: return value.i16; - case VAR_INT32: return value.i32; - case VAR_INT64: return value.i64; - case VAR_STRING: return convertFromString(); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_INT64))); - } -} -float VariantImpl::asFloat() const -{ - switch(type) { - case VAR_FLOAT: return value.f; - case VAR_STRING: return convertFromString(); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_FLOAT))); - } -} -double VariantImpl::asDouble() const -{ - switch(type) { - case VAR_FLOAT: return value.f; - case VAR_DOUBLE: return value.d; - case VAR_STRING: return convertFromString(); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_DOUBLE))); - } -} -std::string VariantImpl::asString() const -{ - switch(type) { - case VAR_VOID: return EMPTY; - case VAR_BOOL: return value.b ? TRUE : FALSE; - case VAR_UINT8: return boost::lexical_cast((int) value.ui8); - case VAR_UINT16: return boost::lexical_cast(value.ui16); - case VAR_UINT32: return boost::lexical_cast(value.ui32); - case VAR_UINT64: return boost::lexical_cast(value.ui64); - case VAR_INT8: return boost::lexical_cast((int) value.i8); - case VAR_INT16: return boost::lexical_cast(value.i16); - case VAR_INT32: return boost::lexical_cast(value.i32); - case VAR_INT64: return boost::lexical_cast(value.i64); - case VAR_DOUBLE: return boost::lexical_cast(value.d); - case VAR_FLOAT: return boost::lexical_cast(value.f); - case VAR_STRING: return *reinterpret_cast(value.v); - case VAR_UUID: return reinterpret_cast(value.v)->str(); - case VAR_LIST: return toString(asList()); - case VAR_MAP: return toString(asMap()); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_STRING))); - } -} -Uuid VariantImpl::asUuid() const -{ - switch(type) { - case VAR_UUID: return *reinterpret_cast(value.v); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_UUID))); - } -} - -bool VariantImpl::isEqualTo(VariantImpl& other) const -{ - if (type == other.type) { - switch(type) { - case VAR_VOID: return true; - case VAR_BOOL: return value.b == other.value.b; - case VAR_UINT8: return value.ui8 == other.value.ui8; - case VAR_UINT16: return value.ui16 == other.value.ui16; - case VAR_UINT32: return value.ui32 == other.value.ui32; - case VAR_UINT64: return value.ui64 == other.value.ui64; - case VAR_INT8: return value.i8 == other.value.i8; - case VAR_INT16: return value.i16 == other.value.i16; - case VAR_INT32: return value.i32 == other.value.i32; - case VAR_INT64: return value.i64 == other.value.i64; - case VAR_DOUBLE: return value.d == other.value.d; - case VAR_FLOAT: return value.f == other.value.f; - case VAR_STRING: return *reinterpret_cast(value.v) - == *reinterpret_cast(other.value.v); - case VAR_UUID: return *reinterpret_cast(value.v) - == *reinterpret_cast(other.value.v); - case VAR_LIST: return equal(asList(), other.asList()); - case VAR_MAP: return equal(asMap(), other.asMap()); - } - } - return false; -} - -const Variant::Map& VariantImpl::asMap() const -{ - switch(type) { - case VAR_MAP: return *reinterpret_cast(value.v); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_MAP))); - } -} - -Variant::Map& VariantImpl::asMap() -{ - switch(type) { - case VAR_MAP: return *reinterpret_cast(value.v); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_MAP))); - } -} - -const Variant::List& VariantImpl::asList() const -{ - switch(type) { - case VAR_LIST: return *reinterpret_cast(value.v); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_LIST))); - } -} - -Variant::List& VariantImpl::asList() -{ - switch(type) { - case VAR_LIST: return *reinterpret_cast(value.v); - default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_LIST))); - } -} - -std::string& VariantImpl::getString() -{ - switch(type) { - case VAR_STRING: return *reinterpret_cast(value.v); - default: throw InvalidConversion(QPID_MSG("Variant is not a string; use asString() if conversion is required.")); - } -} - -const std::string& VariantImpl::getString() const -{ - switch(type) { - case VAR_STRING: return *reinterpret_cast(value.v); - default: throw InvalidConversion(QPID_MSG("Variant is not a string; use asString() if conversion is required.")); - } -} - -void VariantImpl::setEncoding(const std::string& s) { encoding = s; } -const std::string& VariantImpl::getEncoding() const { return encoding; } - -std::string VariantImpl::getTypeName(VariantType type) const -{ - switch (type) { - case VAR_VOID: return "void"; - case VAR_BOOL: return "bool"; - case VAR_UINT8: return "uint8"; - case VAR_UINT16: return "uint16"; - case VAR_UINT32: return "uint32"; - case VAR_UINT64: return "uint64"; - case VAR_INT8: return "int8"; - case VAR_INT16: return "int16"; - case VAR_INT32: return "int32"; - case VAR_INT64: return "int64"; - case VAR_FLOAT: return "float"; - case VAR_DOUBLE: return "double"; - case VAR_STRING: return "string"; - case VAR_MAP: return "map"; - case VAR_LIST: return "list"; - case VAR_UUID: return "uuid"; - } - return "";//should never happen -} - -VariantImpl* VariantImpl::create(const Variant& v) -{ - switch (v.getType()) { - case VAR_BOOL: return new VariantImpl(v.asBool()); - case VAR_UINT8: return new VariantImpl(v.asUint8()); - case VAR_UINT16: return new VariantImpl(v.asUint16()); - case VAR_UINT32: return new VariantImpl(v.asUint32()); - case VAR_UINT64: return new VariantImpl(v.asUint64()); - case VAR_INT8: return new VariantImpl(v.asInt8()); - case VAR_INT16: return new VariantImpl(v.asInt16()); - case VAR_INT32: return new VariantImpl(v.asInt32()); - case VAR_INT64: return new VariantImpl(v.asInt64()); - case VAR_FLOAT: return new VariantImpl(v.asFloat()); - case VAR_DOUBLE: return new VariantImpl(v.asDouble()); - case VAR_STRING: return new VariantImpl(v.asString(), v.getEncoding()); - case VAR_MAP: return new VariantImpl(v.asMap()); - case VAR_LIST: return new VariantImpl(v.asList()); - case VAR_UUID: return new VariantImpl(v.asUuid()); - default: return new VariantImpl(); - } -} - -Variant::Variant() : impl(new VariantImpl()) {} -Variant::Variant(bool b) : impl(new VariantImpl(b)) {} -Variant::Variant(uint8_t i) : impl(new VariantImpl(i)) {} -Variant::Variant(uint16_t i) : impl(new VariantImpl(i)) {} -Variant::Variant(uint32_t i) : impl(new VariantImpl(i)) {} -Variant::Variant(uint64_t i) : impl(new VariantImpl(i)) {} -Variant::Variant(int8_t i) : impl(new VariantImpl(i)) {} -Variant::Variant(int16_t i) : impl(new VariantImpl(i)) {} -Variant::Variant(int32_t i) : impl(new VariantImpl(i)) {} -Variant::Variant(int64_t i) : impl(new VariantImpl(i)) {} -Variant::Variant(float f) : impl(new VariantImpl(f)) {} -Variant::Variant(double d) : impl(new VariantImpl(d)) {} -Variant::Variant(const std::string& s) : impl(new VariantImpl(s)) {} -Variant::Variant(const char* s) : impl(new VariantImpl(std::string(s))) {} -Variant::Variant(const Map& m) : impl(new VariantImpl(m)) {} -Variant::Variant(const List& l) : impl(new VariantImpl(l)) {} -Variant::Variant(const Variant& v) : impl(VariantImpl::create(v)) {} -Variant::Variant(const Uuid& u) : impl(new VariantImpl(u)) {} - -Variant::~Variant() { if (impl) delete impl; } - -void Variant::reset() -{ - if (impl) delete impl; - impl = new VariantImpl(); -} - - -Variant& Variant::operator=(bool b) -{ - if (impl) delete impl; - impl = new VariantImpl(b); - return *this; -} - -Variant& Variant::operator=(uint8_t i) -{ - if (impl) delete impl; - impl = new VariantImpl(i); - return *this; -} -Variant& Variant::operator=(uint16_t i) -{ - if (impl) delete impl; - impl = new VariantImpl(i); - return *this; -} -Variant& Variant::operator=(uint32_t i) -{ - if (impl) delete impl; - impl = new VariantImpl(i); - return *this; -} -Variant& Variant::operator=(uint64_t i) -{ - if (impl) delete impl; - impl = new VariantImpl(i); - return *this; -} - -Variant& Variant::operator=(int8_t i) -{ - if (impl) delete impl; - impl = new VariantImpl(i); - return *this; -} -Variant& Variant::operator=(int16_t i) -{ - if (impl) delete impl; - impl = new VariantImpl(i); - return *this; -} -Variant& Variant::operator=(int32_t i) -{ - if (impl) delete impl; - impl = new VariantImpl(i); - return *this; -} -Variant& Variant::operator=(int64_t i) -{ - if (impl) delete impl; - impl = new VariantImpl(i); - return *this; -} - -Variant& Variant::operator=(float f) -{ - if (impl) delete impl; - impl = new VariantImpl(f); - return *this; -} -Variant& Variant::operator=(double d) -{ - if (impl) delete impl; - impl = new VariantImpl(d); - return *this; -} - -Variant& Variant::operator=(const std::string& s) -{ - if (impl) delete impl; - impl = new VariantImpl(s); - return *this; -} - -Variant& Variant::operator=(const char* s) -{ - if (impl) delete impl; - impl = new VariantImpl(std::string(s)); - return *this; -} - -Variant& Variant::operator=(const Uuid& u) -{ - if (impl) delete impl; - impl = new VariantImpl(u); - return *this; -} - -Variant& Variant::operator=(const Map& m) -{ - if (impl) delete impl; - impl = new VariantImpl(m); - return *this; -} - -Variant& Variant::operator=(const List& l) -{ - if (impl) delete impl; - impl = new VariantImpl(l); - return *this; -} - -Variant& Variant::operator=(const Variant& v) -{ - if (impl) delete impl; - impl = VariantImpl::create(v); - return *this; -} - -VariantType Variant::getType() const { return impl->getType(); } -bool Variant::isVoid() const { return impl->getType() == VAR_VOID; } -bool Variant::asBool() const { return impl->asBool(); } -uint8_t Variant::asUint8() const { return impl->asUint8(); } -uint16_t Variant::asUint16() const { return impl->asUint16(); } -uint32_t Variant::asUint32() const { return impl->asUint32(); } -uint64_t Variant::asUint64() const { return impl->asUint64(); } -int8_t Variant::asInt8() const { return impl->asInt8(); } -int16_t Variant::asInt16() const { return impl->asInt16(); } -int32_t Variant::asInt32() const { return impl->asInt32(); } -int64_t Variant::asInt64() const { return impl->asInt64(); } -float Variant::asFloat() const { return impl->asFloat(); } -double Variant::asDouble() const { return impl->asDouble(); } -std::string Variant::asString() const { return impl->asString(); } -Uuid Variant::asUuid() const { return impl->asUuid(); } -const Variant::Map& Variant::asMap() const { return impl->asMap(); } -Variant::Map& Variant::asMap() { return impl->asMap(); } -const Variant::List& Variant::asList() const { return impl->asList(); } -Variant::List& Variant::asList() { return impl->asList(); } -const std::string& Variant::getString() const { return impl->getString(); } -std::string& Variant::getString() { return impl->getString(); } -void Variant::setEncoding(const std::string& s) { impl->setEncoding(s); } -const std::string& Variant::getEncoding() const { return impl->getEncoding(); } - -Variant::operator bool() const { return asBool(); } -Variant::operator uint8_t() const { return asUint8(); } -Variant::operator uint16_t() const { return asUint16(); } -Variant::operator uint32_t() const { return asUint32(); } -Variant::operator uint64_t() const { return asUint64(); } -Variant::operator int8_t() const { return asInt8(); } -Variant::operator int16_t() const { return asInt16(); } -Variant::operator int32_t() const { return asInt32(); } -Variant::operator int64_t() const { return asInt64(); } -Variant::operator float() const { return asFloat(); } -Variant::operator double() const { return asDouble(); } -Variant::operator const char*() const { return asString().c_str(); } -Variant::operator Uuid() const { return asUuid(); } - -std::ostream& operator<<(std::ostream& out, const Variant::Map& map) -{ - out << "{"; - for (Variant::Map::const_iterator i = map.begin(); i != map.end(); ++i) { - if (i != map.begin()) out << ", "; - out << i->first << ":" << i->second; - } - out << "}"; - return out; -} - -std::ostream& operator<<(std::ostream& out, const Variant::List& list) -{ - out << "["; - for (Variant::List::const_iterator i = list.begin(); i != list.end(); ++i) { - if (i != list.begin()) out << ", "; - out << *i; - } - out << "]"; - return out; -} - -std::ostream& operator<<(std::ostream& out, const Variant& value) -{ - switch (value.getType()) { - case VAR_MAP: - out << value.asMap(); - break; - case VAR_LIST: - out << value.asList(); - break; - case VAR_VOID: - out << ""; - break; - default: - out << value.asString(); - break; - } - return out; -} - -bool operator==(const Variant& a, const Variant& b) -{ - return a.isEqualTo(b); -} - -bool Variant::isEqualTo(const Variant& other) const -{ - return impl->isEqualTo(*other.impl); -} - -}} // namespace qpid::messaging diff --git a/cpp/src/qpid/types/Uuid.cpp b/cpp/src/qpid/types/Uuid.cpp new file mode 100644 index 0000000000..9face4e5d2 --- /dev/null +++ b/cpp/src/qpid/types/Uuid.cpp @@ -0,0 +1,140 @@ +/* + * + * 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 "qpid/types/Uuid.h" +#include "qpid/sys/uuid.h" +#include +#include +#include + +namespace qpid { +namespace types { + +using namespace std; + +const size_t Uuid::SIZE=16; +static const size_t UNPARSED_SIZE=36; + +Uuid::Uuid(bool unique) +{ + if (unique) { + generate(); + } else { + clear(); + } +} + +Uuid::Uuid(const Uuid& other) +{ + ::memcpy(bytes, other.bytes, Uuid::SIZE); +} + +Uuid::Uuid(const unsigned char* uuid) +{ + ::memcpy(bytes, uuid, Uuid::SIZE); +} + +Uuid& Uuid::operator=(const Uuid& other) +{ + if (this == &other) return *this; + ::memcpy(bytes, other.bytes, Uuid::SIZE); + return *this; +} + +void Uuid::generate() +{ + uuid_generate(bytes); +} + +void Uuid::clear() +{ + uuid_clear(bytes); +} + +// Force int 0/!0 to false/true; avoids compile warnings. +bool Uuid::isNull() const +{ + return !!uuid_is_null(bytes); +} + +Uuid::operator bool() const { return !isNull(); } +bool Uuid::operator!() const { return isNull(); } + +size_t Uuid::size() const { return SIZE; } + +const unsigned char* Uuid::data() const +{ + return bytes; +} + +bool operator==(const Uuid& a, const Uuid& b) +{ + return uuid_compare(a.bytes, b.bytes) == 0; +} + +bool operator!=(const Uuid& a, const Uuid& b) +{ + return !(a == b); +} + +bool operator<(const Uuid& a, const Uuid& b) +{ + return uuid_compare(a.bytes, b.bytes) < 0; +} + +bool operator>(const Uuid& a, const Uuid& b) +{ + return uuid_compare(a.bytes, b.bytes) > 0; +} + +bool operator<=(const Uuid& a, const Uuid& b) +{ + return uuid_compare(a.bytes, b.bytes) <= 0; +} + +bool operator>=(const Uuid& a, const Uuid& b) +{ + return uuid_compare(a.bytes, b.bytes) >= 0; +} + +ostream& operator<<(ostream& out, Uuid uuid) +{ + char unparsed[UNPARSED_SIZE + 1]; + uuid_unparse(uuid.bytes, unparsed); + return out << unparsed; +} + +istream& operator>>(istream& in, Uuid& uuid) +{ + char unparsed[UNPARSED_SIZE + 1] = {0}; + in.get(unparsed, sizeof(unparsed)); + if (uuid_parse(unparsed, uuid.bytes) != 0) + in.setstate(ios::failbit); + return in; +} + +std::string Uuid::str() const +{ + std::ostringstream os; + os << *this; + return os.str(); +} + +}} // namespace qpid::types diff --git a/cpp/src/qpid/types/Variant.cpp b/cpp/src/qpid/types/Variant.cpp new file mode 100644 index 0000000000..3729b6c947 --- /dev/null +++ b/cpp/src/qpid/types/Variant.cpp @@ -0,0 +1,690 @@ +/* + * + * 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 "qpid/types/Variant.h" +#include "qpid/Msg.h" +#include "qpid/log/Statement.h" +#include +#include +#include +#include + +namespace qpid { +namespace types { + +InvalidConversion::InvalidConversion(const std::string& msg) : Exception(msg) {} + + +namespace { +std::string EMPTY; +} + +class VariantImpl +{ + public: + VariantImpl(); + VariantImpl(bool); + VariantImpl(uint8_t); + VariantImpl(uint16_t); + VariantImpl(uint32_t); + VariantImpl(uint64_t); + VariantImpl(int8_t); + VariantImpl(int16_t); + VariantImpl(int32_t); + VariantImpl(int64_t); + VariantImpl(float); + VariantImpl(double); + VariantImpl(const std::string&, const std::string& encoding=std::string()); + VariantImpl(const Variant::Map&); + VariantImpl(const Variant::List&); + VariantImpl(const Uuid&); + ~VariantImpl(); + + VariantType getType() const; + + bool asBool() const; + uint8_t asUint8() const; + uint16_t asUint16() const; + uint32_t asUint32() const; + uint64_t asUint64() const; + int8_t asInt8() const; + int16_t asInt16() const; + int32_t asInt32() const; + int64_t asInt64() const; + float asFloat() const; + double asDouble() const; + std::string asString() const; + Uuid asUuid() const; + + const Variant::Map& asMap() const; + Variant::Map& asMap(); + const Variant::List& asList() const; + Variant::List& asList(); + + const std::string& getString() const; + std::string& getString(); + + void setEncoding(const std::string&); + const std::string& getEncoding() const; + + bool isEqualTo(VariantImpl&) const; + bool isEquivalentTo(VariantImpl&) const; + + static VariantImpl* create(const Variant&); + private: + const VariantType type; + union { + bool b; + uint8_t ui8; + uint16_t ui16; + uint32_t ui32; + uint64_t ui64; + int8_t i8; + int16_t i16; + int32_t i32; + int64_t i64; + float f; + double d; + void* v;//variable width data + } value; + std::string encoding;//optional encoding for variable length data + + std::string getTypeName(VariantType type) const; + template T convertFromString() const + { + std::string* s = reinterpret_cast(value.v); + try { + return boost::lexical_cast(*s); + } catch(const boost::bad_lexical_cast&) { + throw InvalidConversion(QPID_MSG("Cannot convert " << *s)); + } + } +}; + + +VariantImpl::VariantImpl() : type(VAR_VOID) { value.i64 = 0; } +VariantImpl::VariantImpl(bool b) : type(VAR_BOOL) { value.b = b; } +VariantImpl::VariantImpl(uint8_t i) : type(VAR_UINT8) { value.ui8 = i; } +VariantImpl::VariantImpl(uint16_t i) : type(VAR_UINT16) { value.ui16 = i; } +VariantImpl::VariantImpl(uint32_t i) : type(VAR_UINT32) { value.ui32 = i; } +VariantImpl::VariantImpl(uint64_t i) : type(VAR_UINT64) { value.ui64 = i; } +VariantImpl::VariantImpl(int8_t i) : type(VAR_INT8) { value.i8 = i; } +VariantImpl::VariantImpl(int16_t i) : type(VAR_INT16) { value.i16 = i; } +VariantImpl::VariantImpl(int32_t i) : type(VAR_INT32) { value.i32 = i; } +VariantImpl::VariantImpl(int64_t i) : type(VAR_INT64) { value.i64 = i; } +VariantImpl::VariantImpl(float f) : type(VAR_FLOAT) { value.f = f; } +VariantImpl::VariantImpl(double d) : type(VAR_DOUBLE) { value.d = d; } +VariantImpl::VariantImpl(const std::string& s, const std::string& e) + : type(VAR_STRING), encoding(e) { value.v = new std::string(s); } +VariantImpl::VariantImpl(const Variant::Map& m) : type(VAR_MAP) { value.v = new Variant::Map(m); } +VariantImpl::VariantImpl(const Variant::List& l) : type(VAR_LIST) { value.v = new Variant::List(l); } +VariantImpl::VariantImpl(const Uuid& u) : type(VAR_UUID) { value.v = new Uuid(u); } + +VariantImpl::~VariantImpl() { + switch (type) { + case VAR_STRING: + delete reinterpret_cast(value.v); + break; + case VAR_MAP: + delete reinterpret_cast(value.v); + break; + case VAR_LIST: + delete reinterpret_cast(value.v); + break; + case VAR_UUID: + delete reinterpret_cast(value.v); + break; + default: + break; + } +} + +VariantType VariantImpl::getType() const { return type; } + +namespace { + +bool same_char(char a, char b) +{ + return toupper(a) == toupper(b); +} + +bool caseInsensitiveMatch(const std::string& a, const std::string& b) +{ + return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin(), &same_char); +} + +const std::string TRUE("True"); +const std::string FALSE("False"); + +bool toBool(const std::string& s) +{ + if (caseInsensitiveMatch(s, TRUE)) return true; + if (caseInsensitiveMatch(s, FALSE)) return false; + try { return boost::lexical_cast(s); } catch(const boost::bad_lexical_cast&) {} + throw InvalidConversion(QPID_MSG("Cannot convert " << s << " to bool")); +} + +template std::string toString(const T& t) +{ + std::stringstream out; + out << t; + return out.str(); +} + +template bool equal(const T& a, const T& b) +{ + return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin()); +} + +} + +bool VariantImpl::asBool() const +{ + switch(type) { + case VAR_VOID: return false; + case VAR_BOOL: return value.b; + case VAR_UINT8: return value.ui8; + case VAR_UINT16: return value.ui16; + case VAR_UINT32: return value.ui32; + case VAR_UINT64: return value.ui64; + case VAR_INT8: return value.i8; + case VAR_INT16: return value.i16; + case VAR_INT32: return value.i32; + case VAR_INT64: return value.i64; + case VAR_STRING: return toBool(*reinterpret_cast(value.v)); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_BOOL))); + } +} +uint8_t VariantImpl::asUint8() const +{ + switch(type) { + case VAR_UINT8: return value.ui8; + case VAR_STRING: return convertFromString(); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_UINT8))); + } +} +uint16_t VariantImpl::asUint16() const +{ + switch(type) { + case VAR_UINT8: return value.ui8; + case VAR_UINT16: return value.ui16; + case VAR_STRING: return convertFromString(); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_UINT16))); + } +} +uint32_t VariantImpl::asUint32() const +{ + switch(type) { + case VAR_UINT8: return value.ui8; + case VAR_UINT16: return value.ui16; + case VAR_UINT32: return value.ui32; + case VAR_STRING: return convertFromString(); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_UINT32))); + } +} +uint64_t VariantImpl::asUint64() const +{ + switch(type) { + case VAR_UINT8: return value.ui8; + case VAR_UINT16: return value.ui16; + case VAR_UINT32: return value.ui32; + case VAR_UINT64: return value.ui64; + case VAR_STRING: return convertFromString(); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_UINT64))); + } +} +int8_t VariantImpl::asInt8() const +{ + switch(type) { + case VAR_INT8: return value.i8; + case VAR_STRING: return convertFromString(); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_INT8))); + } +} +int16_t VariantImpl::asInt16() const +{ + switch(type) { + case VAR_INT8: return value.i8; + case VAR_INT16: return value.i16; + case VAR_STRING: return convertFromString(); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_INT16))); + } +} +int32_t VariantImpl::asInt32() const +{ + switch(type) { + case VAR_INT8: return value.i8; + case VAR_INT16: return value.i16; + case VAR_INT32: return value.i32; + case VAR_STRING: return convertFromString(); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_INT32))); + } +} +int64_t VariantImpl::asInt64() const +{ + switch(type) { + case VAR_INT8: return value.i8; + case VAR_INT16: return value.i16; + case VAR_INT32: return value.i32; + case VAR_INT64: return value.i64; + case VAR_STRING: return convertFromString(); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_INT64))); + } +} +float VariantImpl::asFloat() const +{ + switch(type) { + case VAR_FLOAT: return value.f; + case VAR_STRING: return convertFromString(); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_FLOAT))); + } +} +double VariantImpl::asDouble() const +{ + switch(type) { + case VAR_FLOAT: return value.f; + case VAR_DOUBLE: return value.d; + case VAR_STRING: return convertFromString(); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_DOUBLE))); + } +} +std::string VariantImpl::asString() const +{ + switch(type) { + case VAR_VOID: return EMPTY; + case VAR_BOOL: return value.b ? TRUE : FALSE; + case VAR_UINT8: return boost::lexical_cast((int) value.ui8); + case VAR_UINT16: return boost::lexical_cast(value.ui16); + case VAR_UINT32: return boost::lexical_cast(value.ui32); + case VAR_UINT64: return boost::lexical_cast(value.ui64); + case VAR_INT8: return boost::lexical_cast((int) value.i8); + case VAR_INT16: return boost::lexical_cast(value.i16); + case VAR_INT32: return boost::lexical_cast(value.i32); + case VAR_INT64: return boost::lexical_cast(value.i64); + case VAR_DOUBLE: return boost::lexical_cast(value.d); + case VAR_FLOAT: return boost::lexical_cast(value.f); + case VAR_STRING: return *reinterpret_cast(value.v); + case VAR_UUID: return reinterpret_cast(value.v)->str(); + case VAR_LIST: return toString(asList()); + case VAR_MAP: return toString(asMap()); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_STRING))); + } +} +Uuid VariantImpl::asUuid() const +{ + switch(type) { + case VAR_UUID: return *reinterpret_cast(value.v); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_UUID))); + } +} + +bool VariantImpl::isEqualTo(VariantImpl& other) const +{ + if (type == other.type) { + switch(type) { + case VAR_VOID: return true; + case VAR_BOOL: return value.b == other.value.b; + case VAR_UINT8: return value.ui8 == other.value.ui8; + case VAR_UINT16: return value.ui16 == other.value.ui16; + case VAR_UINT32: return value.ui32 == other.value.ui32; + case VAR_UINT64: return value.ui64 == other.value.ui64; + case VAR_INT8: return value.i8 == other.value.i8; + case VAR_INT16: return value.i16 == other.value.i16; + case VAR_INT32: return value.i32 == other.value.i32; + case VAR_INT64: return value.i64 == other.value.i64; + case VAR_DOUBLE: return value.d == other.value.d; + case VAR_FLOAT: return value.f == other.value.f; + case VAR_STRING: return *reinterpret_cast(value.v) + == *reinterpret_cast(other.value.v); + case VAR_UUID: return *reinterpret_cast(value.v) + == *reinterpret_cast(other.value.v); + case VAR_LIST: return equal(asList(), other.asList()); + case VAR_MAP: return equal(asMap(), other.asMap()); + } + } + return false; +} + +const Variant::Map& VariantImpl::asMap() const +{ + switch(type) { + case VAR_MAP: return *reinterpret_cast(value.v); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_MAP))); + } +} + +Variant::Map& VariantImpl::asMap() +{ + switch(type) { + case VAR_MAP: return *reinterpret_cast(value.v); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_MAP))); + } +} + +const Variant::List& VariantImpl::asList() const +{ + switch(type) { + case VAR_LIST: return *reinterpret_cast(value.v); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_LIST))); + } +} + +Variant::List& VariantImpl::asList() +{ + switch(type) { + case VAR_LIST: return *reinterpret_cast(value.v); + default: throw InvalidConversion(QPID_MSG("Cannot convert from " << getTypeName(type) << " to " << getTypeName(VAR_LIST))); + } +} + +std::string& VariantImpl::getString() +{ + switch(type) { + case VAR_STRING: return *reinterpret_cast(value.v); + default: throw InvalidConversion(QPID_MSG("Variant is not a string; use asString() if conversion is required.")); + } +} + +const std::string& VariantImpl::getString() const +{ + switch(type) { + case VAR_STRING: return *reinterpret_cast(value.v); + default: throw InvalidConversion(QPID_MSG("Variant is not a string; use asString() if conversion is required.")); + } +} + +void VariantImpl::setEncoding(const std::string& s) { encoding = s; } +const std::string& VariantImpl::getEncoding() const { return encoding; } + +std::string VariantImpl::getTypeName(VariantType type) const +{ + switch (type) { + case VAR_VOID: return "void"; + case VAR_BOOL: return "bool"; + case VAR_UINT8: return "uint8"; + case VAR_UINT16: return "uint16"; + case VAR_UINT32: return "uint32"; + case VAR_UINT64: return "uint64"; + case VAR_INT8: return "int8"; + case VAR_INT16: return "int16"; + case VAR_INT32: return "int32"; + case VAR_INT64: return "int64"; + case VAR_FLOAT: return "float"; + case VAR_DOUBLE: return "double"; + case VAR_STRING: return "string"; + case VAR_MAP: return "map"; + case VAR_LIST: return "list"; + case VAR_UUID: return "uuid"; + } + return "";//should never happen +} + +VariantImpl* VariantImpl::create(const Variant& v) +{ + switch (v.getType()) { + case VAR_BOOL: return new VariantImpl(v.asBool()); + case VAR_UINT8: return new VariantImpl(v.asUint8()); + case VAR_UINT16: return new VariantImpl(v.asUint16()); + case VAR_UINT32: return new VariantImpl(v.asUint32()); + case VAR_UINT64: return new VariantImpl(v.asUint64()); + case VAR_INT8: return new VariantImpl(v.asInt8()); + case VAR_INT16: return new VariantImpl(v.asInt16()); + case VAR_INT32: return new VariantImpl(v.asInt32()); + case VAR_INT64: return new VariantImpl(v.asInt64()); + case VAR_FLOAT: return new VariantImpl(v.asFloat()); + case VAR_DOUBLE: return new VariantImpl(v.asDouble()); + case VAR_STRING: return new VariantImpl(v.asString(), v.getEncoding()); + case VAR_MAP: return new VariantImpl(v.asMap()); + case VAR_LIST: return new VariantImpl(v.asList()); + case VAR_UUID: return new VariantImpl(v.asUuid()); + default: return new VariantImpl(); + } +} + +Variant::Variant() : impl(new VariantImpl()) {} +Variant::Variant(bool b) : impl(new VariantImpl(b)) {} +Variant::Variant(uint8_t i) : impl(new VariantImpl(i)) {} +Variant::Variant(uint16_t i) : impl(new VariantImpl(i)) {} +Variant::Variant(uint32_t i) : impl(new VariantImpl(i)) {} +Variant::Variant(uint64_t i) : impl(new VariantImpl(i)) {} +Variant::Variant(int8_t i) : impl(new VariantImpl(i)) {} +Variant::Variant(int16_t i) : impl(new VariantImpl(i)) {} +Variant::Variant(int32_t i) : impl(new VariantImpl(i)) {} +Variant::Variant(int64_t i) : impl(new VariantImpl(i)) {} +Variant::Variant(float f) : impl(new VariantImpl(f)) {} +Variant::Variant(double d) : impl(new VariantImpl(d)) {} +Variant::Variant(const std::string& s) : impl(new VariantImpl(s)) {} +Variant::Variant(const char* s) : impl(new VariantImpl(std::string(s))) {} +Variant::Variant(const Map& m) : impl(new VariantImpl(m)) {} +Variant::Variant(const List& l) : impl(new VariantImpl(l)) {} +Variant::Variant(const Variant& v) : impl(VariantImpl::create(v)) {} +Variant::Variant(const Uuid& u) : impl(new VariantImpl(u)) {} + +Variant::~Variant() { if (impl) delete impl; } + +void Variant::reset() +{ + if (impl) delete impl; + impl = new VariantImpl(); +} + + +Variant& Variant::operator=(bool b) +{ + if (impl) delete impl; + impl = new VariantImpl(b); + return *this; +} + +Variant& Variant::operator=(uint8_t i) +{ + if (impl) delete impl; + impl = new VariantImpl(i); + return *this; +} +Variant& Variant::operator=(uint16_t i) +{ + if (impl) delete impl; + impl = new VariantImpl(i); + return *this; +} +Variant& Variant::operator=(uint32_t i) +{ + if (impl) delete impl; + impl = new VariantImpl(i); + return *this; +} +Variant& Variant::operator=(uint64_t i) +{ + if (impl) delete impl; + impl = new VariantImpl(i); + return *this; +} + +Variant& Variant::operator=(int8_t i) +{ + if (impl) delete impl; + impl = new VariantImpl(i); + return *this; +} +Variant& Variant::operator=(int16_t i) +{ + if (impl) delete impl; + impl = new VariantImpl(i); + return *this; +} +Variant& Variant::operator=(int32_t i) +{ + if (impl) delete impl; + impl = new VariantImpl(i); + return *this; +} +Variant& Variant::operator=(int64_t i) +{ + if (impl) delete impl; + impl = new VariantImpl(i); + return *this; +} + +Variant& Variant::operator=(float f) +{ + if (impl) delete impl; + impl = new VariantImpl(f); + return *this; +} +Variant& Variant::operator=(double d) +{ + if (impl) delete impl; + impl = new VariantImpl(d); + return *this; +} + +Variant& Variant::operator=(const std::string& s) +{ + if (impl) delete impl; + impl = new VariantImpl(s); + return *this; +} + +Variant& Variant::operator=(const char* s) +{ + if (impl) delete impl; + impl = new VariantImpl(std::string(s)); + return *this; +} + +Variant& Variant::operator=(const Uuid& u) +{ + if (impl) delete impl; + impl = new VariantImpl(u); + return *this; +} + +Variant& Variant::operator=(const Map& m) +{ + if (impl) delete impl; + impl = new VariantImpl(m); + return *this; +} + +Variant& Variant::operator=(const List& l) +{ + if (impl) delete impl; + impl = new VariantImpl(l); + return *this; +} + +Variant& Variant::operator=(const Variant& v) +{ + if (impl) delete impl; + impl = VariantImpl::create(v); + return *this; +} + +VariantType Variant::getType() const { return impl->getType(); } +bool Variant::isVoid() const { return impl->getType() == VAR_VOID; } +bool Variant::asBool() const { return impl->asBool(); } +uint8_t Variant::asUint8() const { return impl->asUint8(); } +uint16_t Variant::asUint16() const { return impl->asUint16(); } +uint32_t Variant::asUint32() const { return impl->asUint32(); } +uint64_t Variant::asUint64() const { return impl->asUint64(); } +int8_t Variant::asInt8() const { return impl->asInt8(); } +int16_t Variant::asInt16() const { return impl->asInt16(); } +int32_t Variant::asInt32() const { return impl->asInt32(); } +int64_t Variant::asInt64() const { return impl->asInt64(); } +float Variant::asFloat() const { return impl->asFloat(); } +double Variant::asDouble() const { return impl->asDouble(); } +std::string Variant::asString() const { return impl->asString(); } +Uuid Variant::asUuid() const { return impl->asUuid(); } +const Variant::Map& Variant::asMap() const { return impl->asMap(); } +Variant::Map& Variant::asMap() { return impl->asMap(); } +const Variant::List& Variant::asList() const { return impl->asList(); } +Variant::List& Variant::asList() { return impl->asList(); } +const std::string& Variant::getString() const { return impl->getString(); } +std::string& Variant::getString() { return impl->getString(); } +void Variant::setEncoding(const std::string& s) { impl->setEncoding(s); } +const std::string& Variant::getEncoding() const { return impl->getEncoding(); } + +Variant::operator bool() const { return asBool(); } +Variant::operator uint8_t() const { return asUint8(); } +Variant::operator uint16_t() const { return asUint16(); } +Variant::operator uint32_t() const { return asUint32(); } +Variant::operator uint64_t() const { return asUint64(); } +Variant::operator int8_t() const { return asInt8(); } +Variant::operator int16_t() const { return asInt16(); } +Variant::operator int32_t() const { return asInt32(); } +Variant::operator int64_t() const { return asInt64(); } +Variant::operator float() const { return asFloat(); } +Variant::operator double() const { return asDouble(); } +Variant::operator const char*() const { return asString().c_str(); } +Variant::operator Uuid() const { return asUuid(); } + +std::ostream& operator<<(std::ostream& out, const Variant::Map& map) +{ + out << "{"; + for (Variant::Map::const_iterator i = map.begin(); i != map.end(); ++i) { + if (i != map.begin()) out << ", "; + out << i->first << ":" << i->second; + } + out << "}"; + return out; +} + +std::ostream& operator<<(std::ostream& out, const Variant::List& list) +{ + out << "["; + for (Variant::List::const_iterator i = list.begin(); i != list.end(); ++i) { + if (i != list.begin()) out << ", "; + out << *i; + } + out << "]"; + return out; +} + +std::ostream& operator<<(std::ostream& out, const Variant& value) +{ + switch (value.getType()) { + case VAR_MAP: + out << value.asMap(); + break; + case VAR_LIST: + out << value.asList(); + break; + case VAR_VOID: + out << ""; + break; + default: + out << value.asString(); + break; + } + return out; +} + +bool operator==(const Variant& a, const Variant& b) +{ + return a.isEqualTo(b); +} + +bool Variant::isEqualTo(const Variant& other) const +{ + return impl->isEqualTo(*other.impl); +} + +}} // namespace qpid::types diff --git a/cpp/src/tests/Address.cpp b/cpp/src/tests/Address.cpp index f25a27d231..01d8683efe 100644 --- a/cpp/src/tests/Address.cpp +++ b/cpp/src/tests/Address.cpp @@ -20,11 +20,12 @@ */ #include #include "qpid/messaging/Address.h" -#include "qpid/messaging/Variant.h" +#include "qpid/types/Variant.h" #include "unit_test.h" using namespace qpid::messaging; +using namespace qpid::types; namespace qpid { namespace tests { diff --git a/cpp/src/tests/MessagingSessionTests.cpp b/cpp/src/tests/MessagingSessionTests.cpp index ef0685a508..56e86d101f 100644 --- a/cpp/src/tests/MessagingSessionTests.cpp +++ b/cpp/src/tests/MessagingSessionTests.cpp @@ -48,6 +48,7 @@ namespace tests { QPID_AUTO_TEST_SUITE(MessagingSessionTests) using namespace qpid::messaging; +using namespace qpid::types; using namespace qpid; using qpid::broker::Broker; using qpid::framing::Uuid; diff --git a/cpp/src/tests/Uuid.cpp b/cpp/src/tests/Uuid.cpp index 6d6c07169f..4c6505b139 100644 --- a/cpp/src/tests/Uuid.cpp +++ b/cpp/src/tests/Uuid.cpp @@ -18,7 +18,7 @@ #include "qpid/framing/Uuid.h" #include "qpid/framing/Buffer.h" -#include "qpid/messaging/Uuid.h" +#include "qpid/types/Uuid.h" #include "qpid/sys/alloca.h" #include "unit_test.h" @@ -80,15 +80,15 @@ QPID_AUTO_TEST_CASE(testUuidEncodeDecode) { string(decoded.begin(), decoded.end())); } -QPID_AUTO_TEST_CASE(testMessagingUuid) +QPID_AUTO_TEST_CASE(testTypesUuid) { - //tests for the Uuid class in the messaging namespace (introduced + //tests for the Uuid class in the types namespace (introduced //to avoid pulling in dependencies from framing) - messaging::Uuid a; - messaging::Uuid b(true); - messaging::Uuid c(true); - messaging::Uuid d(b); - messaging::Uuid e; + types::Uuid a; + types::Uuid b(true); + types::Uuid c(true); + types::Uuid d(b); + types::Uuid e; e = c; BOOST_CHECK(!a); diff --git a/cpp/src/tests/Variant.cpp b/cpp/src/tests/Variant.cpp index db9e419eab..0d456bc493 100644 --- a/cpp/src/tests/Variant.cpp +++ b/cpp/src/tests/Variant.cpp @@ -19,11 +19,11 @@ * */ #include -#include "qpid/messaging/Variant.h" +#include "qpid/types/Variant.h" #include "unit_test.h" -using namespace qpid::messaging; +using namespace qpid::types; namespace qpid { namespace tests { diff --git a/cpp/src/tests/qpid_recv.cpp b/cpp/src/tests/qpid_recv.cpp index 10738578ed..3ee8208a0b 100644 --- a/cpp/src/tests/qpid_recv.cpp +++ b/cpp/src/tests/qpid_recv.cpp @@ -34,6 +34,7 @@ #include using namespace qpid::messaging; +using namespace qpid::types; using qpid::client::amqp0_10::FailoverUpdates; using namespace std; diff --git a/cpp/src/tests/qpid_send.cpp b/cpp/src/tests/qpid_send.cpp index a8b0241a1d..eabcbdae21 100644 --- a/cpp/src/tests/qpid_send.cpp +++ b/cpp/src/tests/qpid_send.cpp @@ -33,6 +33,7 @@ #include using namespace qpid::messaging; +using namespace qpid::types; using qpid::client::amqp0_10::FailoverUpdates; typedef std::vector string_vector; diff --git a/cpp/src/tests/qpid_stream.cpp b/cpp/src/tests/qpid_stream.cpp index 5ed7f84492..e451198ef4 100644 --- a/cpp/src/tests/qpid_stream.cpp +++ b/cpp/src/tests/qpid_stream.cpp @@ -32,6 +32,7 @@ #include using namespace qpid::messaging; +using namespace qpid::types; namespace qpid { namespace tests { -- cgit v1.2.1