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