1 #ifndef BOOST_SERIALIZATION_COLLECTION_TRAITS_HPP 2 #define BOOST_SERIALIZATION_COLLECTION_TRAITS_HPP 3 4 // MS compatible compilers support #pragma once 5 #if defined(_MSC_VER) 6 # pragma once 7 #endif 8 9 /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 10 // collection_traits.hpp: 11 12 // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 13 // Use, modification and distribution is subject to the Boost Software 14 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at 15 // http://www.boost.org/LICENSE_1_0.txt) 16 17 // See http://www.boost.org for updates, documentation, and revision history. 18 19 // This header assigns a level implemenation trait to a collection type 20 // for all primitives. It is needed so that archives which are meant to be 21 // portable don't write class information in the archive. Since, not all 22 // compiles recognize the same set of primitive types, the possibility 23 // exists for archives to be non-portable if class information for primitive 24 // types is included. This is addressed by the following macros. 25 #include <boost/config.hpp> 26 #include <boost/mpl/integral_c_tag.hpp> 27 28 #include <boost/cstdint.hpp> 29 #include <boost/integer_traits.hpp> 30 #include <climits> // ULONG_MAX 31 #include <boost/serialization/level.hpp> 32 33 #define BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(T, C) \ 34 template<> \ 35 struct implementation_level< C < T > > { \ 36 typedef mpl::integral_c_tag tag; \ 37 typedef mpl::int_<object_serializable> type; \ 38 BOOST_STATIC_CONSTANT(int, value = object_serializable); \ 39 }; \ 40 /**/ 41 42 #if defined(BOOST_NO_CWCHAR) || defined(BOOST_NO_INTRINSIC_WCHAR_T) 43 #define BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER_WCHAR(C) 44 #else 45 #define BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER_WCHAR(C) \ 46 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(wchar_t, C) \ 47 /**/ 48 #endif 49 50 #if defined(BOOST_HAS_LONG_LONG) 51 #define BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER_INT64(C) \ 52 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(boost::long_long_type, C) \ 53 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(boost::ulong_long_type, C) \ 54 /**/ 55 #else 56 #define BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER_INT64(C) 57 #endif 58 59 #define BOOST_SERIALIZATION_COLLECTION_TRAITS(C) \ 60 namespace boost { namespace serialization { \ 61 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(bool, C) \ 62 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(char, C) \ 63 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(signed char, C) \ 64 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(unsigned char, C) \ 65 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(signed int, C) \ 66 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(unsigned int, C) \ 67 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(signed long, C) \ 68 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(unsigned long, C) \ 69 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(float, C) \ 70 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(double, C) \ 71 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(unsigned short, C) \ 72 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(signed short, C) \ 73 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER_INT64(C) \ 74 BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER_WCHAR(C) \ 75 } } \ 76 /**/ 77 78 #endif // BOOST_SERIALIZATION_COLLECTION_TRAITS 79