You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
102 lines
4.2 KiB
102 lines
4.2 KiB
// ---------------------------------------------------------------------------- |
|
// 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
|
|
|