diff options
author | Stephen D. Huston <shuston@apache.org> | 2008-10-24 21:37:57 +0000 |
---|---|---|
committer | Stephen D. Huston <shuston@apache.org> | 2008-10-24 21:37:57 +0000 |
commit | f5566f6aea9f98eac2aa7793a35d42f067650667 (patch) | |
tree | eacf3b6430ebc9535faa4128ee1c0630372e16dd /qpid/cpp/src | |
parent | ee342202c75f6525c689195c3e0edd99e9650dfb (diff) | |
download | qpid-python-f5566f6aea9f98eac2aa7793a35d42f067650667.tar.gz |
Fix Address wrapper to compile on MS VC8; discussed with Alan Conway
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@707754 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r-- | qpid/cpp/src/Makefile.am | 5 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/Address.cpp | 34 | ||||
-rwxr-xr-x | qpid/cpp/src/qpid/Address.h | 27 |
3 files changed, 59 insertions, 7 deletions
diff --git a/qpid/cpp/src/Makefile.am b/qpid/cpp/src/Makefile.am index 5d742877f5..f8c4fc42a8 100644 --- a/qpid/cpp/src/Makefile.am +++ b/qpid/cpp/src/Makefile.am @@ -232,6 +232,7 @@ libqpidcommon_la_SOURCES = \ $(platform_src) \ qpid/assert.cpp qpid/assert.h \ qpid/pointer_to_other.h \ + qpid/Address.cpp \ qpid/DataDir.cpp \ qpid/Exception.cpp \ qpid/Options.cpp \ @@ -543,6 +544,7 @@ nobase_include_HEADERS = \ qpid/framing/Array.h \ qpid/framing/Blob.h \ qpid/framing/BodyHandler.h \ + qpid/framing/BodyHolder.h \ qpid/framing/Buffer.h \ qpid/framing/ChannelHandler.h \ qpid/framing/Endian.h \ @@ -558,7 +560,6 @@ nobase_include_HEADERS = \ qpid/framing/InputHandler.h \ qpid/framing/InitiationHandler.h \ qpid/framing/MethodContent.h \ - qpid/framing/BodyHolder.h \ qpid/framing/MaxMethodBodySize.h \ qpid/framing/ModelMethod.h \ qpid/framing/OutputHandler.h \ @@ -613,6 +614,7 @@ nobase_include_HEADERS = \ qpid/sys/FileSysDir.h \ qpid/sys/IntegerTypes.h \ qpid/sys/IOHandle.h \ + qpid/sys/LockFile.h \ qpid/sys/LockPtr.h \ qpid/sys/Monitor.h \ qpid/sys/Mutex.h \ @@ -622,7 +624,6 @@ nobase_include_HEADERS = \ qpid/sys/ProtocolFactory.h \ qpid/sys/Runnable.h \ qpid/sys/Fork.h \ - qpid/sys/LockFile.h \ qpid/sys/ScopedIncrement.h \ qpid/sys/Semaphore.h \ qpid/sys/SystemInfo.h \ diff --git a/qpid/cpp/src/qpid/Address.cpp b/qpid/cpp/src/qpid/Address.cpp new file mode 100644 index 0000000000..e278c0295c --- /dev/null +++ b/qpid/cpp/src/qpid/Address.cpp @@ -0,0 +1,34 @@ +/* + * + * Copyright (c) 2006 The Apache Software Foundation + * + * Licensed 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 "Address.h" + +namespace qpid { + +std::ostream& operator<<(std::ostream& os, const Address& addr) { + const TcpAddress *t = addr.get<TcpAddress>(); + if (t) + os << *t; + return os; +} + +std::ostream& operator<<(std::ostream& os, const TcpAddress& a) { + return os << "tcp:" << a.host << ":" << a.port; +} + +} // namespace qpid diff --git a/qpid/cpp/src/qpid/Address.h b/qpid/cpp/src/qpid/Address.h index 2c4c16993d..cef80666b8 100755 --- a/qpid/cpp/src/qpid/Address.h +++ b/qpid/cpp/src/qpid/Address.h @@ -22,6 +22,7 @@ #include "qpid/sys/IntegerTypes.h" #include <boost/variant.hpp> +#include <ostream> #include <string> #include <vector> @@ -41,13 +42,29 @@ inline bool operator==(const TcpAddress& x, const TcpAddress& y) { return y.host==x.host && y.port == x.port; } -/** Address is a variant of all address types, more coming in future. */ -struct Address : public boost::variant<TcpAddress> { - template <class T> Address(const T& t) : boost::variant<TcpAddress>(t) {} - template <class T> T* get() { return boost::get<T>(this); } - template <class T> const T* get() const { return boost::get<T>(this); } +std::ostream& operator<<(std::ostream& os, const TcpAddress& a); + +/** + * Address is a variant of all address types, more coming in future. + * + * Address wraps a boost::variant rather than be defined in terms of + * boost::variant to prevent users from having to deal directly with + * boost. + */ +struct Address { +public: + Address(const Address& a) : value(a.value) {} + template <class T> Address(const T& t) : value(t) {} + template <class T> Address& operator=(const T& t) { value=t; return *this; } + template <class T> T* get() { return boost::get<T>(&value); } + template <class T> const T* get() const { return boost::get<T>(&value); } + +private: + boost::variant<TcpAddress> value; }; +std::ostream& operator<<(std::ostream& os, const Address& addr); + } // namespace qpid #endif /*!QPID_ADDRESS_H*/ |