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 + -
显示快捷键?