Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/property_tree/info_parser.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/info_parser.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,151 @@ +// ---------------------------------------------------------------------------- +// 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_INFO_PARSER_HPP_INCLUDED +#define BOOST_PROPERTY_TREE_INFO_PARSER_HPP_INCLUDED + +#include <boost/property_tree/ptree.hpp> +#include <boost/property_tree/detail/info_parser_error.hpp> +#include <boost/property_tree/detail/info_parser_writer_settings.hpp> +#include <boost/property_tree/detail/info_parser_read.hpp> +#include <boost/property_tree/detail/info_parser_write.hpp> +#include <istream> + +namespace boost { namespace property_tree { namespace info_parser +{ + + /** + * Read INFO from a the given stream and translate it to a property tree. + * @note Replaces the existing contents. Strong exception guarantee. + * @throw info_parser_error If the stream cannot be read, doesn't contain + * valid INFO, or a conversion fails. + */ + template<class Ptree, class Ch> + void read_info(std::basic_istream<Ch> &stream, Ptree &pt) + { + Ptree local; + read_info_internal(stream, local, std::string(), 0); + pt.swap(local); + } + + /** + * Read INFO from a the given stream and translate it to a property tree. + * @note Replaces the existing contents. Strong exception guarantee. + * @param default_ptree If parsing fails, pt is set to a copy of this tree. + */ + template<class Ptree, class Ch> + void read_info(std::basic_istream<Ch> &stream, Ptree &pt, + const Ptree &default_ptree) + { + try { + read_info(stream, pt); + } catch(file_parser_error &) { + pt = default_ptree; + } + } + + /** + * Read INFO from a the given file and translate it to a property tree. The + * tree's key type must be a string type, i.e. it must have a nested + * value_type typedef that is a valid parameter for basic_ifstream. + * @note Replaces the existing contents. Strong exception guarantee. + * @throw info_parser_error If the file cannot be read, doesn't contain + * valid INFO, or a conversion fails. + */ + template<class Ptree> + void read_info(const std::string &filename, Ptree &pt, + const std::locale &loc = std::locale()) + { + std::basic_ifstream<typename Ptree::key_type::value_type> + stream(filename.c_str()); + if (!stream) { + BOOST_PROPERTY_TREE_THROW(info_parser_error( + "cannot open file for reading", filename, 0)); + } + stream.imbue(loc); + Ptree local; + read_info_internal(stream, local, filename, 0); + pt.swap(local); + } + + /** + * Read INFO from a the given file and translate it to a property tree. The + * tree's key type must be a string type, i.e. it must have a nested + * value_type typedef that is a valid parameter for basic_ifstream. + * @note Replaces the existing contents. Strong exception guarantee. + * @param default_ptree If parsing fails, pt is set to a copy of this tree. + */ + template<class Ptree> + void read_info(const std::string &filename, + Ptree &pt, + const Ptree &default_ptree, + const std::locale &loc = std::locale()) + { + try { + read_info(filename, pt, loc); + } catch(file_parser_error &) { + pt = default_ptree; + } + } + + /** + * Writes a tree to the stream in INFO format. + * @throw info_parser_error If the stream cannot be written to, or a + * conversion fails. + * @param settings The settings to use when writing the INFO data. + */ + template<class Ptree, class Ch> + void write_info(std::basic_ostream<Ch> &stream, + const Ptree &pt, + const info_writer_settings<Ch> &settings = + info_writer_settings<Ch>()) + { + write_info_internal(stream, pt, std::string(), settings); + } + + /** + * Writes a tree to the file in INFO format. The tree's key type must be a + * string type, i.e. it must have a nested value_type typedef that is a + * valid parameter for basic_ofstream. + * @throw info_parser_error If the file cannot be written to, or a + * conversion fails. + * @param settings The settings to use when writing the INFO data. + */ + template<class Ptree> + void write_info(const std::string &filename, + const Ptree &pt, + const std::locale &loc = std::locale(), + const info_writer_settings< + typename Ptree::key_type::value_type + > &settings = + info_writer_make_settings< + typename Ptree::key_type::value_type>()) + { + std::basic_ofstream<typename Ptree::key_type::value_type> + stream(filename.c_str()); + if (!stream) { + BOOST_PROPERTY_TREE_THROW(info_parser_error( + "cannot open file for writing", filename, 0)); + } + stream.imbue(loc); + write_info_internal(stream, pt, filename, settings); + } + +} } } + +namespace boost { namespace property_tree +{ + using info_parser::info_parser_error; + using info_parser::read_info; + using info_parser::write_info; + using info_parser::info_writer_settings; + using info_parser::info_writer_make_settings; +} } + +#endif