summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorStephen D. Huston <shuston@apache.org>2008-10-24 21:37:57 +0000
committerStephen D. Huston <shuston@apache.org>2008-10-24 21:37:57 +0000
commitf5566f6aea9f98eac2aa7793a35d42f067650667 (patch)
treeeacf3b6430ebc9535faa4128ee1c0630372e16dd /qpid/cpp/src
parentee342202c75f6525c689195c3e0edd99e9650dfb (diff)
downloadqpid-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.am5
-rw-r--r--qpid/cpp/src/qpid/Address.cpp34
-rwxr-xr-xqpid/cpp/src/qpid/Address.h27
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*/