From 3bfd14266074d1e306aeac2c15f5450baa47e65c Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Fri, 31 Oct 2014 15:27:56 +0900 Subject: [PATCH] Fixed https://github.com/msgpack/msgpack-c/issues/153 --- include/msgpack/adaptor/tr1/unordered_map.hpp | 3 +++ include/msgpack/adaptor/tr1/unordered_map_fwd.hpp | 3 +++ include/msgpack/adaptor/tr1/unordered_set.hpp | 4 ++++ include/msgpack/adaptor/tr1/unordered_set_fwd.hpp | 4 ++++ include/msgpack/adaptor/vector_char.hpp | 10 +++++----- include/msgpack/cpp_config.hpp | 4 +++- include/msgpack/unpack.hpp | 8 ++++++++ include/msgpack/versioning.hpp | 2 +- 8 files changed, 31 insertions(+), 7 deletions(-) diff --git a/include/msgpack/adaptor/tr1/unordered_map.hpp b/include/msgpack/adaptor/tr1/unordered_map.hpp index caf9f544..c08c97be 100644 --- a/include/msgpack/adaptor/tr1/unordered_map.hpp +++ b/include/msgpack/adaptor/tr1/unordered_map.hpp @@ -40,6 +40,7 @@ #endif // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) +#if defined(MSGPACK_STD_TR1) namespace msgpack { @@ -153,4 +154,6 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_m #undef MSGPACK_STD_TR1 +#endif // MSGPACK_STD_TR1 + #endif // MSGPACK_TYPE_TR1_UNORDERED_MAP_HPP diff --git a/include/msgpack/adaptor/tr1/unordered_map_fwd.hpp b/include/msgpack/adaptor/tr1/unordered_map_fwd.hpp index 99801e96..4861e1ad 100644 --- a/include/msgpack/adaptor/tr1/unordered_map_fwd.hpp +++ b/include/msgpack/adaptor/tr1/unordered_map_fwd.hpp @@ -40,6 +40,7 @@ #endif // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) +#if defined(MSGPACK_STD_TR1) namespace msgpack { @@ -69,4 +70,6 @@ void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_multimap #undef MSGPACK_STD_TR1 +#endif // MSGPACK_STD_TR1 + #endif // MSGPACK_TYPE_TR1_UNORDERED_MAP_FWD_HPP diff --git a/include/msgpack/adaptor/tr1/unordered_set.hpp b/include/msgpack/adaptor/tr1/unordered_set.hpp index 9db2825c..fb8dc3e6 100644 --- a/include/msgpack/adaptor/tr1/unordered_set.hpp +++ b/include/msgpack/adaptor/tr1/unordered_set.hpp @@ -40,6 +40,8 @@ #endif // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) +#if defined(MSGPACK_STD_TR1) + namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { @@ -145,4 +147,6 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_m #undef MSGPACK_STD_TR1 +#endif // MSGPACK_STD_TR1 + #endif // MSGPACK_TYPE_TR1_UNORDERED_SET_HPP diff --git a/include/msgpack/adaptor/tr1/unordered_set_fwd.hpp b/include/msgpack/adaptor/tr1/unordered_set_fwd.hpp index f5e9e648..95d1eb4a 100644 --- a/include/msgpack/adaptor/tr1/unordered_set_fwd.hpp +++ b/include/msgpack/adaptor/tr1/unordered_set_fwd.hpp @@ -40,6 +40,8 @@ #endif // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) +#if defined(MSGPACK_STD_TR1) + namespace msgpack { MSGPACK_API_VERSION_NAMESPACE(v1) { @@ -68,4 +70,6 @@ void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_multiset #undef MSGPACK_STD_TR1 +#endif // MSGPACK_STD_TR1 + #endif // MSGPACK_TYPE_TR1_UNORDERED_SET_FWD_HPP diff --git a/include/msgpack/adaptor/vector_char.hpp b/include/msgpack/adaptor/vector_char.hpp index 1ea6c93c..4db6e94c 100644 --- a/include/msgpack/adaptor/vector_char.hpp +++ b/include/msgpack/adaptor/vector_char.hpp @@ -31,11 +31,11 @@ inline object const& operator>> (object const& o, std::vector& v) switch (o.type) { case type::BIN: v.resize(o.via.bin.size); - std::memcpy(v.data(), o.via.bin.ptr, o.via.bin.size); + std::memcpy(&v.front(), o.via.bin.ptr, o.via.bin.size); break; case type::STR: v.resize(o.via.str.size); - std::memcpy(v.data(), o.via.str.ptr, o.via.str.size); + std::memcpy(&v.front(), o.via.str.ptr, o.via.str.size); break; default: throw type_error(); @@ -48,7 +48,7 @@ template inline packer& operator<< (packer& o, const std::vector& v) { o.pack_bin(v.size()); - o.pack_bin_body(v.data(), v.size()); + o.pack_bin_body(&v.front(), v.size()); return o; } @@ -56,7 +56,7 @@ inline packer& operator<< (packer& o, const std::vector& v inline void operator<< (object& o, const std::vector& v) { o.type = type::BIN; - o.via.bin.ptr = v.data(); + o.via.bin.ptr = &v.front(); o.via.bin.size = static_cast(v.size()); } @@ -66,7 +66,7 @@ inline void operator<< (object::with_zone& o, const std::vector& v) char* ptr = static_cast(o.zone.allocate_align(v.size())); o.via.bin.ptr = ptr; o.via.bin.size = static_cast(v.size()); - std::memcpy(ptr, v.data(), v.size()); + std::memcpy(ptr, &v.front(), v.size()); } } // MSGPACK_API_VERSION_NAMESPACE(v1) diff --git a/include/msgpack/cpp_config.hpp b/include/msgpack/cpp_config.hpp index be00f6ef..26ac86ec 100644 --- a/include/msgpack/cpp_config.hpp +++ b/include/msgpack/cpp_config.hpp @@ -35,7 +35,9 @@ #if __cplusplus < 201103 #if !defined(nullptr) -#define nullptr (0) +# if _MSC_VER < 1600 +# define nullptr (0) +# endif #endif #include diff --git a/include/msgpack/unpack.hpp b/include/msgpack/unpack.hpp index 28f1aea7..0486d8b3 100644 --- a/include/msgpack/unpack.hpp +++ b/include/msgpack/unpack.hpp @@ -28,6 +28,14 @@ #include #include +#if defined(_MSC_VER) +// avoiding confliction std::max, std::min, and macro in windows.h +#define NOMINMAX +#endif // defined(_MSC_VER) + +#ifdef _msgpack_atomic_counter_header +#include _msgpack_atomic_counter_header +#endif #define COUNTER_SIZE (sizeof(_msgpack_atomic_counter_t)) diff --git a/include/msgpack/versioning.hpp b/include/msgpack/versioning.hpp index cb589ea3..46263525 100644 --- a/include/msgpack/versioning.hpp +++ b/include/msgpack/versioning.hpp @@ -41,7 +41,7 @@ #define MSGPACK_PP_PROBE(x) x, 1 -#if defined(__MSC_VER) +#if defined(_MSC_VER) #define MSGPACK_PP_MSVC_VA_ARGS_WORKAROUND(define, args) define args #define MSGPACK_PP_CHECK(...) MSGPACK_PP_MSVC_VA_ARGS_WORKAROUND(MSGPACK_PP_CHECK_N, (__VA_ARGS__, 0))