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