williamr@4: #ifndef BOOST_SERIALIZATION_VERSION_HPP williamr@4: #define BOOST_SERIALIZATION_VERSION_HPP williamr@2: williamr@4: // MS compatible compilers support #pragma once williamr@4: #if defined(_MSC_VER) && (_MSC_VER >= 1020) williamr@4: # pragma once williamr@2: #endif williamr@2: williamr@4: /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 williamr@4: // version.hpp: williamr@2: williamr@4: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . williamr@4: // Use, modification and distribution is subject to the Boost Software williamr@4: // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at williamr@4: // http://www.boost.org/LICENSE_1_0.txt) williamr@2: williamr@4: // See http://www.boost.org for updates, documentation, and revision history. williamr@4: williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: williamr@4: #include williamr@4: //#include williamr@4: williamr@4: namespace boost { williamr@4: namespace serialization { williamr@4: williamr@4: struct basic_traits; williamr@4: williamr@4: // default version number is 0. Override with higher version williamr@4: // when class definition changes. williamr@4: template williamr@4: struct version williamr@4: { williamr@4: template williamr@4: struct traits_class_version { williamr@4: typedef BOOST_DEDUCED_TYPENAME U::version type; williamr@4: }; williamr@4: williamr@4: typedef mpl::integral_c_tag tag; williamr@4: // note: at least one compiler complained w/o the full qualification williamr@4: // on basic traits below williamr@4: typedef williamr@4: BOOST_DEDUCED_TYPENAME mpl::eval_if< williamr@4: is_base_and_derived, williamr@4: traits_class_version, williamr@4: mpl::int_<0> williamr@4: >::type type; williamr@4: BOOST_STATIC_CONSTANT(unsigned int, value = version::type::value); williamr@4: }; williamr@4: williamr@4: } // namespace serialization williamr@4: } // namespace boost williamr@4: williamr@4: // specify the current version number for the class williamr@4: #define BOOST_CLASS_VERSION(T, N) \ williamr@4: namespace boost { \ williamr@4: namespace serialization { \ williamr@4: template<> \ williamr@4: struct version \ williamr@4: { \ williamr@4: typedef mpl::int_ type; \ williamr@4: typedef mpl::integral_c_tag tag; \ williamr@4: BOOST_STATIC_CONSTANT(unsigned int, value = version::type::value); \ williamr@4: /* require that class info saved when versioning is used */ \ williamr@4: /* \ williamr@4: BOOST_STATIC_ASSERT(( \ williamr@4: mpl::or_< \ williamr@4: mpl::equal_to< \ williamr@4: mpl::int_<0>, \ williamr@4: mpl::int_ \ williamr@4: >, \ williamr@4: mpl::equal_to< \ williamr@4: implementation_level, \ williamr@4: mpl::int_ \ williamr@4: > \ williamr@4: >::value \ williamr@4: )); \ williamr@4: */ \ williamr@4: }; \ williamr@4: } \ williamr@4: } williamr@4: williamr@4: #endif // BOOST_SERIALIZATION_VERSION_HPP