| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | #ifndef BOOST_SERIALIZATION_FACTORY_HPP#define BOOST_SERIALIZATION_FACTORY_HPP/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8// MS compatible compilers support #pragma once#if defined(_MSC_VER)# pragma once#endif// factory.hpp: create an instance from an extended_type_info instance.// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .// Use, modification and distribution is subject to the Boost Software// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)//  See http://www.boost.org for updates, documentation, and revision history.#include <cstdarg> // valist#include <cstddef> // NULL#include <boost/preprocessor/control/if.hpp>#include <boost/preprocessor/comparison/greater.hpp>#include <boost/assert.hpp>namespace std{    #if defined(__LIBCOMO__)        using ::va_list;    #endif} // namespace stdnamespace boost {namespace serialization {// default implementation does nothing.template<class T, int N>T * factory(std::va_list){    BOOST_ASSERT(false);    // throw exception here?    return NULL;}} // namespace serialization} // namespace boost#define BOOST_SERIALIZATION_FACTORY(N, T, A0, A1, A2, A3) \namespace boost {                                         \namespace serialization {                                 \    template<>                                            \    T * factory<T, N>(std::va_list ap){                   \        BOOST_PP_IF(BOOST_PP_GREATER(N, 0)                \            , A0 a0 = va_arg(ap, A0);, BOOST_PP_EMPTY())  \        BOOST_PP_IF(BOOST_PP_GREATER(N, 1)                \            , A1 a1 = va_arg(ap, A1);, BOOST_PP_EMPTY())  \        BOOST_PP_IF(BOOST_PP_GREATER(N, 2)                \            , A2 a2 = va_arg(ap, A2);, BOOST_PP_EMPTY())  \        BOOST_PP_IF(BOOST_PP_GREATER(N, 3)                \            , A3 a3 = va_arg(ap, A3);, BOOST_PP_EMPTY())  \        return new T(                                     \            BOOST_PP_IF(BOOST_PP_GREATER(N, 0)            \                , a0, BOOST_PP_EMPTY())                   \            BOOST_PP_IF(BOOST_PP_GREATER(N, 1))           \                , BOOST_PP_COMMA, BOOST_PP_EMPTY)()       \            BOOST_PP_IF(BOOST_PP_GREATER(N, 1)            \                , a1, BOOST_PP_EMPTY())                   \            BOOST_PP_IF(BOOST_PP_GREATER(N, 2))           \                , BOOST_PP_COMMA, BOOST_PP_EMPTY)()       \            BOOST_PP_IF(BOOST_PP_GREATER(N, 2)            \                , a2, BOOST_PP_EMPTY())                   \            BOOST_PP_IF(BOOST_PP_GREATER(N, 3))           \                , BOOST_PP_COMMA, BOOST_PP_EMPTY)()       \            BOOST_PP_IF(BOOST_PP_GREATER(N, 3)            \                , a3, BOOST_PP_EMPTY())                   \        );                                                \    }                                                     \}                                                         \}   /**/#define BOOST_SERIALIZATION_FACTORY_4(T, A0, A1, A2, A3) \    BOOST_SERIALIZATION_FACTORY(4, T, A0, A1, A2, A3)#define BOOST_SERIALIZATION_FACTORY_3(T, A0, A1, A2)     \    BOOST_SERIALIZATION_FACTORY(3, T, A0, A1, A2, 0)#define BOOST_SERIALIZATION_FACTORY_2(T, A0, A1)         \    BOOST_SERIALIZATION_FACTORY(2, T, A0, A1, 0, 0)#define BOOST_SERIALIZATION_FACTORY_1(T, A0)             \    BOOST_SERIALIZATION_FACTORY(1, T, A0, 0, 0, 0)#define BOOST_SERIALIZATION_FACTORY_0(T)                 \namespace boost {                                        \namespace serialization {                                \    template<>                                           \    T * factory<T, 0>(std::va_list){                     \        return new T();                                  \    }                                                    \}                                                        \}                                                        \/**/#endif // BOOST_SERIALIZATION_FACTORY_HPP
 |