123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- // (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() );
- //____________________________________________________________________________//
- cstring
- get_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
|