boost/serialization/array.hpp
#ifndef BOOST_SERIALIZATION_ARRAY_HPP #define BOOST_SERIALIZATION_ARRAY_HPP // (C) Copyright 2005 Matthias Troyer and Dave Abrahams // 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) #include <boost/serialization/nvp.hpp> #include <boost/serialization/split_free.hpp> #include <boost/serialization/wrapper.hpp> #include <boost/serialization/collection_size_type.hpp> #include <boost/archive/archive_exception.hpp> #include <boost/throw_exception.hpp> #include <iostream> namespace boost { namespace serialization { template<class T> class array : public wrapper_traits<array<T> > { public: typedef T value_type; array(value_type* t, std::size_t s) : m_t(t), m_element_count(s) {} // default implementation template<class Archive> void serialize(Archive &ar, const unsigned int) const { // default implemention does the loop std::size_t c = count(); value_type * t = address(); while(0 < c--) ar & make_nvp("item", *t++); } value_type* address() const { return m_t; } std::size_t count() const { return m_element_count; } private: value_type* m_t; std::size_t const m_element_count; }; template<class T> inline #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING const #endif array<T> make_array( T* t, std::size_t s){ return array<T>(t, s); } /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // T[N] /* template<class Archive, class U, std::size_t N> void save( Archive & ar, U const (& t)[N], const unsigned int file_version ) { const serialization::collection_size_type count(N); ar << BOOST_SERIALIZATION_NVP(count); if (N) ar << serialization::make_array(&t[0],N); } template<class Archive, class U, std::size_t N> void load( Archive & ar, U (& t)[N], const unsigned int file_version ) { serialization::collection_size_type count; ar >> BOOST_SERIALIZATION_NVP(count); if(count > N) boost::throw_exception(archive::archive_exception( boost::archive::archive_exception::array_size_too_short )); if (N) ar >> serialization::make_array(&t[0],count); } // split non-intrusive serialization function member into separate // non intrusive save/load member functions template<class Archive, class U, std::size_t N> inline void serialize( Archive & ar, U (& t)[N], const unsigned int file_version) { boost::serialization::split_free(ar, t, file_version); } */ } } // end namespace boost::serialization #endif //BOOST_SERIALIZATION_ARRAY_HPP