diff --git a/include/boost/archive/detail/archive_pointer_iserializer.hpp b/include/boost/archive/detail/archive_pointer_iserializer.hpp index 3ea92e14..bb8ff03a 100644 --- a/include/boost/archive/detail/archive_pointer_iserializer.hpp +++ b/include/boost/archive/detail/archive_pointer_iserializer.hpp @@ -7,7 +7,7 @@ #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// basic_iserializer.hpp: extenstion of type_info required for serialization. +// archive_pointer_iserializer.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software @@ -23,6 +23,8 @@ #include #include +#include // must be the last header + namespace boost { namespace serialization { @@ -33,9 +35,11 @@ namespace archive { namespace detail { template -class archive_pointer_iserializer : public basic_pointer_iserializer { +class archive_pointer_iserializer : + public basic_pointer_iserializer { protected: - explicit archive_pointer_iserializer( + explicit BOOST_DECL_ARCHIVE_OR_WARCHIVE + archive_pointer_iserializer( const boost::serialization::extended_type_info & type_ ); public: @@ -66,7 +70,9 @@ public: // type_info. returns NULL if there is no such instance. This // would indicate that the no object of the specified type was loaded // any where in the code. - static const basic_pointer_iserializer * find( + BOOST_DECL_ARCHIVE_OR_WARCHIVE + static const + basic_pointer_iserializer * find( const boost::serialization::extended_type_info & type_ ); @@ -77,4 +83,6 @@ public: } // namespace archive } // namespace boost +#include // pops abi_suffix.hpp pragmas + #endif // BOOST_ARCHIVE_ARCHIVE_POINTER_ISERIALIZER_POINTER_HPP diff --git a/include/boost/archive/detail/archive_pointer_oserializer.hpp b/include/boost/archive/detail/archive_pointer_oserializer.hpp index 48603569..4569d7de 100644 --- a/include/boost/archive/detail/archive_pointer_oserializer.hpp +++ b/include/boost/archive/detail/archive_pointer_oserializer.hpp @@ -20,6 +20,8 @@ #include #include +#include // must be the last header + namespace boost { namespace serialization { @@ -30,9 +32,11 @@ namespace archive { namespace detail { template -class archive_pointer_oserializer : public basic_pointer_oserializer { +class archive_pointer_oserializer : + public basic_pointer_oserializer { protected: - explicit archive_pointer_oserializer( + explicit BOOST_DECL_ARCHIVE_OR_WARCHIVE + archive_pointer_oserializer( const boost::serialization::extended_type_info & type_ ); public: @@ -40,7 +44,9 @@ public: // type_info. returns NULL, if there is no such instance. This // would indicate that the no object of the specified type was saved // any where in the code. - static const basic_pointer_oserializer * find( + BOOST_DECL_ARCHIVE_OR_WARCHIVE + static const basic_pointer_oserializer * + find( const boost::serialization::extended_type_info & type_ ); virtual ~archive_pointer_oserializer(){} @@ -50,4 +56,6 @@ public: } // namespace archive } // namespace boost +#include // pops abi_suffix.hpp pragmas + #endif // BOOST_ARCHIVE_ARCHIVE_POINTER_OSERIALIZER_POINTER_HPP diff --git a/include/boost/archive/detail/basic_iarchive.hpp b/include/boost/archive/detail/basic_iarchive.hpp index 1718ed09..979b0fab 100644 --- a/include/boost/archive/detail/basic_iarchive.hpp +++ b/include/boost/archive/detail/basic_iarchive.hpp @@ -1,5 +1,5 @@ -#ifndef BOOST_ARCHIVE_BASIC_IARCHIVE_HPP -#define BOOST_ARCHIVE_BASIC_IARCHIVE_HPP +#ifndef BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP +#define BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) @@ -16,14 +16,13 @@ // See http://www.boost.org for updates, documentation, and revision history. -#include // can't use this - much as I'd like to as borland doesn't support it // #include -#include - #include +#include // must be the last header + namespace boost { namespace serialization { @@ -34,11 +33,11 @@ namespace archive { namespace detail { class basic_iarchive_impl; -class basic_iserializer; -class basic_pointer_iserializer; +class BOOST_DECL_ARCHIVE basic_iserializer; +class BOOST_DECL_ARCHIVE basic_pointer_iserializer; ////////////////////////////////////////////////////////////////////// // class basic_iarchive - read serialized objects from a input stream -class basic_iarchive +class BOOST_DECL_ARCHIVE basic_iarchive { friend class basic_iarchive_impl; // hide implementation of this class to minimize header conclusion @@ -57,15 +56,11 @@ public: // note: not part of the public API. void next_object_pointer(void *t); protected: - void init(unsigned int archive_library_version_){ - archive_library_version = archive_library_version_; - } + void init(unsigned int archive_library_version_); basic_iarchive(); virtual ~basic_iarchive(); public: - unsigned int library_version() const{ - return archive_library_version; - } + unsigned int library_version() const; void load_object( void *t, const basic_iserializer & bis @@ -91,4 +86,6 @@ BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION( boost::archive::detail::basic_iarchive ) -#endif //BOOST_ARCHIVE_BASIC_IARCHIVE_HPP +#include // pops abi_suffix.hpp pragmas + +#endif //BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP diff --git a/include/boost/archive/detail/basic_iserializer.hpp b/include/boost/archive/detail/basic_iserializer.hpp index abdc591b..9b99aa7c 100644 --- a/include/boost/archive/detail/basic_iserializer.hpp +++ b/include/boost/archive/detail/basic_iserializer.hpp @@ -17,8 +17,12 @@ // See http://www.boost.org for updates, documentation, and revision history. #include +#include // NULL +#include #include +#include // must be the last header + namespace boost { namespace serialization { @@ -29,30 +33,27 @@ namespace serialization { namespace archive { namespace detail { -class basic_iarchive; -class basic_pointer_iserializer; +class BOOST_DECL_ARCHIVE basic_iarchive; +class BOOST_DECL_ARCHIVE basic_pointer_iserializer; -class basic_iserializer : public basic_serializer +class BOOST_DECL_ARCHIVE basic_iserializer : public basic_serializer { private: - basic_pointer_iserializer *bpis_ptr; + basic_pointer_iserializer *bpis; protected: explicit basic_iserializer( - const boost::serialization::extended_type_info & type_ - ) : - basic_serializer(type_), - bpis_ptr(NULL) - {} - virtual ~basic_iserializer(){} + const boost::serialization::extended_type_info & type_ + ); + virtual ~basic_iserializer(); public: bool serialized_as_pointer() const { - return bpis_ptr != NULL; + return bpis != NULL; } - void set_bpis(basic_pointer_iserializer *bpis_ptr_){ - bpis_ptr = bpis_ptr_; + void set_bpis(basic_pointer_iserializer *bpis_){ + bpis = bpis_; } const basic_pointer_iserializer * get_bpis_ptr() const { - return bpis_ptr; + return bpis; } #if 0 virtual void load_object_data( @@ -83,4 +84,6 @@ public: } // namespace archive } // namespace boost +#include // pops abi_suffix.hpp pragmas + #endif // BOOST_ARCHIVE_DETAIL_BASIC_ISERIALIZER_HPP diff --git a/include/boost/archive/detail/basic_oarchive.hpp b/include/boost/archive/detail/basic_oarchive.hpp index 635368b3..496ef944 100644 --- a/include/boost/archive/detail/basic_oarchive.hpp +++ b/include/boost/archive/detail/basic_oarchive.hpp @@ -17,7 +17,6 @@ // See http://www.boost.org for updates, documentation, and revision history. #include - #include // can't use this - much as I'd like to as borland doesn't support it @@ -26,16 +25,18 @@ #include #include +#include // must be the last header + namespace boost { namespace archive { namespace detail { -class basic_oarchive_impl; -class basic_oserializer; -class basic_pointer_oserializer; +class BOOST_DECL_ARCHIVE basic_oarchive_impl; +class BOOST_DECL_ARCHIVE basic_oserializer; +class BOOST_DECL_ARCHIVE basic_pointer_oserializer; ////////////////////////////////////////////////////////////////////// // class basic_oarchive - write serialized objects to an output stream -class basic_oarchive +class BOOST_DECL_ARCHIVE basic_oarchive { friend class basic_oarchive_impl; // hide implementation of this class to minimize header conclusion @@ -59,9 +60,7 @@ protected: virtual ~basic_oarchive(); public: - unsigned int library_version() const{ - return ARCHIVE_VERSION; - } + unsigned int library_version() const; void save_object( const void *x, const basic_oserializer & bos @@ -72,20 +71,21 @@ public: ); void register_basic_serializer(const basic_oserializer & bos); void save_null_pointer(){ - vsave(null_pointer_tag); + vsave(NULL_POINTER_TAG); } - void end_preamble(){} // default implementation does nothing + void end_preamble(); // default implementation does nothing }; } // namespace detail } // namespace archive } // namespace boost - // required by smart_cast for compilers not implementing // partial template specialization BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION( boost::archive::detail::basic_oarchive ) +#include // pops abi_suffix.hpp pragmas + #endif //BOOST_ARCHIVE_BASIC_OARCHIVE_HPP diff --git a/include/boost/archive/detail/basic_oserializer.hpp b/include/boost/archive/detail/basic_oserializer.hpp index 6a843260..d03dace3 100644 --- a/include/boost/archive/detail/basic_oserializer.hpp +++ b/include/boost/archive/detail/basic_oserializer.hpp @@ -16,8 +16,12 @@ // See http://www.boost.org for updates, documentation, and revision history. +#include // NULL +#include #include +#include // must be the last header + namespace boost { namespace serialization { @@ -28,21 +32,19 @@ namespace serialization { namespace archive { namespace detail { -class basic_oarchive; -class basic_pointer_oserializer; +class BOOST_DECL_ARCHIVE basic_oarchive; +class BOOST_DECL_ARCHIVE basic_pointer_oserializer; -class basic_oserializer : public basic_serializer +class BOOST_DECL_ARCHIVE basic_oserializer : + public basic_serializer { private: basic_pointer_oserializer *bpos; protected: explicit basic_oserializer( - const boost::serialization::extended_type_info & type_ - ) : - basic_serializer(type_), - bpos(NULL) - {} - virtual ~basic_oserializer(){} + const boost::serialization::extended_type_info & type_ + ); + virtual ~basic_oserializer(); public: bool serialized_as_pointer() const { return bpos != NULL; @@ -70,4 +72,6 @@ public: } // namespace serialization } // namespace boost +#include // pops abi_suffix.hpp pragmas + #endif // BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP diff --git a/include/boost/archive/detail/basic_pointer_iserializer.hpp b/include/boost/archive/detail/basic_pointer_iserializer.hpp index 86899e9d..f2d33eeb 100644 --- a/include/boost/archive/detail/basic_pointer_iserializer.hpp +++ b/include/boost/archive/detail/basic_pointer_iserializer.hpp @@ -17,25 +17,27 @@ // See http://www.boost.org for updates, documentation, and revision history. +#include #include +#include // must be the last header + namespace boost { // forward declarations namespace archive { namespace detail { -class basic_iarchive; -class basic_iserializer; +class BOOST_DECL_ARCHIVE basic_iarchive; +class BOOST_DECL_ARCHIVE basic_iserializer; -class basic_pointer_iserializer : public basic_serializer { +class BOOST_DECL_ARCHIVE basic_pointer_iserializer + : public basic_serializer { protected: explicit basic_pointer_iserializer( const boost::serialization::extended_type_info & type_ - ) : - basic_serializer(type_) - {} - virtual ~basic_pointer_iserializer(){}; + ); + virtual ~basic_pointer_iserializer(); public: virtual const basic_iserializer & get_basic_serializer() const = 0; virtual void load_object_ptr( @@ -49,4 +51,6 @@ public: } // namespace archive } // namespace boost +#include // pops abi_suffix.hpp pragmas + #endif // BOOST_ARCHIVE_BASIC_ARCHIVE_POINTER_ISERIALIZER_HPP diff --git a/include/boost/archive/detail/basic_pointer_oserializer.hpp b/include/boost/archive/detail/basic_pointer_oserializer.hpp index 5f926218..b23646d4 100644 --- a/include/boost/archive/detail/basic_pointer_oserializer.hpp +++ b/include/boost/archive/detail/basic_pointer_oserializer.hpp @@ -17,8 +17,11 @@ // See http://www.boost.org for updates, documentation, and revision history. +#include #include +#include // must be the last header + namespace boost { namespace serialization { @@ -28,17 +31,15 @@ namespace serialization { namespace archive { namespace detail { -class basic_oarchive; -class basic_oserializer; +class BOOST_DECL_ARCHIVE basic_oarchive; +class BOOST_DECL_ARCHIVE basic_oserializer; -class basic_pointer_oserializer : public basic_serializer { +class BOOST_DECL_ARCHIVE basic_pointer_oserializer : public basic_serializer { protected: explicit basic_pointer_oserializer( const boost::serialization::extended_type_info & type_ - ) : - basic_serializer(type_) - {} - virtual ~basic_pointer_oserializer(){}; + ); + virtual ~basic_pointer_oserializer(); public: virtual const basic_oserializer & get_basic_serializer() const = 0; virtual void save_object_ptr( @@ -51,4 +52,6 @@ public: } // namespace archive } // namespace boost +#include // pops abi_suffix.hpp pragmas + #endif // BOOST_ARCHIVE_BASIC_ARCHIVE_POINTER_OSERIALIZER_HPP diff --git a/include/boost/archive/detail/basic_serializer.hpp b/include/boost/archive/detail/basic_serializer.hpp index cf6663eb..71c6e0ce 100644 --- a/include/boost/archive/detail/basic_serializer.hpp +++ b/include/boost/archive/detail/basic_serializer.hpp @@ -17,6 +17,7 @@ // See http://www.boost.org for updates, documentation, and revision history. #include +#include #include namespace boost { diff --git a/include/boost/archive/detail/basic_serializer_map.hpp b/include/boost/archive/detail/basic_serializer_map.hpp index d3db4c33..c88da6ed 100644 --- a/include/boost/archive/detail/basic_serializer_map.hpp +++ b/include/boost/archive/detail/basic_serializer_map.hpp @@ -18,6 +18,11 @@ #include +#include +#include + +#include // must be the last header + namespace boost { namespace serialization { class extended_type_info; @@ -26,7 +31,7 @@ namespace serialization { namespace archive { namespace detail { -class basic_serializer; +class BOOST_DECL_ARCHIVE basic_serializer; struct type_info_pointer_compare { @@ -37,7 +42,7 @@ struct type_info_pointer_compare } }; -struct basic_serializer_map +struct BOOST_DECL_ARCHIVE basic_serializer_map { typedef std::set map_type; map_type map; @@ -45,10 +50,13 @@ struct basic_serializer_map const basic_serializer * tfind( const boost::serialization::extended_type_info & type_ ) const; + basic_serializer_map(); }; } // namespace detail } // namespace archive } // namespace boost +#include // pops abi_suffix.hpp pragmas + #endif // BOOST_TYPEINFO_EXTENDED_MAP_HPP diff --git a/include/boost/archive/detail/common_iarchive.hpp b/include/boost/archive/detail/common_iarchive.hpp index 7ffa716c..6f6f36e5 100644 --- a/include/boost/archive/detail/common_iarchive.hpp +++ b/include/boost/archive/detail/common_iarchive.hpp @@ -18,8 +18,6 @@ #include -#include - #include #include #include @@ -59,27 +57,6 @@ protected: void load_start(const char *name){} void load_end(const char *name){} // default archive initialization - void init(){ - // read signature in an archive version independent manner - std::string file_signature; - * this->This() >> file_signature; - if(file_signature != ARCHIVE_SIGNATURE) - boost::throw_exception( - archive_exception(archive_exception::invalid_signature) - ); - - // make sure the version of the reading archive library can - // support the format of the archive being read - version_type input_library_version; - * this->This() >> input_library_version; - basic_iarchive::init(input_library_version); - const unsigned int current_library_version = ARCHIVE_VERSION; - // extra little .t is to get around borland quirk - if(current_library_version < input_library_version.t) - boost::throw_exception( - archive_exception(archive_exception::unsupported_version) - ); - } common_iarchive() : basic_iarchive(), interface_iarchive() diff --git a/include/boost/archive/detail/common_oarchive.hpp b/include/boost/archive/detail/common_oarchive.hpp index 447c45c6..153aa9d5 100644 --- a/include/boost/archive/detail/common_oarchive.hpp +++ b/include/boost/archive/detail/common_oarchive.hpp @@ -57,13 +57,6 @@ private: protected: void save_start(const char *name){} void save_end(const char *name){} - void init(){ - // write signature in an archive version independent manner - const std::string file_signature(ARCHIVE_SIGNATURE); - * this->This() << file_signature; - // write library version - * this->This() << ARCHIVE_VERSION; - } common_oarchive() : basic_oarchive(), interface_oarchive() diff --git a/include/boost/archive/detail/interface_iarchive.hpp b/include/boost/archive/detail/interface_iarchive.hpp index a93d2738..a3a33d39 100644 --- a/include/boost/archive/detail/interface_iarchive.hpp +++ b/include/boost/archive/detail/interface_iarchive.hpp @@ -16,19 +16,17 @@ // See http://www.boost.org for updates, documentation, and revision history. #include -#include #include #include -#include #include +#include // must be the last header namespace boost { namespace archive { namespace detail { -class basic_iserializer; -class basic_pointer_iserializer; +class BOOST_DECL_ARCHIVE basic_pointer_iserializer; template class interface_iarchive @@ -117,4 +115,6 @@ public: } // namespace archive } // namespace boost +#include // pops abi_suffix.hpp pragmas + #endif // BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP diff --git a/include/boost/archive/detail/interface_oarchive.hpp b/include/boost/archive/detail/interface_oarchive.hpp index 500f6925..a861b4ba 100644 --- a/include/boost/archive/detail/interface_oarchive.hpp +++ b/include/boost/archive/detail/interface_oarchive.hpp @@ -16,22 +16,21 @@ // See http://www.boost.org for updates, documentation, and revision history. #include -#include #include #include #include #include -#include #include #include +#include // must be the last header namespace boost { namespace archive { namespace detail { -class basic_oserializer; -class basic_pointer_oserializer; +class BOOST_DECL_ARCHIVE basic_oserializer; +class BOOST_DECL_ARCHIVE basic_pointer_oserializer; template class interface_oarchive @@ -116,4 +115,6 @@ public: } // namespace archive } // namespace boost +#include // pops abi_suffix.hpp pragmas + #endif // BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP diff --git a/include/boost/archive/detail/iserializer.hpp b/include/boost/archive/detail/iserializer.hpp index caf5283d..1f268fb4 100644 --- a/include/boost/archive/detail/iserializer.hpp +++ b/include/boost/archive/detail/iserializer.hpp @@ -77,7 +77,6 @@ namespace std{ #include #include #include -#include #include @@ -152,7 +151,7 @@ BOOST_DLLEXPORT void iserializer::load_object_data( ) const { // make sure call is routed through the higest interface that might // be specialized by the user. - boost::serialization::serialize_adl( + boost::serialization::serialize_adl( boost::smart_cast_reference(ar), * static_cast(x), file_version @@ -373,10 +372,12 @@ struct load_pointer_type { struct abstract { static const basic_pointer_iserializer * register_type(Archive & /* ar */){ + #if ! defined(__BORLANDC__) typedef BOOST_DEDUCED_TYPENAME boost::serialization::type_info_implementation::type::is_polymorphic typex; // it has? to be polymorphic BOOST_STATIC_ASSERT(typex::value); + #endif return static_cast(NULL); } }; diff --git a/include/boost/archive/detail/oserializer.hpp b/include/boost/archive/detail/oserializer.hpp index d86bb33b..b2fb4b59 100644 --- a/include/boost/archive/detail/oserializer.hpp +++ b/include/boost/archive/detail/oserializer.hpp @@ -70,7 +70,6 @@ #include #include #include -#include #include @@ -145,7 +144,7 @@ inline BOOST_DLLEXPORT void oserializer::save_object_data( ) const { // make sure call is routed through the highest interface that might // be specialized by the user. - boost::serialization::serialize_adl( + boost::serialization::serialize_adl( boost::smart_cast_reference(ar), * static_cast(const_cast(x)), version() @@ -223,7 +222,9 @@ struct save_non_pointer_type { // make sure call is routed through the highest interface that might // be specialized by the user. boost::serialization::serialize_adl( - ar, const_cast(t), ::boost::serialization::version::value + ar, + const_cast(t), + ::boost::serialization::version::value ); } }; diff --git a/include/boost/archive/detail/polymorphic_iarchive_impl.hpp b/include/boost/archive/detail/polymorphic_iarchive_impl.hpp index 334b6379..46d810ce 100644 --- a/include/boost/archive/detail/polymorphic_iarchive_impl.hpp +++ b/include/boost/archive/detail/polymorphic_iarchive_impl.hpp @@ -30,13 +30,14 @@ namespace std{ #endif #include +#include // must be the last header namespace boost { namespace archive { namespace detail{ -class basic_iserializer; -class basic_pointer_iserializer; +class BOOST_DECL_ARCHIVE basic_iserializer; +class BOOST_DECL_ARCHIVE basic_pointer_iserializer; template class polymorphic_iarchive_impl : @@ -141,7 +142,7 @@ private: ArchiveImplementation::load_end(name); } - virtual void register_basic_serializer(const detail::basic_iserializer & bis){ + virtual void register_basic_serializer(const basic_iserializer & bis){ ArchiveImplementation::register_basic_serializer(bis); } public: @@ -188,16 +189,14 @@ public: std::basic_istream<_Elem, _Tr> & is, unsigned int flags = 0 ) : - ArchiveImplementation(is, flags | boost::archive::no_header) - { - // postpone archive initialization until build is complete - if(0 == flags & no_header) - ArchiveImplementation::init(); - } + ArchiveImplementation(is, flags) + {} }; } // namespace detail } // namespace archive } // namespace boost +#include // pops abi_suffix.hpp pragmas + #endif // BOOST_ARCHIVE_DETAIL_POLYMORPHIC_IARCHIVE_IMPL_HPP diff --git a/include/boost/archive/detail/polymorphic_oarchive_impl.hpp b/include/boost/archive/detail/polymorphic_oarchive_impl.hpp index c5409a7e..ed4337ec 100644 --- a/include/boost/archive/detail/polymorphic_oarchive_impl.hpp +++ b/include/boost/archive/detail/polymorphic_oarchive_impl.hpp @@ -30,13 +30,14 @@ namespace std{ #endif #include +#include // must be the last header namespace boost { namespace archive { namespace detail{ -class basic_oserializer; -class basic_pointer_oserializer; +class BOOST_DECL_ARCHIVE basic_oserializer; +class BOOST_DECL_ARCHIVE basic_pointer_oserializer; template class polymorphic_oarchive_impl : @@ -188,16 +189,14 @@ public: std::basic_ostream<_Elem, _Tr> & os, unsigned int flags = 0 ) : - ArchiveImplementation(os, flags | no_header) - { - // postpone archive initialization until build is complete - if(0 == (flags & no_header)) - ArchiveImplementation::init(); - } + ArchiveImplementation(os, flags) + {} }; } // namespace detail } // namespace archive } // namespace boost +#include // pops abi_suffix.hpp pragmas + #endif // BOOST_ARCHIVE_DETAIL_POLYMORPHIC_OARCHIVE_IMPL_HPP