123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- // ----------------------------------------------------------------------------
- // Copyright (C) 2002-2006 Marcin Kalicinski
- //
- // Distributed under 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)
- //
- // For more information, see www.boost.org
- // ----------------------------------------------------------------------------
- #ifndef BOOST_PROPERTY_TREE_PTREE_SERIALIZATION_HPP_INCLUDED
- #define BOOST_PROPERTY_TREE_PTREE_SERIALIZATION_HPP_INCLUDED
- #include <boost/property_tree/ptree.hpp>
- #include <boost/serialization/nvp.hpp>
- #include <boost/serialization/collections_save_imp.hpp>
- #include <boost/serialization/collections_load_imp.hpp>
- #include <boost/serialization/split_free.hpp>
- #include <boost/serialization/utility.hpp>
- namespace boost { namespace property_tree
- {
- ///////////////////////////////////////////////////////////////////////////
- // boost::serialization support
- /**
- * Serialize the property tree to the given archive.
- * @note In addition to serializing to regular archives, this supports
- * serializing to archives requiring name-value pairs, e.g. XML
- * archives. However, the output format in the XML archive is not
- * guaranteed to be the same as that when using the Boost.PropertyTree
- * library's @c boost::property_tree::xml_parser::write_xml.
- * @param ar The archive to which to save the serialized property tree.
- * This archive should conform to the concept laid out by the
- * Boost.Serialization library.
- * @param t The property tree to serialize.
- * @param file_version file_version for the archive.
- * @post @c ar will contain the serialized form of @c t.
- */
- template<class Archive, class K, class D, class C>
- inline void save(Archive &ar,
- const basic_ptree<K, D, C> &t,
- const unsigned int file_version)
- {
- using namespace boost::serialization;
- stl::save_collection<Archive, basic_ptree<K, D, C> >(ar, t);
- ar << make_nvp("data", t.data());
- }
- /**
- * De-serialize the property tree to the given archive.
- * @note In addition to de-serializing from regular archives, this supports
- * loading from archives requiring name-value pairs, e.g. XML
- * archives. The format should be that used by
- * boost::property_tree::save.
- * @param ar The archive from which to load the serialized property tree.
- * This archive should conform to the concept laid out by the
- * Boost.Serialization library.
- * @param t The property tree to de-serialize.
- * @param file_version file_version for the archive.
- * @post @c t will contain the de-serialized data from @c ar.
- */
- template<class Archive, class K, class D, class C>
- inline void load(Archive &ar,
- basic_ptree<K, D, C> &t,
- const unsigned int file_version)
- {
- using namespace boost::serialization;
- // Load children
- stl::load_collection<Archive,
- basic_ptree<K, D, C>,
- stl::archive_input_seq<Archive,
- basic_ptree<K, D, C> >,
- stl::no_reserve_imp<
- basic_ptree<K, D, C> >
- >(ar, t);
- // Load data (must be after load_collection, as it calls clear())
- ar >> make_nvp("data", t.data());
- }
- /**
- * Load or store the property tree using the given archive.
- * @param ar The archive from which to load or save the serialized property
- * tree. The type of this archive will determine whether saving or
- * loading is performed.
- * @param t The property tree to load or save.
- * @param file_version file_version for the archive.
- */
- template<class Archive, class K, class D, class C>
- inline void serialize(Archive &ar,
- basic_ptree<K, D, C> &t,
- const unsigned int file_version)
- {
- using namespace boost::serialization;
- split_free(ar, t, file_version);
- }
- } }
- #endif
|