74 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #ifndef BOOST_SERIALIZATION_TYPE_INFO_IMPLEMENTATION_HPP
 | |
| #define BOOST_SERIALIZATION_TYPE_INFO_IMPLEMENTATION_HPP
 | |
| 
 | |
| // MS compatible compilers support #pragma once
 | |
| #if defined(_MSC_VER)
 | |
| # pragma once
 | |
| #endif
 | |
| 
 | |
| /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
 | |
| // type_info_implementation.hpp: interface for portable version of type_info
 | |
| 
 | |
| // (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 <boost/config.hpp>
 | |
| #include <boost/detail/workaround.hpp>
 | |
| 
 | |
| #include <boost/static_assert.hpp>
 | |
| #include <boost/mpl/eval_if.hpp>
 | |
| #include <boost/mpl/identity.hpp>
 | |
| #include <boost/type_traits/is_base_and_derived.hpp>
 | |
| #include <boost/serialization/traits.hpp>
 | |
| 
 | |
| namespace boost {
 | |
| namespace serialization {
 | |
| 
 | |
| // note that T and const T are folded into const T so that
 | |
| // there is only one table entry per type
 | |
| template<class T>
 | |
| struct type_info_implementation {
 | |
|     template<class U>
 | |
|     struct traits_class_typeinfo_implementation {
 | |
|       typedef typename U::type_info_implementation::type type;
 | |
|     };
 | |
|     // note: at least one compiler complained w/o the full qualification
 | |
|     // on basic traits below
 | |
|     typedef 
 | |
|         typename mpl::eval_if<
 | |
|             is_base_and_derived<boost::serialization::basic_traits, T>,
 | |
|             traits_class_typeinfo_implementation< T >,
 | |
|         //else
 | |
|             mpl::identity<
 | |
|                 typename extended_type_info_impl< T >::type
 | |
|             >
 | |
|         >::type type;
 | |
| };
 | |
| 
 | |
| } // namespace serialization
 | |
| } // namespace boost
 | |
| 
 | |
| // define a macro to assign a particular derivation of extended_type_info
 | |
| // to a specified a class. 
 | |
| #define BOOST_CLASS_TYPE_INFO(T, ETI)              \
 | |
| namespace boost {                                  \
 | |
| namespace serialization {                          \
 | |
| template<>                                         \
 | |
| struct type_info_implementation< T > {             \
 | |
|     typedef ETI type;                              \
 | |
| };                                                 \
 | |
| template<>                                         \
 | |
| struct type_info_implementation< const T > {       \
 | |
|     typedef ETI type;                              \
 | |
| };                                                 \
 | |
| }                                                  \
 | |
| }                                                  \
 | |
| /**/
 | |
| 
 | |
| #endif /// BOOST_SERIALIZATION_TYPE_INFO_IMPLEMENTATION_HPP
 | 
