Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/property_tree/ptree_serialization.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/property_tree/ptree_serialization.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,102 @@ +// ---------------------------------------------------------------------------- +// 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