williamr@2: #ifndef BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP
williamr@2: #define BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP
williamr@2: 
williamr@2: // MS compatible compilers support #pragma once
williamr@2: #if defined(_MSC_VER) && (_MSC_VER >= 1020)
williamr@2: # pragma once
williamr@2: #endif
williamr@2: 
williamr@2: /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
williamr@2: // basic_oserializer.hpp: extenstion of type_info required for serialization.
williamr@2: 
williamr@2: // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
williamr@2: // Use, modification and distribution is subject to the Boost Software
williamr@2: // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
williamr@2: // http://www.boost.org/LICENSE_1_0.txt)
williamr@2: 
williamr@2: //  See http://www.boost.org for updates, documentation, and revision history.
williamr@2: 
williamr@2: #include <cstdlib> // NULL
williamr@2: #include <boost/config.hpp>
williamr@2: 
williamr@2: #include <boost/archive/detail/auto_link_archive.hpp>
williamr@2: #include <boost/archive/detail/basic_serializer.hpp>
williamr@2: 
williamr@2: #include <boost/archive/detail/abi_prefix.hpp> // must be the last header
williamr@2: 
williamr@2: namespace boost {
williamr@2: 
williamr@2: namespace serialization {
williamr@2:     class extended_type_info;
williamr@2: } // namespace serialization
williamr@2: 
williamr@2: // forward declarations
williamr@2: namespace archive {
williamr@2: namespace detail {
williamr@2: 
williamr@2: class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oarchive;
williamr@2: class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer;
williamr@2: 
williamr@2: class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oserializer : 
williamr@2:     public basic_serializer
williamr@2: {
williamr@2: private:
williamr@2:     basic_pointer_oserializer *bpos;
williamr@2: protected:
williamr@2:     explicit basic_oserializer(
williamr@2:         const boost::serialization::extended_type_info & type_
williamr@2:     );
williamr@2:     // account for bogus gcc warning
williamr@2:     #if defined(__GNUC__)
williamr@2:     virtual
williamr@2:     #endif
williamr@2:     ~basic_oserializer();
williamr@2: public:
williamr@2:     bool serialized_as_pointer() const {
williamr@2:         return bpos != NULL;
williamr@2:     }
williamr@2:     void set_bpos(basic_pointer_oserializer *bpos_){
williamr@2:         bpos = bpos_;
williamr@2:     }
williamr@2:     const basic_pointer_oserializer * get_bpos() const {
williamr@2:         return bpos;
williamr@2:     }
williamr@2:     virtual void save_object_data(
williamr@2:         basic_oarchive & ar, const void * x
williamr@2:     ) const = 0;
williamr@2:     // returns true if class_info should be saved
williamr@2:     virtual bool class_info() const = 0;
williamr@2:     // returns true if objects should be tracked
williamr@2:     virtual bool tracking(const unsigned int flags) const = 0;
williamr@2:     // returns class version
williamr@2:     virtual unsigned int version() const = 0;
williamr@2:     // returns true if this class is polymorphic
williamr@2:     virtual bool is_polymorphic() const = 0;
williamr@2: };
williamr@2: 
williamr@2: } // namespace detail
williamr@2: } // namespace serialization
williamr@2: } // namespace boost
williamr@2: 
williamr@2: #include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
williamr@2: 
williamr@2: #endif // BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP