#ifndef BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP #define BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // basic_binary_iarchive.hpp // // archives stored as native binary - this should be the fastest way // to archive the state of a group of obects. It makes no attempt to // convert to any canonical form. // IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE // ON PLATFORM APART FROM THE ONE THEY ARE CREATED ON // (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 #include #include #include #include #include #include #include // must be the last header namespace boost { namespace archive { ///////////////////////////////////////////////////////////////////////// // class basic_binary_iarchive - read serialized objects from a input binary stream template class basic_binary_iarchive : public array::iarchive { protected: #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) public: #elif defined(BOOST_MSVC) // for some inexplicable reason insertion of "class" generates compile erro // on msvc 7.1 friend detail::interface_iarchive; #else friend class detail::interface_iarchive; #endif // intermediate level to support override of operators // fot templates in the absence of partial function // template ordering. If we get here pass to base class // note extra nonsense to sneak it pass the borland compiers typedef array::iarchive array_iarchive; template void load_override(T & t, BOOST_PFTO int){ this->array_iarchive::load_override(t, 0); } // binary files don't include the optional information void load_override(class_id_optional_type & /* t */, int){} // the following have been overridden to provide specific sizes // for these pseudo prmitive types. void load_override(version_type & t, int){ // upto 255 versions unsigned char x=0; * this->This() >> x; t = version_type(x); } void load_override(class_id_type & t, int){ // upto 32K classes int_least16_t x=0; * this->This() >> x; t = class_id_type(x); } void load_override(class_id_reference_type & t, int){ // upto 32K classes int_least16_t x=0; * this->This() >> x; t = class_id_reference_type(x); } void load_override(object_id_type & t, int){ // upto 2G objects uint_least32_t x=0; * this->This() >> x; t = object_id_type(x); } void load_override(object_reference_type & t, int){ // upto 2G objects uint_least32_t x=0; * this->This() >> x; t = object_reference_type(x); } void load_override(tracking_type & t, int){ char x=0; * this->This() >> x; t = (0 != x); } void load_override(serialization::collection_size_type & t, int){ unsigned int x=0; * this->This() >> x; t = serialization::collection_size_type(x); } BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) load_override(class_name_type & t, int); BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) init(); basic_binary_iarchive(unsigned int flags) : array_iarchive(flags) {} }; } // namespace archive } // namespace boost #include // pops abi_suffix.hpp pragmas #endif // BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP