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
 |