You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2015/06/18 23:58:28 UTC
[50/50] [abbrv] qpid-proton git commit: PROTON-865: Fix extern
declarations and other windows portability issues.
PROTON-865: Fix extern declarations and other windows portability issues.
Added type_traits to manage the complicated variations of distinct/identical
integer types of various sizes on different C++ compilers.
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/9f7e3462
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/9f7e3462
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/9f7e3462
Branch: refs/heads/cjansen-cpp-client
Commit: 9f7e3462006e03a421097ce3157eb68451e23070
Parents: 327f358
Author: Alan Conway <ac...@redhat.com>
Authored: Wed Jun 17 17:11:47 2015 -0400
Committer: Alan Conway <ac...@redhat.com>
Committed: Thu Jun 18 17:55:28 2015 -0400
----------------------------------------------------------------------
examples/cpp/CMakeLists.txt | 4 +-
examples/cpp/encode_decode.cpp | 2 +-
examples/cpp/example_test.py | 35 +-
proton-c/bindings/cpp/CMakeCache.txt | 334 +++++++++++++++++++
proton-c/bindings/cpp/CMakeLists.txt | 38 ++-
.../bindings/cpp/include/proton/Acceptor.hpp | 5 +-
proton-c/bindings/cpp/include/proton/Acking.hpp | 2 +-
.../cpp/include/proton/BlockingConnection.hpp | 2 +-
.../cpp/include/proton/BlockingLink.hpp | 6 +-
.../cpp/include/proton/BlockingSender.hpp | 2 +-
.../bindings/cpp/include/proton/Connection.hpp | 2 +-
.../bindings/cpp/include/proton/Container.hpp | 2 +-
proton-c/bindings/cpp/include/proton/Data.hpp | 33 +-
.../bindings/cpp/include/proton/Decoder.hpp | 22 +-
.../bindings/cpp/include/proton/Delivery.hpp | 2 +-
.../bindings/cpp/include/proton/Duration.hpp | 18 +-
.../bindings/cpp/include/proton/Encoder.hpp | 85 ++---
.../bindings/cpp/include/proton/Endpoint.hpp | 6 +-
proton-c/bindings/cpp/include/proton/Error.hpp | 8 +-
proton-c/bindings/cpp/include/proton/Event.hpp | 8 +-
proton-c/bindings/cpp/include/proton/Handle.hpp | 16 +-
.../bindings/cpp/include/proton/Handler.hpp | 4 +-
.../cpp/include/proton/ImportExport.hpp | 50 ---
proton-c/bindings/cpp/include/proton/Link.hpp | 4 +-
.../bindings/cpp/include/proton/Message.hpp | 78 ++---
.../cpp/include/proton/MessagingHandler.hpp | 88 ++---
.../cpp/include/proton/ProtonHandle.hpp | 12 +-
.../cpp/include/proton/ProtonHandler.hpp | 82 ++---
.../bindings/cpp/include/proton/Receiver.hpp | 4 +-
proton-c/bindings/cpp/include/proton/Sender.hpp | 8 +-
.../bindings/cpp/include/proton/Session.hpp | 9 +-
.../bindings/cpp/include/proton/Terminus.hpp | 2 +-
.../bindings/cpp/include/proton/Transport.hpp | 2 +-
proton-c/bindings/cpp/include/proton/Value.hpp | 26 +-
proton-c/bindings/cpp/include/proton/Values.hpp | 15 +-
.../cpp/include/proton/WaitCondition.hpp | 2 +-
proton-c/bindings/cpp/include/proton/export.hpp | 46 +++
.../bindings/cpp/include/proton/type_traits.hpp | 116 +++++++
proton-c/bindings/cpp/include/proton/types.hpp | 147 ++++----
.../bindings/cpp/src/BlockingConnection.cpp | 62 ++++
.../bindings/cpp/src/BlockingConnectionImpl.cpp | 124 +++++++
.../bindings/cpp/src/BlockingConnectionImpl.hpp | 63 ++++
proton-c/bindings/cpp/src/BlockingLink.cpp | 86 +++++
proton-c/bindings/cpp/src/BlockingSender.cpp | 66 ++++
proton-c/bindings/cpp/src/ConnectionImpl.hpp | 2 +-
proton-c/bindings/cpp/src/ContainerImpl.hpp | 2 +-
proton-c/bindings/cpp/src/Decoder.cpp | 3 +-
proton-c/bindings/cpp/src/Duration.cpp | 2 +-
proton-c/bindings/cpp/src/Encoder.cpp | 3 +-
proton-c/bindings/cpp/src/Error.cpp | 4 +-
proton-c/bindings/cpp/src/MessagingAdapter.cpp | 2 +-
proton-c/bindings/cpp/src/PrivateImplRef.hpp | 2 +-
proton-c/bindings/cpp/src/ProtonImplRef.hpp | 2 +-
proton-c/bindings/cpp/src/Sender.cpp | 9 +-
proton-c/bindings/cpp/src/Session.cpp | 1 +
proton-c/bindings/cpp/src/Url.hpp | 2 +-
.../cpp/src/blocking/BlockingConnection.cpp | 62 ----
.../cpp/src/blocking/BlockingConnectionImpl.cpp | 124 -------
.../cpp/src/blocking/BlockingConnectionImpl.hpp | 63 ----
.../bindings/cpp/src/blocking/BlockingLink.cpp | 86 -----
.../cpp/src/blocking/BlockingSender.cpp | 66 ----
proton-c/bindings/cpp/src/interop_test.cpp | 36 +-
proton-c/bindings/cpp/src/proton_bits.hpp | 1 +
proton-c/bindings/cpp/src/types.cpp | 43 ++-
proton-c/include/proton/codec.h | 2 +-
65 files changed, 1391 insertions(+), 854 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/examples/cpp/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt
index bafcd38..7a9f911 100644
--- a/examples/cpp/CMakeLists.txt
+++ b/examples/cpp/CMakeLists.txt
@@ -17,7 +17,9 @@
# under the License.
#
-include_directories("${CMAKE_SOURCE_DIR}/proton-c/bindings/cpp/include")
+include_directories(
+ "${CMAKE_SOURCE_DIR}/proton-c/include"
+ "${CMAKE_SOURCE_DIR}/proton-c/bindings/cpp/include")
foreach(example
broker
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/examples/cpp/encode_decode.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/encode_decode.cpp b/examples/cpp/encode_decode.cpp
index cad4c0e..fd65ebd 100644
--- a/examples/cpp/encode_decode.cpp
+++ b/examples/cpp/encode_decode.cpp
@@ -68,7 +68,7 @@ void simple_insert_extract_exact_type() {
// Check that we encoded the correct types, but note that decoding will
// still convert to standard C++ types, in particular any AMQP integer type
// can be converted to a long-enough C++ integer type..
- int64_t i1, i2;
+ std::int64_t i1, i2;
std::string s;
values >> i1 >> i2 >> s;
cout << "Extracted (with conversion) " << i1 << ", " << i2 << ", " << s << endl;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/examples/cpp/example_test.py
----------------------------------------------------------------------
diff --git a/examples/cpp/example_test.py b/examples/cpp/example_test.py
index 2e2d91c..8507be8 100644
--- a/examples/cpp/example_test.py
+++ b/examples/cpp/example_test.py
@@ -22,7 +22,18 @@
import unittest
import os, sys, socket, time
from random import randrange
-from subprocess import Popen, check_output, PIPE, STDOUT
+from subprocess import Popen, PIPE, STDOUT
+
+def call(*args, **kwargs):
+ p = Popen(*args, stdout=PIPE, stderr=STDOUT, **kwargs)
+ out, err = p.communicate()
+ if p.returncode:
+ raise CalledProcessError("""%s exit code %s
+vvvvvvvvvvvvvvvv output of %s exit code %s vvvvvvvvvvvvvvvv
+%s
+^^^^^^^^^^^^^^^^ output of %s exit code %s ^^^^^^^^^^^^^^^^""" % (
+ p.cmd, p.returncode, p.cmd, p.returncode, out, p.cmd, p.returncode))
+ return out
NULL = open(os.devnull, 'w')
@@ -68,25 +79,25 @@ class ExampleTest(unittest.TestCase):
def test_helloworld(self):
b = Broker.get()
- hw = check_output(["./helloworld", b.addr])
+ hw = call(["./helloworld", b.addr])
self.assertEqual("Hello World!\n", hw)
def test_helloworld_blocking(self):
b = Broker.get()
- hw = check_output(["./helloworld_blocking", b.addr])
+ hw = call(["./helloworld_blocking", b.addr])
self.assertEqual("Hello World!\n", hw)
def test_helloworld_direct(self):
url = ":%s/examples" % randrange(10000, 20000)
- hw = check_output(["./helloworld_direct", url])
+ hw = call(["./helloworld_direct", url])
self.assertEqual("Hello World!\n", hw)
def test_simple_send_recv(self):
b = Broker.get()
n = 5
- send = check_output(["./simple_send", "-a", b.addr, "-m", str(n)])
+ send = call(["./simple_send", "-a", b.addr, "-m", str(n)])
self.assertEqual("all messages confirmed\n", send)
- recv = check_output(["./simple_recv", "-a", b.addr, "-m", str(n)])
+ recv = call(["./simple_recv", "-a", b.addr, "-m", str(n)])
recv_expect = "simple_recv listening on %s\n" % (b.addr)
recv_expect += "".join(['{"sequence"=%s}\n' % (i+1) for i in range(n)])
self.assertEqual(recv_expect, recv)
@@ -99,20 +110,12 @@ class ExampleTest(unittest.TestCase):
n = 5
recv = Popen(["./simple_recv", "-a", b.addr, "-m", str(n)], stdout=PIPE)
self.assertEqual("simple_recv listening on %s\n" % (b.addr), recv.stdout.readline())
- send = check_output(["./simple_send", "-a", b.addr, "-m", str(n)])
+ send = call(["./simple_send", "-a", b.addr, "-m", str(n)])
self.assertEqual("all messages confirmed\n", send)
recv_expect = "".join(['[%d]: b"some arbitrary binary data"\n' % (i+1) for i in range(n)])
out, err = recv.communicate()
self.assertEqual(recv_expect, out)
- def call(self, *cmd):
- p = Popen(cmd, stdout=PIPE, stderr=STDOUT)
- out, err = p.communicate()
- self.assertEqual(0, p.returncode,
- "%s exit code %s, output:\n%s\n---- end of %s exit code %s" % (
- cmd, p.returncode, out, cmd, p.returncode))
- return out
-
def test_encode_decode(self):
expect="""
== Simple values: int, string, bool
@@ -140,6 +143,6 @@ Values: list[int(42), bool(false), symbol(:x)]
Values: map{string("k1"):int(42), symbol(:"k2"):bool(false)}
"""
self.maxDiff = None
- self.assertMultiLineEqual(expect, self.call("./encode_decode"))
+ self.assertMultiLineEqual(expect, call("./encode_decode"))
if __name__ == "__main__":
unittest.main()
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/CMakeCache.txt
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/CMakeCache.txt b/proton-c/bindings/cpp/CMakeCache.txt
new file mode 100644
index 0000000..9e6eaeb
--- /dev/null
+++ b/proton-c/bindings/cpp/CMakeCache.txt
@@ -0,0 +1,334 @@
+# This is the CMakeCache file.
+# For build in directory: /home/aconway/proton/proton-c/bindings/cpp
+# It was generated by CMake: /usr/bin/cmake
+# You can edit this file to change values found and used by cmake.
+# If you do not want to change any of the values, simply exit the editor.
+# If you do want to change a value, simply edit, save, and exit the editor.
+# The syntax for the file is as follows:
+# KEY:TYPE=VALUE
+# KEY is the name of a variable in the cache.
+# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.
+# VALUE is the current value for the KEY.
+
+########################
+# EXTERNAL cache entries
+########################
+
+//Build cpp language binding
+BUILD_CPP:BOOL=ON
+
+//Build javascript language binding
+BUILD_JAVASCRIPT:BOOL=OFF
+
+//Path to a program.
+CMAKE_AR:FILEPATH=/usr/bin/ar
+
+//For backwards compatibility, what version of CMake commands and
+// syntax should this version of CMake try to support.
+CMAKE_BACKWARDS_COMPATIBILITY:STRING=2.4
+
+//Choose the type of build, options are: None(CMAKE_CXX_FLAGS or
+// CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.
+CMAKE_BUILD_TYPE:STRING=
+
+//Enable/Disable color output during build.
+CMAKE_COLOR_MAKEFILE:BOOL=ON
+
+//CXX compiler
+CMAKE_CXX_COMPILER:FILEPATH=/usr/lib64/ccache/c++
+
+//Flags used by the compiler during all build types.
+CMAKE_CXX_FLAGS:STRING=
+
+//Flags used by the compiler during debug builds.
+CMAKE_CXX_FLAGS_DEBUG:STRING=-g
+
+//Flags used by the compiler during release builds for minimum
+// size.
+CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
+
+//Flags used by the compiler during release builds.
+CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
+
+//Flags used by the compiler during release builds with debug info.
+CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
+
+//C compiler
+CMAKE_C_COMPILER:FILEPATH=/usr/lib64/ccache/cc
+
+//Flags used by the compiler during all build types.
+CMAKE_C_FLAGS:STRING=
+
+//Flags used by the compiler during debug builds.
+CMAKE_C_FLAGS_DEBUG:STRING=-g
+
+//Flags used by the compiler during release builds for minimum
+// size.
+CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
+
+//Flags used by the compiler during release builds.
+CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
+
+//Flags used by the compiler during release builds with debug info.
+CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
+
+//Flags used by the linker.
+CMAKE_EXE_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during debug builds.
+CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during release minsize builds.
+CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during release builds.
+CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during Release with Debug Info builds.
+CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Enable/Disable output of compile commands during generation.
+CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF
+
+//Install path prefix, prepended onto install directories.
+CMAKE_INSTALL_PREFIX:PATH=/usr/local
+
+//Path to a program.
+CMAKE_LINKER:FILEPATH=/usr/bin/ld
+
+//Path to a program.
+CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/gmake
+
+//Flags used by the linker during the creation of modules.
+CMAKE_MODULE_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during debug builds.
+CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during release minsize builds.
+CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during release builds.
+CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during Release with Debug Info builds.
+CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_NM:FILEPATH=/usr/bin/nm
+
+//Path to a program.
+CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy
+
+//Path to a program.
+CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump
+
+//Value Computed by CMake
+CMAKE_PROJECT_NAME:STATIC=Project
+
+//Path to a program.
+CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib
+
+//Flags used by the linker during the creation of dll's.
+CMAKE_SHARED_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during debug builds.
+CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during release minsize builds.
+CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during release builds.
+CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during Release with Debug Info builds.
+CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//If set, runtime paths are not added when installing shared libraries,
+// but are added when building.
+CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
+
+//If set, runtime paths are not added when using shared libraries.
+CMAKE_SKIP_RPATH:BOOL=NO
+
+//Flags used by the linker during the creation of static libraries.
+CMAKE_STATIC_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during debug builds.
+CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during release minsize builds.
+CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during release builds.
+CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during Release with Debug Info builds.
+CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_STRIP:FILEPATH=/usr/bin/strip
+
+//If true, cmake will use relative paths in makefiles and projects.
+CMAKE_USE_RELATIVE_PATHS:BOOL=OFF
+
+//If this value is on, makefiles will be generated without the
+// .SILENT directive, and all commands will be echoed to the console
+// during the make. This is useful for debugging only. With Visual
+// Studio IDE projects all commands are done without /nologo.
+CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
+
+//Single output directory for building all executables.
+EXECUTABLE_OUTPUT_PATH:PATH=
+
+//The directory containing a CMake configuration file for Emscripten.
+Emscripten_DIR:PATH=Emscripten_DIR-NOTFOUND
+
+//Single output directory for building all libraries.
+LIBRARY_OUTPUT_PATH:PATH=
+
+//Value Computed by CMake
+Project_BINARY_DIR:STATIC=/home/aconway/proton/proton-c/bindings/cpp
+
+//Value Computed by CMake
+Project_SOURCE_DIR:STATIC=/home/aconway/proton/proton-c/bindings
+
+//Dependencies for the target
+qpid-proton-cpp_LIB_DEPENDS:STATIC=general;qpid-proton;
+
+
+########################
+# INTERNAL cache entries
+########################
+
+//ADVANCED property for variable: CMAKE_AR
+CMAKE_AR-ADVANCED:INTERNAL=1
+//This is the directory where this CMakeCache.txt was created
+CMAKE_CACHEFILE_DIR:INTERNAL=/home/aconway/proton/proton-c/bindings/cpp
+//Major version of cmake used to create the current loaded cache
+CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3
+//Minor version of cmake used to create the current loaded cache
+CMAKE_CACHE_MINOR_VERSION:INTERNAL=2
+//Patch version of cmake used to create the current loaded cache
+CMAKE_CACHE_PATCH_VERSION:INTERNAL=2
+//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE
+CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1
+//Path to CMake executable.
+CMAKE_COMMAND:INTERNAL=/usr/bin/cmake
+//Path to cpack program executable.
+CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack
+//Path to ctest program executable.
+CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest
+//ADVANCED property for variable: CMAKE_CXX_COMPILER
+CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS
+CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG
+CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL
+CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE
+CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO
+CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_COMPILER
+CMAKE_C_COMPILER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS
+CMAKE_C_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG
+CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL
+CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE
+CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO
+CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//Path to cache edit program executable.
+CMAKE_EDIT_COMMAND:INTERNAL=/usr/bin/ccmake
+//Executable file format
+CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS
+CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG
+CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL
+CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE
+CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS
+CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1
+//Name of external makefile project generator.
+CMAKE_EXTRA_GENERATOR:INTERNAL=
+//Name of generator.
+CMAKE_GENERATOR:INTERNAL=Unix Makefiles
+//Name of generator platform.
+CMAKE_GENERATOR_PLATFORM:INTERNAL=
+//Name of generator toolset.
+CMAKE_GENERATOR_TOOLSET:INTERNAL=
+//Start directory with the top level CMakeLists.txt file for this
+// project
+CMAKE_HOME_DIRECTORY:INTERNAL=/home/aconway/proton/proton-c/bindings
+//Install .so files without execute permission.
+CMAKE_INSTALL_SO_NO_EXE:INTERNAL=0
+//ADVANCED property for variable: CMAKE_LINKER
+CMAKE_LINKER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MAKE_PROGRAM
+CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS
+CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG
+CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL
+CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE
+CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_NM
+CMAKE_NM-ADVANCED:INTERNAL=1
+//number of local generators
+CMAKE_NUMBER_OF_LOCAL_GENERATORS:INTERNAL=2
+//ADVANCED property for variable: CMAKE_OBJCOPY
+CMAKE_OBJCOPY-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_OBJDUMP
+CMAKE_OBJDUMP-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RANLIB
+CMAKE_RANLIB-ADVANCED:INTERNAL=1
+//Path to CMake installation.
+CMAKE_ROOT:INTERNAL=/usr/share/cmake
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS
+CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG
+CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL
+CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE
+CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH
+CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SKIP_RPATH
+CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS
+CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG
+CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL
+CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE
+CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STRIP
+CMAKE_STRIP-ADVANCED:INTERNAL=1
+//uname command
+CMAKE_UNAME:INTERNAL=/usr/bin/uname
+//ADVANCED property for variable: CMAKE_USE_RELATIVE_PATHS
+CMAKE_USE_RELATIVE_PATHS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE
+CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1
+//Result of TRY_COMPILE
+RESULT:INTERNAL=TRUE
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/CMakeLists.txt b/proton-c/bindings/cpp/CMakeLists.txt
index f3fbb44..462e2bf 100644
--- a/proton-c/bindings/cpp/CMakeLists.txt
+++ b/proton-c/bindings/cpp/CMakeLists.txt
@@ -17,10 +17,26 @@
# under the License.
#
-## Build
+set(CPP_FLAGS ${CXX_WARNING_FLAGS})
-include_directories ("${CMAKE_CURRENT_SOURCE_DIR}/src")
-include_directories ("${CMAKE_CURRENT_SOURCE_DIR}/include")
+## Check compiler capabilities.
+macro(compiler_test RESULT_VAR NAME CODE)
+ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${NAME} "${CODE}")
+ try_compile(${RESULT_VAR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${NAME})
+endmacro()
+
+compiler_test(RESULT has_long_long.cpp "long long ll; int main(int, char**) { return 0; }")
+if (RESULT)
+ message("C++ compiler has long long")
+ set(CPP_FLAGS "${CPP_FLAGS} -DHAS_LONG_LONG")
+else()
+ message("C++ compiler does not have long long")
+endif()
+
+include_directories(
+ "${CMAKE_SOURCE_DIR}/proton-c/include"
+ "${CMAKE_CURRENT_SOURCE_DIR}/include"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src")
set(qpid-proton-cpp-source
src/Acceptor.cpp
@@ -55,15 +71,19 @@ set(qpid-proton-cpp-source
src/Value.cpp
src/Values.cpp
src/proton_bits.cpp
- src/blocking/BlockingConnection.cpp
- src/blocking/BlockingConnectionImpl.cpp
- src/blocking/BlockingLink.cpp
- src/blocking/BlockingSender.cpp
+ src/BlockingConnection.cpp
+ src/BlockingConnectionImpl.cpp
+ src/BlockingLink.cpp
+ src/BlockingSender.cpp
src/contexts.cpp
src/types.cpp
)
-set_source_files_properties(${qpid-proton-cpp-source} PROPERTIES COMPILE_FLAGS "${CXX_WARNING_FLAGS}")
+set_source_files_properties (
+ ${qpid-proton-cpp-source}
+ PROPERTIES
+ COMPILE_FLAGS "${CPP_FLAGS}"
+ )
add_library(qpid-proton-cpp SHARED ${qpid-proton-cpp-source})
@@ -100,7 +120,7 @@ add_cpp_test(interop_test ${CMAKE_SOURCE_DIR}/tests)
## Install
-install (TARGETS qpid-proton-cpp
+install(TARGETS qpid-proton-cpp
EXPORT proton
ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
LIBRARY DESTINATION ${LIB_INSTALL_DIR})
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Acceptor.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Acceptor.hpp b/proton-c/bindings/cpp/include/proton/Acceptor.hpp
index 591af2c..5702c10 100644
--- a/proton-c/bindings/cpp/include/proton/Acceptor.hpp
+++ b/proton-c/bindings/cpp/include/proton/Acceptor.hpp
@@ -21,9 +21,10 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
-#include "proton/ProtonHandle.hpp"
+
#include "proton/reactor.h"
+#include "proton/export.hpp"
+#include "proton/ProtonHandle.hpp"
struct pn_connection_t;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Acking.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Acking.hpp b/proton-c/bindings/cpp/include/proton/Acking.hpp
index 67da0b1..327f1a1 100644
--- a/proton-c/bindings/cpp/include/proton/Acking.hpp
+++ b/proton-c/bindings/cpp/include/proton/Acking.hpp
@@ -22,7 +22,7 @@
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/Delivery.hpp"
namespace proton {
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/BlockingConnection.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/BlockingConnection.hpp b/proton-c/bindings/cpp/include/proton/BlockingConnection.hpp
index 77345c4..5b01136 100644
--- a/proton-c/bindings/cpp/include/proton/BlockingConnection.hpp
+++ b/proton-c/bindings/cpp/include/proton/BlockingConnection.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/Handle.hpp"
#include "proton/Endpoint.hpp"
#include "proton/Container.hpp"
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/BlockingLink.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/BlockingLink.hpp b/proton-c/bindings/cpp/include/proton/BlockingLink.hpp
index 80df739..b1a5915 100644
--- a/proton-c/bindings/cpp/include/proton/BlockingLink.hpp
+++ b/proton-c/bindings/cpp/include/proton/BlockingLink.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/Handle.hpp"
#include "proton/Endpoint.hpp"
#include "proton/Container.hpp"
@@ -40,14 +40,14 @@ class BlockingLink
{
public:
PN_CPP_EXTERN void close();
- ~BlockingLink();
+ PN_CPP_EXTERN ~BlockingLink();
protected:
PN_CPP_EXTERN BlockingLink(BlockingConnection *c, pn_link_t *l);
PN_CPP_EXTERN void waitForClosed(Duration timeout=Duration::SECOND);
private:
BlockingConnection connection;
Link link;
- void checkClosed();
+ PN_CPP_EXTERN void checkClosed();
friend class BlockingConnection;
friend class BlockingSender;
friend class BlockingReceiver;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/BlockingSender.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/BlockingSender.hpp b/proton-c/bindings/cpp/include/proton/BlockingSender.hpp
index 25f09bb..5d95df5 100644
--- a/proton-c/bindings/cpp/include/proton/BlockingSender.hpp
+++ b/proton-c/bindings/cpp/include/proton/BlockingSender.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/Handle.hpp"
#include "proton/Endpoint.hpp"
#include "proton/Container.hpp"
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Connection.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Connection.hpp b/proton-c/bindings/cpp/include/proton/Connection.hpp
index 5656889..c16556b 100644
--- a/proton-c/bindings/cpp/include/proton/Connection.hpp
+++ b/proton-c/bindings/cpp/include/proton/Connection.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/Handle.hpp"
#include "proton/Endpoint.hpp"
#include "proton/Container.hpp"
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Container.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Container.hpp b/proton-c/bindings/cpp/include/proton/Container.hpp
index 7333566..c1ecb65 100644
--- a/proton-c/bindings/cpp/include/proton/Container.hpp
+++ b/proton-c/bindings/cpp/include/proton/Container.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/Handle.hpp"
#include "proton/Acceptor.hpp"
#include "proton/Duration.hpp"
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Data.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Data.hpp b/proton-c/bindings/cpp/include/proton/Data.hpp
index 30f85b7..77df52f 100644
--- a/proton-c/bindings/cpp/include/proton/Data.hpp
+++ b/proton-c/bindings/cpp/include/proton/Data.hpp
@@ -19,7 +19,7 @@
* under the License.
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include <iosfwd>
/**@file
@@ -31,37 +31,36 @@ struct pn_data_t;
namespace proton {
/** Base for classes that hold AMQP data. */
-PN_CPP_EXTERN class Data {
+class Data {
public:
- explicit Data();
- virtual ~Data();
- Data(const Data&);
-
- Data& operator=(const Data&);
+ PN_CPP_EXTERN explicit Data();
+ PN_CPP_EXTERN Data(const Data&);
+ PN_CPP_EXTERN virtual ~Data();
+ PN_CPP_EXTERN Data& operator=(const Data&);
/** Clear the data. */
- void clear();
+ PN_CPP_EXTERN void clear();
/** True if there are no values. */
- bool empty() const;
-
- /** Human readable representation of data. */
- friend std::ostream& operator<<(std::ostream&, const Data&);
+ PN_CPP_EXTERN bool empty() const;
/** The underlying pn_data_t */
- pn_data_t* pnData() { return data; }
+ PN_CPP_EXTERN pn_data_t* pnData() { return data; }
/** True if this Data object owns it's own pn_data_t, false if it is acting as a "view" */
- bool own() const { return own_; }
+ PN_CPP_EXTERN bool own() const { return own_; }
- void swap(Data&);
+ PN_CPP_EXTERN void swap(Data&);
+
+ /** Human readable representation of data. */
+ friend PN_CPP_EXTERN std::ostream& operator<<(std::ostream&, const Data&);
protected:
/** Does not take ownership, just a view on the data */
- explicit Data(pn_data_t*);
+ PN_CPP_EXTERN explicit Data(pn_data_t*);
/** Does not take ownership, just a view on the data */
- void view(pn_data_t*);
+ PN_CPP_EXTERN void view(pn_data_t*);
mutable pn_data_t* data;
bool own_;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Decoder.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Decoder.hpp b/proton-c/bindings/cpp/include/proton/Decoder.hpp
index c3da9dc..11cd5fb 100644
--- a/proton-c/bindings/cpp/include/proton/Decoder.hpp
+++ b/proton-c/bindings/cpp/include/proton/Decoder.hpp
@@ -20,8 +20,9 @@
*/
#include "proton/Data.hpp"
-#include "proton/types.hpp"
#include "proton/Error.hpp"
+#include "proton/type_traits.hpp"
+#include "proton/types.hpp"
#include <iosfwd>
namespace proton {
@@ -29,7 +30,7 @@ namespace proton {
class Value;
/** Raised by Decoder operations on error */
-struct DecodeError : public Error { explicit DecodeError(const std::string&) throw(); };
+struct DecodeError : public Error { PN_CPP_EXTERN explicit DecodeError(const std::string&) throw(); };
/**@file
* Stream-like decoder from AMQP bytes to C++ values.
@@ -64,7 +65,7 @@ extracting AMQP maps.
You can also extract container values element-by-element, see the Start class.
*/
-PN_CPP_EXTERN class Decoder : public virtual Data {
+class Decoder : public virtual Data {
public:
PN_CPP_EXTERN Decoder();
@@ -171,16 +172,21 @@ PN_CPP_EXTERN class Decoder : public virtual Data {
private:
template <class T> Decoder& extract(T& value);
- void checkType(TypeId);
-
- // Not implemented
- Decoder(const Decoder&);
- Decoder& operator=(const Decoder&);
+ PN_CPP_EXTERN void checkType(TypeId);
friend class Value;
friend class Encoder;
};
+// operator >> for integer types that are not covered by the standard overrides.
+template <class T>
+typename std::enable_if<IsUnknownInteger<T>::value, Decoder&>::type operator>>(Decoder& d, T& i) {
+ typename IntegerType<sizeof(T), std::is_signed<T>::value>::type v;
+ d >> v; // Extract as a known integer type
+ i = v;
+ return d;
+}
+
template <class T> Decoder& operator>>(Decoder& d, Ref<T, ARRAY> ref) {
Decoder::Scope s(d);
if (s.isDescribed) d >> skip();
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Delivery.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Delivery.hpp b/proton-c/bindings/cpp/include/proton/Delivery.hpp
index b90f7fa..110b1ce 100644
--- a/proton-c/bindings/cpp/include/proton/Delivery.hpp
+++ b/proton-c/bindings/cpp/include/proton/Delivery.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/ProtonHandle.hpp"
#include "proton/delivery.h"
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Duration.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Duration.hpp b/proton-c/bindings/cpp/include/proton/Duration.hpp
index 288ef9d..596b4d0 100644
--- a/proton-c/bindings/cpp/include/proton/Duration.hpp
+++ b/proton-c/bindings/cpp/include/proton/Duration.hpp
@@ -22,7 +22,7 @@
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/types.hpp"
namespace proton {
@@ -33,20 +33,20 @@ namespace proton {
class Duration : public Comparable<Duration>
{
public:
- uint64_t milliseconds;
- explicit Duration(uint64_t ms) : milliseconds(ms) {}
+ std::uint64_t milliseconds;
+ explicit Duration(std::uint64_t ms) : milliseconds(ms) {}
bool operator<(Duration d) { return milliseconds < d.milliseconds; }
bool operator==(Duration d) { return milliseconds == d.milliseconds; }
- static const Duration FOREVER;
- static const Duration IMMEDIATE;
- static const Duration SECOND;
- static const Duration MINUTE;
+ PN_CPP_EXTERN static const Duration FOREVER;
+ PN_CPP_EXTERN static const Duration IMMEDIATE;
+ PN_CPP_EXTERN static const Duration SECOND;
+ PN_CPP_EXTERN static const Duration MINUTE;
};
-inline Duration operator*(Duration d, uint64_t n) { return Duration(d.milliseconds*n); }
-inline Duration operator*(uint64_t n, Duration d) { return d * n; }
+inline Duration operator*(Duration d, std::uint64_t n) { return Duration(d.milliseconds*n); }
+inline Duration operator*(std::uint64_t n, Duration d) { return d * n; }
inline Timestamp operator+(Timestamp ts, Duration d) { return Timestamp(ts.milliseconds+d.milliseconds); }
inline Timestamp operator+(Duration d, Timestamp ts) { return ts + d; }
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Encoder.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Encoder.hpp b/proton-c/bindings/cpp/include/proton/Encoder.hpp
index aaa8d93..8b2f77c 100644
--- a/proton-c/bindings/cpp/include/proton/Encoder.hpp
+++ b/proton-c/bindings/cpp/include/proton/Encoder.hpp
@@ -20,15 +20,17 @@
*/
#include "proton/Data.hpp"
-#include "proton/types.hpp"
#include "proton/Error.hpp"
+#include "proton/types.hpp"
+#include "proton/type_traits.hpp"
#include <iosfwd>
+#include <iostream> // FIXME aconway 2015-06-18:
+
struct pn_data_t;
namespace proton {
-
class Value;
/**@file
@@ -37,7 +39,7 @@ class Value;
*/
/** Raised by Encoder operations on error */
-struct EncodeError : public Error { explicit EncodeError(const std::string&) throw(); };
+struct EncodeError : public Error { PN_CPP_EXTERN explicit EncodeError(const std::string&) throw(); };
/**
@ingroup cpp
@@ -84,41 +86,41 @@ class Encoder : public virtual Data {
/** @name Insert simple types.
*@{
*/
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Null);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Bool);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Ubyte);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Byte);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Ushort);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Short);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Uint);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Int);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Char);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Ulong);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Long);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Timestamp);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Float);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Double);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Decimal32);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Decimal64);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Decimal128);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Uuid);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, String);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Symbol);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, Binary);
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, const Value&);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Null);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Bool);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Ubyte);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Byte);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Ushort);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Short);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Uint);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Int);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Char);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Ulong);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Long);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Timestamp);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Float);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Double);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Decimal32);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Decimal64);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Decimal128);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Uuid);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, String);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Symbol);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, Binary);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, const Value&);
///@}
/** Start a container type. See the Start class. */
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, const Start&);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, const Start&);
/** Finish a container type. */
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder& e, Finish);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder& e, Finish);
/**@name Insert values returned by the as<TypeId> helper.
*@{
*/
- template <class T, TypeId A> friend Encoder& operator<<(Encoder&, CRef<T, A>);
+ template <class T, TypeId A> friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, CRef<T, A>);
template <class T> friend Encoder& operator<<(Encoder&, CRef<T, ARRAY>);
template <class T> friend Encoder& operator<<(Encoder&, CRef<T, LIST>);
template <class T> friend Encoder& operator<<(Encoder&, CRef<T, MAP>);
@@ -126,29 +128,24 @@ class Encoder : public virtual Data {
///@}
/** Copy data from a raw pn_data_t */
- PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, pn_data_t*);
+ friend PN_CPP_EXTERN Encoder& operator<<(Encoder&, pn_data_t*);
+
private:
PN_CPP_EXTERN Encoder(pn_data_t* pd);
- // Not implemented
- Encoder(const Encoder&);
- Encoder& operator=(const Encoder&);
-
friend class Value;
};
-/** Encode const char* as string */
-inline Encoder& operator<<(Encoder& e, const char* s) { return e << String(s); }
-
-/** Encode char* as string */
+// Need to disambiguate char* conversion to bool and std::string as String.
inline Encoder& operator<<(Encoder& e, char* s) { return e << String(s); }
-
-/** Encode std::string as string */
+inline Encoder& operator<<(Encoder& e, const char* s) { return e << String(s); }
inline Encoder& operator<<(Encoder& e, const std::string& s) { return e << String(s); }
-//@internal Convert a Ref to a CRef.
-template <class T, TypeId A> Encoder& operator<<(Encoder& e, Ref<T, A> ref) {
- return e << CRef<T,A>(ref);
+// operator << for integer types that are not covered by the standard overrides.
+template <class T>
+typename std::enable_if<IsUnknownInteger<T>::value, Encoder&>::type operator<<(Encoder& e, T i) {
+ typename IntegerType<sizeof(T), std::is_signed<T>::value>::type v = i;
+ return e << v; // Insert as a known integer type
}
// TODO aconway 2015-06-16: described array insertion.
@@ -178,6 +175,10 @@ template <class T> Encoder& operator<<(Encoder& e, CRef<T, MAP> m){
e << finish();
return e;
}
+//@internal Convert a Ref to a CRef.
+template <class T, TypeId A> Encoder& operator<<(Encoder& e, Ref<T, A> ref) {
+ return e << CRef<T,A>(ref);
+}
}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Endpoint.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Endpoint.hpp b/proton-c/bindings/cpp/include/proton/Endpoint.hpp
index 2736047..645ca0f 100644
--- a/proton-c/bindings/cpp/include/proton/Endpoint.hpp
+++ b/proton-c/bindings/cpp/include/proton/Endpoint.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/connection.h"
namespace proton {
@@ -48,8 +48,8 @@ class Endpoint
virtual PN_CPP_EXTERN Connection &getConnection() = 0;
Transport PN_CPP_EXTERN &getTransport();
protected:
- Endpoint();
- ~Endpoint();
+ PN_CPP_EXTERN Endpoint();
+ PN_CPP_EXTERN ~Endpoint();
};
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Error.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Error.hpp b/proton-c/bindings/cpp/include/proton/Error.hpp
index a3d3242..578c3d6 100644
--- a/proton-c/bindings/cpp/include/proton/Error.hpp
+++ b/proton-c/bindings/cpp/include/proton/Error.hpp
@@ -22,19 +22,21 @@
*
*/
#include <stdexcept>
+#include <string>
+#include "proton/export.hpp"
namespace proton {
/** @ingroup cpp
* Functions in the proton namespace throw a subclass of proton::Error on error.
*/
-struct Error : public std::runtime_error { explicit Error(const std::string&) throw(); };
+struct Error : public std::runtime_error { PN_CPP_EXTERN explicit Error(const std::string&) throw(); };
/** Raised if a message is rejected */
-struct MessageReject : public Error { explicit MessageReject(const std::string&) throw(); };
+struct MessageReject : public Error { PN_CPP_EXTERN explicit MessageReject(const std::string&) throw(); };
/** Raised if a message is released */
-struct MessageRelease : public Error { explicit MessageRelease(const std::string&) throw(); };
+struct MessageRelease : public Error { PN_CPP_EXTERN explicit MessageRelease(const std::string&) throw(); };
}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Event.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Event.hpp b/proton-c/bindings/cpp/include/proton/Event.hpp
index db85c9c..3fbb6a7 100644
--- a/proton-c/bindings/cpp/include/proton/Event.hpp
+++ b/proton-c/bindings/cpp/include/proton/Event.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/Link.hpp"
#include "proton/Connection.hpp"
#include "proton/Message.hpp"
@@ -48,10 +48,10 @@ class Event
virtual PN_CPP_EXTERN void setMessage(Message &);
virtual PN_CPP_EXTERN ~Event();
protected:
- PN_CPP_EXTERN PN_CPP_EXTERN Event();
+ PN_CPP_EXTERN Event();
private:
- PN_CPP_EXTERN Event(const Event&);
- PN_CPP_EXTERN Event& operator=(const Event&);
+ Event(const Event&);
+ Event& operator=(const Event&);
};
}}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Handle.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Handle.hpp b/proton-c/bindings/cpp/include/proton/Handle.hpp
index 648658b..916fd80 100644
--- a/proton-c/bindings/cpp/include/proton/Handle.hpp
+++ b/proton-c/bindings/cpp/include/proton/Handle.hpp
@@ -22,7 +22,7 @@
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
namespace proton {
namespace reactor {
@@ -43,20 +43,20 @@ template <class T> class Handle {
public:
/**@return true if handle is valid, i.e. not null. */
- PROTON_CPP_INLINE_EXTERN bool isValid() const { return impl; }
+ bool isValid() const { return impl; }
/**@return true if handle is null. It is an error to call any function on a null handle. */
- PROTON_CPP_INLINE_EXTERN bool isNull() const { return !impl; }
+ bool isNull() const { return !impl; }
/** Conversion to bool supports idiom if (handle) { handle->... } */
- PROTON_CPP_INLINE_EXTERN operator bool() const { return impl; }
+ operator bool() const { return impl; }
/** Operator ! supports idiom if (!handle) { do_if_handle_is_null(); } */
- PROTON_CPP_INLINE_EXTERN bool operator !() const { return !impl; }
+ bool operator !() const { return !impl; }
/** Operator == equal if they point to same non-null object*/
- PROTON_CPP_INLINE_EXTERN bool operator ==(const Handle<T>& other) const { return impl == other.impl; }
- PROTON_CPP_INLINE_EXTERN bool operator !=(const Handle<T>& other) const { return impl != other.impl; }
+ bool operator ==(const Handle<T>& other) const { return impl == other.impl; }
+ bool operator !=(const Handle<T>& other) const { return impl != other.impl; }
void swap(Handle<T>& h) { T* t = h.impl; h.impl = impl; impl = t; }
@@ -67,7 +67,7 @@ template <class T> class Handle {
protected:
typedef T Impl;
- PROTON_CPP_INLINE_EXTERN Handle() :impl() {}
+ Handle() : impl() {}
mutable Impl* impl;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Handler.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Handler.hpp b/proton-c/bindings/cpp/include/proton/Handler.hpp
index c66eecb..f7bb23b 100644
--- a/proton-c/bindings/cpp/include/proton/Handler.hpp
+++ b/proton-c/bindings/cpp/include/proton/Handler.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/Event.hpp"
#include "proton/event.h"
#include <vector>
@@ -29,7 +29,7 @@
namespace proton {
namespace reactor {
-class PN_CPP_EXTERN Handler
+class Handler
{
public:
PN_CPP_EXTERN Handler();
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/ImportExport.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/ImportExport.hpp b/proton-c/bindings/cpp/include/proton/ImportExport.hpp
deleted file mode 100644
index cbc0626..0000000
--- a/proton-c/bindings/cpp/include/proton/ImportExport.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef PROTON_CPP_IMPORTEXPORT_H
-#define PROTON_CPP_IMPORTEXPORT_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.
- *
- */
-#if defined(WIN32) && !defined(PROTON_CPP_DECLARE_STATIC)
- //
- // Import and Export definitions for Windows:
- //
-# define PROTON_CPP_EXPORT __declspec(dllexport)
-# define PROTON_CPP_IMPORT __declspec(dllimport)
-#else
- //
- // Non-Windows (Linux, etc.) definitions:
- //
-# define PROTON_CPP_EXPORT
-# define PROTON_CPP_IMPORT
-#endif
-
-
-// For c++ library symbols
-
-#ifdef protoncpp_EXPORTS
-# define PN_CPP_EXTERN PROTON_CPP_EXPORT
-#else
-# define PN_CPP_EXTERN PROTON_CPP_IMPORT
-#endif
-
-// TODO:
-#define PROTON_CPP_INLINE_EXTERN
-
-#endif /*!PROTON_CPP_IMPORTEXPORT_H*/
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Link.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Link.hpp b/proton-c/bindings/cpp/include/proton/Link.hpp
index 5500041..ac0e471 100644
--- a/proton-c/bindings/cpp/include/proton/Link.hpp
+++ b/proton-c/bindings/cpp/include/proton/Link.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/ProtonHandle.hpp"
#include "proton/Endpoint.hpp"
#include "proton/Terminus.hpp"
@@ -55,7 +55,7 @@ class Link : public Endpoint, public ProtonHandle<pn_link_t>
virtual PN_CPP_EXTERN Connection &getConnection();
PN_CPP_EXTERN Link getNext(Endpoint::State mask);
protected:
- virtual void verifyType(pn_link_t *l);
+ PN_CPP_EXTERN virtual void verifyType(pn_link_t *l);
private:
friend class ProtonImplRef<Link>;
bool senderLink;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Message.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Message.hpp b/proton-c/bindings/cpp/include/proton/Message.hpp
index b35eb18..c98dc31 100644
--- a/proton-c/bindings/cpp/include/proton/Message.hpp
+++ b/proton-c/bindings/cpp/include/proton/Message.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/ProtonHandle.hpp"
#include "proton/Value.hpp"
#include "proton/Message.hpp"
@@ -33,74 +33,74 @@ struct pn_data_t;
namespace proton {
// FIXME aconway 2015-06-17: documentation of properties.
-PN_CPP_EXTERN class Message : public reactor::ProtonHandle<pn_message_t>
+class Message : public reactor::ProtonHandle<pn_message_t>
{
public:
- Message();
- Message(pn_message_t *);
- Message(const Message&);
- Message& operator=(const Message&);
- ~Message();
+ PN_CPP_EXTERN Message();
+ PN_CPP_EXTERN Message(pn_message_t *);
+ PN_CPP_EXTERN Message(const Message&);
+ PN_CPP_EXTERN Message& operator=(const Message&);
+ PN_CPP_EXTERN ~Message();
- pn_message_t *pnMessage() const;
+ PN_CPP_EXTERN pn_message_t *pnMessage() const;
- void id(const Value& id);
- Value id() const;
+ PN_CPP_EXTERN void id(const Value& id);
+ PN_CPP_EXTERN Value id() const;
- void user(const std::string &user);
- std::string user() const;
+ PN_CPP_EXTERN void user(const std::string &user);
+ PN_CPP_EXTERN std::string user() const;
- void address(const std::string &addr);
- std::string address() const;
+ PN_CPP_EXTERN void address(const std::string &addr);
+ PN_CPP_EXTERN std::string address() const;
- void subject(const std::string &s);
- std::string subject() const;
+ PN_CPP_EXTERN void subject(const std::string &s);
+ PN_CPP_EXTERN std::string subject() const;
- void replyTo(const std::string &s);
- std::string replyTo() const;
+ PN_CPP_EXTERN void replyTo(const std::string &s);
+ PN_CPP_EXTERN std::string replyTo() const;
- void correlationId(const Value&);
- Value correlationId() const;
+ PN_CPP_EXTERN void correlationId(const Value&);
+ PN_CPP_EXTERN Value correlationId() const;
- void contentType(const std::string &s);
- std::string contentType() const;
+ PN_CPP_EXTERN void contentType(const std::string &s);
+ PN_CPP_EXTERN std::string contentType() const;
- void contentEncoding(const std::string &s);
- std::string contentEncoding() const;
+ PN_CPP_EXTERN void contentEncoding(const std::string &s);
+ PN_CPP_EXTERN std::string contentEncoding() const;
- void expiry(Timestamp t);
- Timestamp expiry() const;
+ PN_CPP_EXTERN void expiry(Timestamp t);
+ PN_CPP_EXTERN Timestamp expiry() const;
- void creationTime(Timestamp t);
- Timestamp creationTime() const;
+ PN_CPP_EXTERN void creationTime(Timestamp t);
+ PN_CPP_EXTERN Timestamp creationTime() const;
- void groupId(const std::string &s);
- std::string groupId() const;
+ PN_CPP_EXTERN void groupId(const std::string &s);
+ PN_CPP_EXTERN std::string groupId() const;
- void replyToGroupId(const std::string &s);
- std::string replyToGroupId() const;
+ PN_CPP_EXTERN void replyToGroupId(const std::string &s);
+ PN_CPP_EXTERN std::string replyToGroupId() const;
/** Set the body to an AMQP value. */
- void body(const Value&);
+ PN_CPP_EXTERN void body(const Value&);
/** Template to convert any type to a Value and set as the body */
template <class T> void body(const T& v) { body(Value(v)); }
/** Set the body to a sequence of sections containing AMQP values. */
- void body(const Values&);
+ PN_CPP_EXTERN void body(const Values&);
- const Values& body() const;
+ PN_CPP_EXTERN const Values& body() const;
- Values& body(); ///< Allows in-place modification of body sections.
+ PN_CPP_EXTERN Values& body(); ///< Allows in-place modification of body sections.
// FIXME aconway 2015-06-17: consistent and flexible treatment of buffers.
// Allow convenient std::string encoding/decoding (with re-use of existing
// string capacity) but also need to allow encoding/decoding of non-string
// buffers. Introduce a buffer type with begin/end pointers?
- void encode(std::string &data);
- std::string encode();
- void decode(const std::string &data);
+ PN_CPP_EXTERN void encode(std::string &data);
+ PN_CPP_EXTERN std::string encode();
+ PN_CPP_EXTERN void decode(const std::string &data);
private:
mutable Values body_;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/MessagingHandler.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/MessagingHandler.hpp b/proton-c/bindings/cpp/include/proton/MessagingHandler.hpp
index 06858e3..ddc8165 100644
--- a/proton-c/bindings/cpp/include/proton/MessagingHandler.hpp
+++ b/proton-c/bindings/cpp/include/proton/MessagingHandler.hpp
@@ -32,63 +32,65 @@ namespace reactor {
class Event;
class MessagingAdapter;
-class PN_CPP_EXTERN MessagingHandler : public ProtonHandler , public Acking
+class MessagingHandler : public ProtonHandler , public Acking
{
public:
PN_CPP_EXTERN MessagingHandler(int prefetch=10, bool autoAccept=true, bool autoSettle=true,
bool peerCloseIsError=false);
- virtual ~MessagingHandler();
+ PN_CPP_EXTERN virtual ~MessagingHandler();
- virtual void onAbort(Event &e);
- virtual void onAccepted(Event &e);
- virtual void onCommit(Event &e);
- virtual void onConnectionClosed(Event &e);
- virtual void onConnectionClosing(Event &e);
- virtual void onConnectionError(Event &e);
- virtual void onConnectionOpening(Event &e);
- virtual void onConnectionOpened(Event &e);
- virtual void onDisconnected(Event &e);
- virtual void onFetch(Event &e);
- virtual void onIdLoaded(Event &e);
- virtual void onLinkClosed(Event &e);
- virtual void onLinkClosing(Event &e);
- virtual void onLinkError(Event &e);
- virtual void onLinkOpened(Event &e);
- virtual void onLinkOpening(Event &e);
- virtual void onMessage(Event &e);
- virtual void onQuit(Event &e);
- virtual void onRecordInserted(Event &e);
- virtual void onRecordsLoaded(Event &e);
- virtual void onRejected(Event &e);
- virtual void onReleased(Event &e);
- virtual void onRequest(Event &e);
- virtual void onResponse(Event &e);
- virtual void onSendable(Event &e);
- virtual void onSessionClosed(Event &e);
- virtual void onSessionClosing(Event &e);
- virtual void onSessionError(Event &e);
- virtual void onSessionOpened(Event &e);
- virtual void onSessionOpening(Event &e);
- virtual void onSettled(Event &e);
- virtual void onStart(Event &e);
- virtual void onTimer(Event &e);
- virtual void onTransactionAborted(Event &e);
- virtual void onTransactionCommitted(Event &e);
- virtual void onTransactionDeclared(Event &e);
- virtual void onTransportClosed(Event &e);
- protected:
+ PN_CPP_EXTERN virtual void onAbort(Event &e);
+ PN_CPP_EXTERN virtual void onAccepted(Event &e);
+ PN_CPP_EXTERN virtual void onCommit(Event &e);
+ PN_CPP_EXTERN virtual void onConnectionClosed(Event &e);
+ PN_CPP_EXTERN virtual void onConnectionClosing(Event &e);
+ PN_CPP_EXTERN virtual void onConnectionError(Event &e);
+ PN_CPP_EXTERN virtual void onConnectionOpening(Event &e);
+ PN_CPP_EXTERN virtual void onConnectionOpened(Event &e);
+ PN_CPP_EXTERN virtual void onDisconnected(Event &e);
+ PN_CPP_EXTERN virtual void onFetch(Event &e);
+ PN_CPP_EXTERN virtual void onIdLoaded(Event &e);
+ PN_CPP_EXTERN virtual void onLinkClosed(Event &e);
+ PN_CPP_EXTERN virtual void onLinkClosing(Event &e);
+ PN_CPP_EXTERN virtual void onLinkError(Event &e);
+ PN_CPP_EXTERN virtual void onLinkOpened(Event &e);
+ PN_CPP_EXTERN virtual void onLinkOpening(Event &e);
+ PN_CPP_EXTERN virtual void onMessage(Event &e);
+ PN_CPP_EXTERN virtual void onQuit(Event &e);
+ PN_CPP_EXTERN virtual void onRecordInserted(Event &e);
+ PN_CPP_EXTERN virtual void onRecordsLoaded(Event &e);
+ PN_CPP_EXTERN virtual void onRejected(Event &e);
+ PN_CPP_EXTERN virtual void onReleased(Event &e);
+ PN_CPP_EXTERN virtual void onRequest(Event &e);
+ PN_CPP_EXTERN virtual void onResponse(Event &e);
+ PN_CPP_EXTERN virtual void onSendable(Event &e);
+ PN_CPP_EXTERN virtual void onSessionClosed(Event &e);
+ PN_CPP_EXTERN virtual void onSessionClosing(Event &e);
+ PN_CPP_EXTERN virtual void onSessionError(Event &e);
+ PN_CPP_EXTERN virtual void onSessionOpened(Event &e);
+ PN_CPP_EXTERN virtual void onSessionOpening(Event &e);
+ PN_CPP_EXTERN virtual void onSettled(Event &e);
+ PN_CPP_EXTERN virtual void onStart(Event &e);
+ PN_CPP_EXTERN virtual void onTimer(Event &e);
+ PN_CPP_EXTERN virtual void onTransactionAborted(Event &e);
+ PN_CPP_EXTERN virtual void onTransactionCommitted(Event &e);
+ PN_CPP_EXTERN virtual void onTransactionDeclared(Event &e);
+ PN_CPP_EXTERN virtual void onTransportClosed(Event &e);
+
+ protected:
int prefetch;
bool autoAccept;
bool autoSettle;
bool peerCloseIsError;
MessagingAdapter *messagingAdapter;
Handler *flowController;
- PN_CPP_EXTERN MessagingHandler(bool rawHandler, int prefetch=10, bool autoAccept=true, bool autoSettle=true,
- bool peerCloseIsError=false);
+ PN_CPP_EXTERN MessagingHandler(
+ bool rawHandler, int prefetch=10, bool autoAccept=true,
+ bool autoSettle=true, bool peerCloseIsError=false);
private:
friend class ContainerImpl;
friend class MessagingAdapter;
- void createHelpers();
+ PN_CPP_EXTERN void createHelpers();
};
}}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/ProtonHandle.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/ProtonHandle.hpp b/proton-c/bindings/cpp/include/proton/ProtonHandle.hpp
index 213bc14..da12c09 100644
--- a/proton-c/bindings/cpp/include/proton/ProtonHandle.hpp
+++ b/proton-c/bindings/cpp/include/proton/ProtonHandle.hpp
@@ -22,7 +22,7 @@
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
namespace proton {
namespace reactor {
@@ -36,16 +36,16 @@ template <class T> class ProtonHandle {
public:
/**@return true if handle is valid, i.e. not null. */
- PROTON_CPP_INLINE_EXTERN bool isValid() const { return impl; }
+ bool isValid() const { return impl; }
/**@return true if handle is null. It is an error to call any function on a null handle. */
- PROTON_CPP_INLINE_EXTERN bool isNull() const { return !impl; }
+ bool isNull() const { return !impl; }
/** Conversion to bool supports idiom if (handle) { handle->... } */
- PROTON_CPP_INLINE_EXTERN operator bool() const { return impl; }
+ operator bool() const { return impl; }
/** Operator ! supports idiom if (!handle) { do_if_handle_is_null(); } */
- PROTON_CPP_INLINE_EXTERN bool operator !() const { return !impl; }
+ bool operator !() const { return !impl; }
void swap(ProtonHandle<T>& h) { T* t = h.impl; h.impl = impl; impl = t; }
@@ -56,7 +56,7 @@ template <class T> class ProtonHandle {
protected:
typedef T Impl;
- PROTON_CPP_INLINE_EXTERN ProtonHandle() :impl() {}
+ ProtonHandle() :impl() {}
mutable Impl* impl;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/ProtonHandler.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/ProtonHandler.hpp b/proton-c/bindings/cpp/include/proton/ProtonHandler.hpp
index 799ca89..3768f78 100644
--- a/proton-c/bindings/cpp/include/proton/ProtonHandler.hpp
+++ b/proton-c/bindings/cpp/include/proton/ProtonHandler.hpp
@@ -33,48 +33,48 @@ class ProtonHandler : public Handler
{
public:
PN_CPP_EXTERN ProtonHandler();
- virtual void onReactorInit(Event &e);
- virtual void onReactorQuiesced(Event &e);
- virtual void onReactorFinal(Event &e);
- virtual void onTimerTask(Event &e);
- virtual void onConnectionInit(Event &e);
- virtual void onConnectionBound(Event &e);
- virtual void onConnectionUnbound(Event &e);
- virtual void onConnectionLocalOpen(Event &e);
- virtual void onConnectionLocalClose(Event &e);
- virtual void onConnectionRemoteOpen(Event &e);
- virtual void onConnectionRemoteClose(Event &e);
- virtual void onConnectionFinal(Event &e);
- virtual void onSessionInit(Event &e);
- virtual void onSessionLocalOpen(Event &e);
- virtual void onSessionLocalClose(Event &e);
- virtual void onSessionRemoteOpen(Event &e);
- virtual void onSessionRemoteClose(Event &e);
- virtual void onSessionFinal(Event &e);
- virtual void onLinkInit(Event &e);
- virtual void onLinkLocalOpen(Event &e);
- virtual void onLinkLocalClose(Event &e);
- virtual void onLinkLocalDetach(Event &e);
- virtual void onLinkRemoteOpen(Event &e);
- virtual void onLinkRemoteClose(Event &e);
- virtual void onLinkRemoteDetach(Event &e);
- virtual void onLinkFlow(Event &e);
- virtual void onLinkFinal(Event &e);
- virtual void onDelivery(Event &e);
- virtual void onTransport(Event &e);
- virtual void onTransportError(Event &e);
- virtual void onTransportHeadClosed(Event &e);
- virtual void onTransportTailClosed(Event &e);
- virtual void onTransportClosed(Event &e);
- virtual void onSelectableInit(Event &e);
- virtual void onSelectableUpdated(Event &e);
- virtual void onSelectableReadable(Event &e);
- virtual void onSelectableWritable(Event &e);
- virtual void onSelectableExpired(Event &e);
- virtual void onSelectableError(Event &e);
- virtual void onSelectableFinal(Event &e);
+ PN_CPP_EXTERN virtual void onReactorInit(Event &e);
+ PN_CPP_EXTERN virtual void onReactorQuiesced(Event &e);
+ PN_CPP_EXTERN virtual void onReactorFinal(Event &e);
+ PN_CPP_EXTERN virtual void onTimerTask(Event &e);
+ PN_CPP_EXTERN virtual void onConnectionInit(Event &e);
+ PN_CPP_EXTERN virtual void onConnectionBound(Event &e);
+ PN_CPP_EXTERN virtual void onConnectionUnbound(Event &e);
+ PN_CPP_EXTERN virtual void onConnectionLocalOpen(Event &e);
+ PN_CPP_EXTERN virtual void onConnectionLocalClose(Event &e);
+ PN_CPP_EXTERN virtual void onConnectionRemoteOpen(Event &e);
+ PN_CPP_EXTERN virtual void onConnectionRemoteClose(Event &e);
+ PN_CPP_EXTERN virtual void onConnectionFinal(Event &e);
+ PN_CPP_EXTERN virtual void onSessionInit(Event &e);
+ PN_CPP_EXTERN virtual void onSessionLocalOpen(Event &e);
+ PN_CPP_EXTERN virtual void onSessionLocalClose(Event &e);
+ PN_CPP_EXTERN virtual void onSessionRemoteOpen(Event &e);
+ PN_CPP_EXTERN virtual void onSessionRemoteClose(Event &e);
+ PN_CPP_EXTERN virtual void onSessionFinal(Event &e);
+ PN_CPP_EXTERN virtual void onLinkInit(Event &e);
+ PN_CPP_EXTERN virtual void onLinkLocalOpen(Event &e);
+ PN_CPP_EXTERN virtual void onLinkLocalClose(Event &e);
+ PN_CPP_EXTERN virtual void onLinkLocalDetach(Event &e);
+ PN_CPP_EXTERN virtual void onLinkRemoteOpen(Event &e);
+ PN_CPP_EXTERN virtual void onLinkRemoteClose(Event &e);
+ PN_CPP_EXTERN virtual void onLinkRemoteDetach(Event &e);
+ PN_CPP_EXTERN virtual void onLinkFlow(Event &e);
+ PN_CPP_EXTERN virtual void onLinkFinal(Event &e);
+ PN_CPP_EXTERN virtual void onDelivery(Event &e);
+ PN_CPP_EXTERN virtual void onTransport(Event &e);
+ PN_CPP_EXTERN virtual void onTransportError(Event &e);
+ PN_CPP_EXTERN virtual void onTransportHeadClosed(Event &e);
+ PN_CPP_EXTERN virtual void onTransportTailClosed(Event &e);
+ PN_CPP_EXTERN virtual void onTransportClosed(Event &e);
+ PN_CPP_EXTERN virtual void onSelectableInit(Event &e);
+ PN_CPP_EXTERN virtual void onSelectableUpdated(Event &e);
+ PN_CPP_EXTERN virtual void onSelectableReadable(Event &e);
+ PN_CPP_EXTERN virtual void onSelectableWritable(Event &e);
+ PN_CPP_EXTERN virtual void onSelectableExpired(Event &e);
+ PN_CPP_EXTERN virtual void onSelectableError(Event &e);
+ PN_CPP_EXTERN virtual void onSelectableFinal(Event &e);
- virtual void onUnhandled(Event &e);
+ PN_CPP_EXTERN virtual void onUnhandled(Event &e);
};
}}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Receiver.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Receiver.hpp b/proton-c/bindings/cpp/include/proton/Receiver.hpp
index ad22302..4f2333e 100644
--- a/proton-c/bindings/cpp/include/proton/Receiver.hpp
+++ b/proton-c/bindings/cpp/include/proton/Receiver.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/Endpoint.hpp"
#include "proton/Link.hpp"
#include "proton/types.h"
@@ -39,7 +39,7 @@ class Receiver : public Link
PN_CPP_EXTERN Receiver();
PN_CPP_EXTERN Receiver(const Link& c);
protected:
- virtual void verifyType(pn_link_t *l);
+ PN_CPP_EXTERN virtual void verifyType(pn_link_t *l);
};
}}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Sender.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Sender.hpp b/proton-c/bindings/cpp/include/proton/Sender.hpp
index 3a3ee41..33e02b7 100644
--- a/proton-c/bindings/cpp/include/proton/Sender.hpp
+++ b/proton-c/bindings/cpp/include/proton/Sender.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/Delivery.hpp"
#include "proton/Link.hpp"
#include "proton/Message.hpp"
@@ -38,12 +38,12 @@ namespace reactor {
class Sender : public Link
{
public:
- PN_CPP_EXTERN Sender(pn_link_t *lnk);
- PN_CPP_EXTERN Sender();
+ PN_CPP_EXTERN Sender(pn_link_t *lnk=0);
PN_CPP_EXTERN Sender(const Link& c);
PN_CPP_EXTERN Delivery send(Message &m);
+
protected:
- virtual void verifyType(pn_link_t *l);
+ PN_CPP_EXTERN virtual void verifyType(pn_link_t *l);
};
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Session.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Session.hpp b/proton-c/bindings/cpp/include/proton/Session.hpp
index 1f19b32..eaae4ce 100644
--- a/proton-c/bindings/cpp/include/proton/Session.hpp
+++ b/proton-c/bindings/cpp/include/proton/Session.hpp
@@ -21,13 +21,12 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/Endpoint.hpp"
#include "proton/Link.hpp"
#include "proton/types.h"
#include "proton/link.h"
-#include "ProtonImplRef.hpp"
#include <string>
struct pn_connection_t;
@@ -50,9 +49,9 @@ class Transport;
PN_CPP_EXTERN Session& operator=(const Session&);
PN_CPP_EXTERN void close();
PN_CPP_EXTERN pn_session_t *getPnSession();
- virtual PN_CPP_EXTERN Connection &getConnection();
- Receiver createReceiver(std::string name);
- Sender createSender(std::string name);
+ PN_CPP_EXTERN virtual Connection &getConnection();
+ PN_CPP_EXTERN Receiver createReceiver(std::string name);
+ PN_CPP_EXTERN Sender createSender(std::string name);
private:
friend class ProtonImplRef<Session>;
};
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Terminus.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Terminus.hpp b/proton-c/bindings/cpp/include/proton/Terminus.hpp
index b13165e..91d4f6f 100644
--- a/proton-c/bindings/cpp/include/proton/Terminus.hpp
+++ b/proton-c/bindings/cpp/include/proton/Terminus.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/Link.hpp"
#include "proton/link.h"
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Transport.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Transport.hpp b/proton-c/bindings/cpp/include/proton/Transport.hpp
index f81e483..1a8d39c 100644
--- a/proton-c/bindings/cpp/include/proton/Transport.hpp
+++ b/proton-c/bindings/cpp/include/proton/Transport.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
#include "proton/transport.h"
#include <string>
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Value.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Value.hpp b/proton-c/bindings/cpp/include/proton/Value.hpp
index a5f2edf..43a5878 100644
--- a/proton-c/bindings/cpp/include/proton/Value.hpp
+++ b/proton-c/bindings/cpp/include/proton/Value.hpp
@@ -30,22 +30,22 @@ struct pn_data_t;
namespace proton {
/** Holds a single AMQP value. */
-PN_CPP_EXTERN class Value {
+class Value {
public:
- Value();
- Value(const Value&);
+ PN_CPP_EXTERN Value();
+ PN_CPP_EXTERN Value(const Value&);
/** Converting constructor from any settable value */
template <class T> explicit Value(const T& v);
- ~Value();
+ PN_CPP_EXTERN ~Value();
- Value& operator=(const Value&);
+ PN_CPP_EXTERN Value& operator=(const Value&);
/** Copy the first value from a raw pn_data_t. */
- Value& operator=(pn_data_t*);
+ PN_CPP_EXTERN Value& operator=(pn_data_t*);
- TypeId type() const;
+ PN_CPP_EXTERN TypeId type() const;
/** Set the value. */
template<class T> void set(const T& value);
@@ -61,19 +61,19 @@ PN_CPP_EXTERN class Value {
template<class T> operator T() const;
/** insert a value into an Encoder. */
- friend Encoder& operator<<(Encoder&, const Value&);
+ PN_CPP_EXTERN friend Encoder& operator<<(Encoder&, const Value&);
/** Extract a value from a decoder. */
- friend Decoder& operator>>(Decoder&, Value&);
+ PN_CPP_EXTERN friend Decoder& operator>>(Decoder&, Value&);
/** Human readable format */
- friend std::ostream& operator<<(std::ostream&, const Value&);
+ PN_CPP_EXTERN friend std::ostream& operator<<(std::ostream&, const Value&);
- bool operator==(const Value&) const;
- bool operator !=(const Value& v) const{ return !(*this == v); }
+ PN_CPP_EXTERN bool operator==(const Value&) const;
+ PN_CPP_EXTERN bool operator !=(const Value& v) const{ return !(*this == v); }
/** operator < makes Value valid for use as a std::map key. */
- bool operator<(const Value&) const;
+ PN_CPP_EXTERN bool operator<(const Value&) const;
bool operator>(const Value& v) const { return v < *this; }
bool operator<=(const Value& v) const { return !(*this > v); }
bool operator>=(const Value& v) const { return !(*this < v); }
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/Values.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/Values.hpp b/proton-c/bindings/cpp/include/proton/Values.hpp
index 604d2be..275f905 100644
--- a/proton-c/bindings/cpp/include/proton/Values.hpp
+++ b/proton-c/bindings/cpp/include/proton/Values.hpp
@@ -34,21 +34,20 @@ namespace proton {
*
* After inserting values, call rewind() to extract them.
*/
-PN_CPP_EXTERN class Values : public Encoder, public Decoder {
+class Values : public Encoder, public Decoder {
public:
- Values();
- Values(const Values&);
+ PN_CPP_EXTERN Values();
+ PN_CPP_EXTERN Values(const Values&);
/** Does not take ownership, just a view on the data */
- Values(pn_data_t*);
+ PN_CPP_EXTERN Values(pn_data_t*);
- ~Values();
+ PN_CPP_EXTERN ~Values();
/** Copy data from another Values */
- Values& operator=(const Values&);
-
- Values& rewind();
+ PN_CPP_EXTERN Values& operator=(const Values&);
+ PN_CPP_EXTERN Values& rewind();
friend class Value;
friend class Message;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/WaitCondition.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/WaitCondition.hpp b/proton-c/bindings/cpp/include/proton/WaitCondition.hpp
index 12c7708..c175841 100644
--- a/proton-c/bindings/cpp/include/proton/WaitCondition.hpp
+++ b/proton-c/bindings/cpp/include/proton/WaitCondition.hpp
@@ -21,7 +21,7 @@
* under the License.
*
*/
-#include "proton/ImportExport.hpp"
+#include "proton/export.hpp"
namespace proton {
namespace reactor {
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/export.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/export.hpp b/proton-c/bindings/cpp/include/proton/export.hpp
new file mode 100644
index 0000000..0be5187
--- /dev/null
+++ b/proton-c/bindings/cpp/include/proton/export.hpp
@@ -0,0 +1,46 @@
+#ifndef PN_CPP_IMPORTEXPORT_H
+#define PN_CPP_IMPORTEXPORT_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.
+ *
+ */
+
+#if defined(WIN32) && !defined(PN_CPP_DECLARE_STATIC)
+ //
+ // Import and Export definitions for Windows:
+ //
+# define PN_CPP_EXPORT __declspec(dllexport)
+# define PN_CPP_IMPORT __declspec(dllimport)
+#else
+ //
+ // Non-Windows (Linux, etc.) definitions:
+ //
+# define PN_CPP_EXPORT
+# define PN_CPP_IMPORT
+#endif
+
+// For qpid-proton-cpp library symbols
+#ifdef qpid_proton_cpp_EXPORTS
+# define PN_CPP_EXTERN PN_CPP_EXPORT
+#else
+# define PN_CPP_EXTERN PN_CPP_IMPORT
+#endif
+
+#endif /*!PN_CPP_IMPORTEXPORT_H*/
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9f7e3462/proton-c/bindings/cpp/include/proton/type_traits.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/type_traits.hpp b/proton-c/bindings/cpp/include/proton/type_traits.hpp
new file mode 100644
index 0000000..f635128
--- /dev/null
+++ b/proton-c/bindings/cpp/include/proton/type_traits.hpp
@@ -0,0 +1,116 @@
+#ifndef ENABLE_IF_HPP
+#define ENABLE_IF_HPP
+/*
+ * 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 "proton/types.hpp"
+
+/**@file
+ * Type traits used for type conversions.
+ * @internal
+ */
+#if defined(__cplusplus) && __cplusplus >= 201100
+#include <type_traits>
+#else
+namespace std {
+
+// Workaround for older C++ compilers. NOTE this is NOT a full implementation of the
+// corresponding c++11 types, it is the bare minimum needed by this library.
+
+template <bool, class T=void> struct enable_if;
+template <class T> struct enable_if<true, T> { typedef T type; };
+
+struct true_type { static const bool value = true; };
+struct false_type { static const bool value = false; };
+
+template <class T> struct is_integral : public false_type {};
+
+template <> struct is_integral<unsigned char> : public true_type {};
+template <> struct is_integral<unsigned short> : public true_type {};
+template <> struct is_integral<unsigned int> : public true_type {};
+template <> struct is_integral<unsigned long> : public true_type {};
+
+template <> struct is_integral<signed char> : public true_type {};
+template <> struct is_integral<signed short> : public true_type {};
+template <> struct is_integral<signed int> : public true_type {};
+template <> struct is_integral<signed long> : public true_type {};
+
+template <class T> struct is_signed : public false_type {};
+
+template <> struct is_signed<unsigned char> : public false_type {};
+template <> struct is_signed<unsigned short> : public false_type {};
+template <> struct is_signed<unsigned int> : public false_type {};
+template <> struct is_signed<unsigned long> : public false_type {};
+
+template <> struct is_signed<signed char> : public true_type {};
+template <> struct is_signed<signed short> : public true_type {};
+template <> struct is_signed<signed int> : public true_type {};
+template <> struct is_signed<signed long> : public true_type {};
+}
+#endif // Old C++ workarounds
+
+namespace proton {
+
+// Metafunction returning exact AMQP type associated with a C++ type
+template <class T> struct TypeIdOf;
+template<> struct TypeIdOf<Null> { static const TypeId value=NULL_; };
+template<> struct TypeIdOf<Bool> { static const TypeId value=BOOL; };
+template<> struct TypeIdOf<Ubyte> { static const TypeId value=UBYTE; };
+template<> struct TypeIdOf<Byte> { static const TypeId value=BYTE; };
+template<> struct TypeIdOf<Ushort> { static const TypeId value=USHORT; };
+template<> struct TypeIdOf<Short> { static const TypeId value=SHORT; };
+template<> struct TypeIdOf<Uint> { static const TypeId value=UINT; };
+template<> struct TypeIdOf<Int> { static const TypeId value=INT; };
+template<> struct TypeIdOf<Char> { static const TypeId value=CHAR; };
+template<> struct TypeIdOf<Ulong> { static const TypeId value=ULONG; };
+template<> struct TypeIdOf<Long> { static const TypeId value=LONG; };
+template<> struct TypeIdOf<Timestamp> { static const TypeId value=TIMESTAMP; };
+template<> struct TypeIdOf<Float> { static const TypeId value=FLOAT; };
+template<> struct TypeIdOf<Double> { static const TypeId value=DOUBLE; };
+template<> struct TypeIdOf<Decimal32> { static const TypeId value=DECIMAL32; };
+template<> struct TypeIdOf<Decimal64> { static const TypeId value=DECIMAL64; };
+template<> struct TypeIdOf<Decimal128> { static const TypeId value=DECIMAL128; };
+template<> struct TypeIdOf<Uuid> { static const TypeId value=UUID; };
+template<> struct TypeIdOf<Binary> { static const TypeId value=BINARY; };
+template<> struct TypeIdOf<String> { static const TypeId value=STRING; };
+template<> struct TypeIdOf<Symbol> { static const TypeId value=SYMBOL; };
+
+template <class T, class Enable=void> struct HasTypeId { static const bool value = false; };
+template <class T> struct HasTypeId<T, typename std::enable_if<TypeIdOf<T>::value>::type> {
+ static const bool value = true;
+};
+
+// Map to known integer types by sizeof and signedness.
+template<size_t N, bool S> struct IntegerType;
+template<> struct IntegerType<1, true> { typedef Byte type; };
+template<> struct IntegerType<2, true> { typedef Short type; };
+template<> struct IntegerType<4, true> { typedef Int type; };
+template<> struct IntegerType<8, true> { typedef Long type; };
+template<> struct IntegerType<1, false> { typedef Ubyte type; };
+template<> struct IntegerType<2, false> { typedef Ushort type; };
+template<> struct IntegerType<4, false> { typedef Uint type; };
+template<> struct IntegerType<8, false> { typedef Ulong type; };
+
+// True if T is an integer type that does not have a TypeId mapping.
+template <class T> struct IsUnknownInteger {
+ static const bool value = !HasTypeId<T>::value && std::is_integral<T>::value;
+};
+
+}
+#endif // ENABLE_IF_HPP
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org