config_file.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 183 行
HPP
183 行
// (C) Copyright Gennadiy Rozental 2005-2008.// Use, modification, and distribution are subject to 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)// See http://www.boost.org/libs/test for the library home page.//// File : $RCSfile$//// Version : $Revision: 49312 $//// Description : defines models configuration file, it's parameter and parameter namespaces// ***************************************************************************#ifndef BOOST_RT_FILE_CONFIG_FILE_HPP_010105GER#define BOOST_RT_FILE_CONFIG_FILE_HPP_010105GER// Boost.Runtime.Parameter#include <boost/test/utils/runtime/config.hpp>#include <boost/test/utils/runtime/file/config_file_iterator.hpp>// Boost.Test#include <boost/test/utils/class_properties.hpp>#include <boost/test/utils/named_params.hpp>// Boost#include <boost/optional.hpp>// STL#include <list>namespace boost {namespace BOOST_RT_PARAM_NAMESPACE {namespace file {// ************************************************************************** //// ************** runtime::file::parameter ************** //// ************************************************************************** //class param_namespace;class parameter {public: // Constructor parameter( cstring name, cstring value, param_namespace const& parent ); BOOST_READONLY_PROPERTY( dstring, (parameter)) p_name; BOOST_READONLY_PROPERTY( dstring, (parameter)) p_value; friend std::ostream& operator<<( std::ostream& os, parameter const& );private: // Data members param_namespace const& m_parent;};// ************************************************************************** //// ************** runtime::file::modifiers ************** //// ************************************************************************** //namespace {nfp::typed_keyword<cstring, struct value_marker_t> value_marker;nfp::typed_keyword<cstring, struct value_delimeter_t> value_delimeter;nfp::typed_keyword<cstring, struct namespace_delimeter_t> namespace_delimeter;} // local namespace // ************************************************************************** //// ************** runtime::file::param_namespace ************** //// ************************************************************************** //class param_namespace {public: typedef std::list<parameter>::iterator iterator; typedef std::list<parameter>::const_iterator const_iterator; typedef std::list<param_namespace>::iterator sub_ns_iterator; typedef std::list<param_namespace>::const_iterator sub_ns_const_iterator; // Public properties BOOST_READONLY_PROPERTY( dstring, (param_namespace)) p_name; unit_test::readonly_property<param_namespace const*> p_parent; void load( config_file_iterator cf_it ) { load( cf_it, nfp::no_params ); } template<typename Modifier> void load( config_file_iterator cf_it, Modifier const& m ) { cstring vm = m.has( value_marker ) ? m[value_marker] : BOOST_RT_PARAM_CSTRING_LITERAL( "\"" ); cstring vd = m.has( value_delimeter ) ? m[value_delimeter] : BOOST_RT_PARAM_CSTRING_LITERAL( "= \t\n\r" ); cstring nd = m.has( namespace_delimeter ) ? m[namespace_delimeter] : BOOST_RT_PARAM_CSTRING_LITERAL( "::" ); load_impl( cf_it, vm, vd, nd ); } void load( cstring file_name ) { load( file_name, nfp::no_params ); } template<typename Modifier> void load( cstring file_name, Modifier const& m ) { config_file_iterator cfi( file_name, m ); load( cfi, m ); } void insert_param( cstring param_name, cstring param_value ); param_namespace& subnamespace( cstring namespace_name ); // find and insert if not present void clear(); iterator begin() { return m_parameters.begin(); } const_iterator begin() const { return m_parameters.begin(); } iterator end() { return m_parameters.end(); } const_iterator end() const { return m_parameters.end(); } sub_ns_iterator sub_ns_begin() { return m_subnamespaces.begin(); } sub_ns_const_iterator sub_ns_begin() const { return m_subnamespaces.begin(); } sub_ns_iterator sub_ns_end() { return m_subnamespaces.end(); } sub_ns_const_iterator sub_ns_end() const { return m_subnamespaces.end(); } void print_full_name( std::ostream& os ) const;protected: explicit param_namespace( cstring name, param_namespace const* parent = 0 );private: void load_impl( config_file_iterator cf_it, cstring value_marker_, cstring value_delimeter_, cstring namespace_delimeter_ ); // Data members std::list<parameter> m_parameters; std::list<param_namespace> m_subnamespaces;};//____________________________________________________________________________//boost::optional<cstring>get_param_value( param_namespace const& where_from, cstring name_part1, cstring name_part2 = cstring(), cstring name_part3 = cstring(), cstring name_part4 = cstring(), cstring name_part5 = cstring() );//____________________________________________________________________________//cstringget_requ_param_value( param_namespace const& where_from, cstring name_part1, cstring name_part2 = cstring(), cstring name_part3 = cstring(), cstring name_part4 = cstring(), cstring name_part5 = cstring() );//____________________________________________________________________________//param_namespace const*get_param_subns( param_namespace const& where_from, cstring namespace_name );//____________________________________________________________________________//// ************************************************************************** //// ************** runtime::file::config_file ************** //// ************************************************************************** //class config_file : public param_namespace {public: // Constructor config_file(); config_file( cstring file_name );};} // namespace file} // namespace BOOST_RT_PARAM_NAMESPACE} // namespace boost#endif // BOOST_RT_FILE_CONFIG_FILE_HPP_010105GER
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?