config_file_iterator.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 167 行

HPP
167
字号
//  (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 : flexible configuration file iterator definition// ***************************************************************************#ifndef BOOST_RT_FILE_CONFIG_FILE_ITERATOR_HPP_062604GER#define BOOST_RT_FILE_CONFIG_FILE_ITERATOR_HPP_062604GER// Boost.Runtime.Parameter#include <boost/test/utils/runtime/config.hpp>#include <boost/test/utils/runtime/fwd.hpp>// Boost.Test#include <boost/test/utils/iterator/input_iterator_facade.hpp>#include <boost/test/utils/callback.hpp>#include <boost/test/utils/named_params.hpp>// Boost#include <boost/shared_ptr.hpp>namespace boost {namespace BOOST_RT_PARAM_NAMESPACE {namespace file {// Public typedef typedef std::pair<dstring,long> location;// ************************************************************************** //// **************                   modifiers                  ************** //// ************************************************************************** //namespace cfg_detail {    struct path_separators_t;    struct line_delimeter_t;    struct sl_comment_delimeter_t;    struct command_delimeter_t;    struct line_beak_t;    struct macro_ref_begin_t;    struct macro_ref_end_t;    struct include_kw_t;    struct define_kw_t;    struct undef_kw_t;    struct ifdef_kw_t;    struct ifndef_kw_t;    struct else_kw_t;    struct endif_kw_t;    struct buffer_size_t;    struct trim_leading_spaces_t;    struct trim_trailing_spaces_t;    struct skip_empty_lines_t;    struct detect_missing_macro_t;} // namespace cfg_detailnamespace {nfp::typed_keyword<cstring,cfg_detail::path_separators_t>       path_separators;nfp::typed_keyword<char_type ,cfg_detail::line_delimeter_t>     line_delimeter;nfp::typed_keyword<cstring,cfg_detail::sl_comment_delimeter_t>  single_line_comment_delimeter;nfp::typed_keyword<cstring,cfg_detail::command_delimeter_t>     command_delimeter;nfp::typed_keyword<cstring,cfg_detail::line_beak_t>             line_beak;nfp::typed_keyword<cstring,cfg_detail::macro_ref_begin_t>       macro_ref_begin;nfp::typed_keyword<cstring,cfg_detail::macro_ref_end_t>         macro_ref_end;nfp::typed_keyword<cstring,cfg_detail::include_kw_t>            include_kw;nfp::typed_keyword<cstring,cfg_detail::define_kw_t>             define_kw;nfp::typed_keyword<cstring,cfg_detail::undef_kw_t>              undef_kw;nfp::typed_keyword<cstring,cfg_detail::ifdef_kw_t>              ifdef_kw;nfp::typed_keyword<cstring,cfg_detail::ifndef_kw_t>             ifndef_kw;nfp::typed_keyword<cstring,cfg_detail::else_kw_t>               else_kw;nfp::typed_keyword<cstring,cfg_detail::endif_kw_t>              endif_kw;nfp::typed_keyword<std::size_t,cfg_detail::buffer_size_t>       buffer_size;nfp::typed_keyword<bool,cfg_detail::trim_leading_spaces_t>      trim_leading_spaces;nfp::typed_keyword<bool,cfg_detail::trim_trailing_spaces_t>     trim_trailing_spaces;nfp::typed_keyword<bool,cfg_detail::skip_empty_lines_t>         skip_empty_lines;nfp::typed_keyword<bool,cfg_detail::detect_missing_macro_t>     detect_missing_macro;} // local namespace// ************************************************************************** //// **************      runtime::file::config_file_iterator      ************** //// ************************************************************************** //class config_file_iterator : public unit_test::input_iterator_facade<config_file_iterator,cstring,cstring> {    typedef unit_test::input_iterator_facade<config_file_iterator,cstring,cstring> base;public:    // Public typedefs    typedef unit_test::callback1<cstring>   command_handler;    // Constructors                    config_file_iterator() {}    explicit        config_file_iterator( cstring file_name )    {        construct();        load( file_name );    }    template<typename Modifiers>                    config_file_iterator( cstring file_name, Modifiers const& m )    {        construct();        m.apply_to( *this );        load( file_name );    }    config_file_iterator( config_file_iterator const& rhs )    : base( rhs )    , m_pimpl( rhs.m_pimpl )    {        rhs.m_valid = false;    }    void operator=( config_file_iterator const& rhs )    {        if( this == &rhs )            return;        (base&)(*this)  = rhs;        m_pimpl         = rhs.m_pimpl;        rhs.m_valid     = false;    }    // Assignment    // Access methods    location const& curr_location();    void            register_command_handler( cstring command_kw, command_handler const& );    // Parameters setters    void            set_parameter( rtti::id_t, cstring );    void            set_parameter( rtti::id_t, bool );    void            set_parameter( rtti::id_t, char_type );    void            set_parameter( rtti::id_t, std::size_t );private:    friend class unit_test::input_iterator_core_access;    void            construct();    void            load( cstring file_name );    // increment implementation    bool            get();    // Data members    struct Impl;    shared_ptr<Impl> m_pimpl;};} // namespace file} // namespace BOOST_RT_PARAM_NAMESPACE} // namespace boost#endif // BOOST_RT_FILE_CONFIG_FILE_ITERATOR_HPP_062604GER

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?