MessagePack for C++ version switcher

Copyright (C) 2014 KONDO Takatoshi

   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.

ifndef MSGPACK_VERSIONING_HPP define MSGPACK_VERSIONING_HPP

if !defined(MSGPACK_DEFAULT_API_VERSION) define MSGPACK_DEFAULT_API_VERSION 1 endif

define MSGPACK_DEFAULT_API_NS MSGPACK_PP_CAT(v, MSGPACK_DEFAULT_API_VERSION)

if MSGPACK_DEFAULT_API_VERSION == 1 define MSGPACK_PP_ENABLE_NS_v1 () //#elif MSGPACK_DEFAULT_API_VERSION == 2 //#define MSGPACK_PP_ENABLE_NS_v2 () else error endif

define MSGPACK_PP_CAT(a, …) MSGPACK_PP_PRIMITIVE_CAT(a, VA_ARGS) define MSGPACK_PP_PRIMITIVE_CAT(a, …) a ## VA_ARGS

define MSGPACK_PP_IIF© MSGPACK_PP_PRIMITIVE_CAT(MSGPACK_PP_IIF_, c) define MSGPACK_PP_IIF_0(t, …) VA_ARGS define MSGPACK_PP_IIF_1(t, …) t

define MSGPACK_PP_PROBE(x) x, 1

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)) define MSGPACK_PP_CHECK_N(x, n, …) n

else // defined(__MSC_VER)

define MSGPACK_PP_CHECK(…) MSGPACK_PP_CHECK_N(VA_ARGS, 0) define MSGPACK_PP_CHECK_N(x, n, …) n

endif // defined(__MSC_VER)

define MSGPACK_PP_NS_ENABLED_PROBE(ns) MSGPACK_PP_NS_ENABLED_PROBE_PROXY( MSGPACK_PP_ENABLE_NS_##ns ) define MSGPACK_PP_NS_ENABLED_PROBE_PROXY(…) MSGPACK_PP_NS_ENABLED_PROBE_PRIMIVIE(VA_ARGS) define MSGPACK_PP_NS_ENABLED_PROBE_PRIMIVIE(x) MSGPACK_PP_NS_ENABLED_PROBE_COMBINE_ x define MSGPACK_PP_NS_ENABLED_PROBE_COMBINE_(…) MSGPACK_PP_PROBE(~)

define MSGPACK_PP_IS_NS_ENABLED(ns) MSGPACK_PP_CHECK(MSGPACK_PP_NS_ENABLED_PROBE(ns))

if __cplusplus < 201103 define MSGPACK_API_VERSION_NAMESPACE(ns) MSGPACK_PP_IIF(MSGPACK_PP_IS_NS_ENABLED(ns)) \

(namespace ns{}; using namespace ns; namespace ns, \
 namespace ns)

else // __cplusplus < 201103

define MSGPACK_API_VERSION_NAMESPACE(ns) MSGPACK_PP_IIF(MSGPACK_PP_IS_NS_ENABLED(ns)) \

(inline namespace ns, namespace ns)

endif // __cplusplus < 201103

endif // MSGPACK_VERSIONING_HPP