williamr@2: #ifndef BOOST_SERIALIZATION_BINARY_OBJECT_HPP williamr@2: #define BOOST_SERIALIZATION_BINARY_OBJECT_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: // nvp.hpp: interface for serialization system. 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 williamr@2: williamr@2: #include // std::size_t williamr@2: #include williamr@2: #if defined(BOOST_NO_STDC_NAMESPACE) williamr@2: namespace std{ williamr@2: using ::size_t; williamr@2: } // namespace std williamr@2: #endif williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: namespace boost { williamr@2: namespace serialization { williamr@2: williamr@2: struct binary_object { williamr@2: /* const */ void * const m_t; williamr@2: const std::size_t m_size; williamr@2: template williamr@2: void save(Archive & ar, const unsigned int /* file_version */) const { williamr@2: ar.save_binary(m_t, m_size); williamr@2: } williamr@2: template williamr@2: void load(Archive & ar, const unsigned int /* file_version */) const { williamr@2: ar.load_binary(const_cast(m_t), m_size); williamr@2: } williamr@2: BOOST_SERIALIZATION_SPLIT_MEMBER() williamr@2: binary_object(/* const */ void * const t, std::size_t size) : williamr@2: m_t(t), williamr@2: m_size(size) williamr@2: {} williamr@2: binary_object(const binary_object & rhs) : williamr@2: m_t(rhs.m_t), williamr@2: m_size(rhs.m_size) williamr@2: {} williamr@2: }; williamr@2: williamr@2: // just a little helper to support the convention that all serialization williamr@2: // wrappers follow the naming convention make_xxxxx williamr@2: inline williamr@2: #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING williamr@2: const williamr@2: #endif williamr@2: binary_object williamr@2: make_binary_object(/* const */ void * t, std::size_t size){ williamr@2: return binary_object(t, size); williamr@2: } williamr@2: williamr@2: } // namespace serialization williamr@2: } // boost williamr@2: williamr@2: // don't need versioning info for this type williamr@2: BOOST_CLASS_IMPLEMENTATION( williamr@2: binary_object, williamr@2: boost::serialization::object_serializable williamr@2: ) williamr@2: williamr@2: // don't track binary objects - usually they will be created on the stack williamr@2: // and tracking algorithm (which uses the object address) might get williamr@2: // confused. note that these address will likely be members of some williamr@2: // other structure which itself is tracked, so as a practical matter williamr@2: // suppressing tracking shouldn't cause any redundancy. williamr@2: williamr@2: BOOST_CLASS_TRACKING(binary_object, boost::serialization::track_never) williamr@2: williamr@2: #endif // BOOST_SERIALIZATION_BINARY_OBJECT_HPP