Chris@16: // (C) Copyright Gennadiy Rozental 2005-2008. Chris@16: // Use, modification, and distribution are subject to the Chris@16: // Boost Software License, Version 1.0. (See accompanying file Chris@16: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: // See http://www.boost.org/libs/test for the library home page. Chris@16: // Chris@16: // File : $RCSfile$ Chris@16: // Chris@101: // Version : $Revision$ Chris@16: // Chris@16: // Description : defines facility to hide input traversing details Chris@16: // *************************************************************************** Chris@16: Chris@16: #ifndef BOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER Chris@16: #define BOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER Chris@16: Chris@16: // Boost.Runtime.Parameter Chris@16: #include Chris@16: Chris@16: // Boost.Test Chris@16: #include Chris@16: Chris@16: // Boost Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: Chris@16: namespace BOOST_RT_PARAM_NAMESPACE { Chris@16: Chris@16: namespace cla { Chris@16: Chris@16: // ************************************************************************** // Chris@16: // ************** runtime::cla::argv_traverser ************** // Chris@16: // ************************************************************************** // Chris@16: Chris@16: class argv_traverser : noncopyable { Chris@16: class parser; Chris@16: public: Chris@16: // Constructor Chris@16: argv_traverser(); Chris@16: Chris@16: // public_properties Chris@16: unit_test::readwrite_property p_ignore_mismatch; Chris@16: unit_test::readwrite_property p_separator; Chris@16: Chris@16: // argc+argv <-> internal buffer exchange Chris@16: void init( int argc, char_type** argv ); Chris@16: void remainder( int& argc, char_type** argv ); Chris@16: Chris@16: // token based parsing Chris@16: cstring token() const; Chris@16: void next_token(); Chris@16: Chris@16: // whole input parsing Chris@16: cstring input() const; Chris@16: void trim( std::size_t size ); Chris@16: bool match_front( cstring ); Chris@16: bool match_front( char_type c ); Chris@16: bool eoi() const; Chris@16: Chris@16: // transaction logic support Chris@16: void commit(); Chris@16: void rollback(); Chris@16: Chris@16: // current position access; used to save some reference points in input Chris@16: std::size_t input_pos() const; Chris@16: Chris@16: // returns true if mismatch detected during input parsing handled successfully Chris@16: bool handle_mismatch(); Chris@16: Chris@16: private: Chris@16: // Data members Chris@16: dstring m_buffer; Chris@16: cstring m_work_buffer; Chris@16: Chris@16: cstring m_token; Chris@16: cstring::iterator m_commited_end; Chris@16: Chris@16: shared_array m_remainder; Chris@16: std::size_t m_remainder_size; Chris@16: }; Chris@16: Chris@16: } // namespace cla Chris@16: Chris@16: } // namespace BOOST_RT_PARAM_NAMESPACE Chris@16: Chris@16: } // namespace boost Chris@16: Chris@16: #ifndef BOOST_RT_PARAM_OFFLINE Chris@16: Chris@16: # define BOOST_RT_PARAM_INLINE inline Chris@16: # include Chris@16: Chris@16: #endif Chris@16: Chris@16: #endif // BOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER