101 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			101 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#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>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace std{
							 | 
						||
| 
								 | 
							
								    #if defined(__LIBCOMO__)
							 | 
						||
| 
								 | 
							
								        using ::va_list;
							 | 
						||
| 
								 | 
							
								    #endif
							 | 
						||
| 
								 | 
							
								} // namespace std
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace 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_IF(BOOST_PP_GREATER(N,1)                \
							 | 
						||
| 
								 | 
							
								            ,A1 a1 = va_arg(ap, A1);                      \
							 | 
						||
| 
								 | 
							
								        ,BOOST_PP_IF(BOOST_PP_GREATER(N,2)                \
							 | 
						||
| 
								 | 
							
								            ,A2 a2 = va_arg(ap, A2);                      \
							 | 
						||
| 
								 | 
							
								        ,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_IF(BOOST_PP_GREATER(N,1)            \
							 | 
						||
| 
								 | 
							
								                ,a1                                       \
							 | 
						||
| 
								 | 
							
								            ,BOOST_PP_IF(BOOST_PP_GREATER(N,2)            \
							 | 
						||
| 
								 | 
							
								                ,a2                                       \
							 | 
						||
| 
								 | 
							
								            ,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
							 |