1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // (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: 57992 $
- //
- // Description : defines facility to hide input traversing details
- // ***************************************************************************
- #ifndef BOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER
- #define BOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER
- // Boost.Runtime.Parameter
- #include <boost/test/utils/runtime/config.hpp>
- // Boost.Test
- #include <boost/test/utils/class_properties.hpp>
- // Boost
- #include <boost/noncopyable.hpp>
- #include <boost/shared_array.hpp>
- namespace boost {
- namespace BOOST_RT_PARAM_NAMESPACE {
- namespace cla {
- // ************************************************************************** //
- // ************** runtime::cla::argv_traverser ************** //
- // ************************************************************************** //
- class argv_traverser : noncopyable {
- class parser;
- public:
- // Constructor
- argv_traverser();
- // public_properties
- unit_test::readwrite_property<bool> p_ignore_mismatch;
- unit_test::readwrite_property<char_type> p_separator;
- // argc+argv <-> internal buffer exchange
- void init( int argc, char_type** argv );
- void remainder( int& argc, char_type** argv );
- // token based parsing
- cstring token() const;
- void next_token();
- // whole input parsing
- cstring input() const;
- void trim( std::size_t size );
- bool match_front( cstring );
- bool match_front( char_type c );
- bool eoi() const;
- // transaction logic support
- void commit();
- void rollback();
- // current position access; used to save some reference points in input
- std::size_t input_pos() const;
- // returns true if mismatch detected during input parsing handled successfully
- bool handle_mismatch();
- private:
- // Data members
- dstring m_buffer;
- cstring m_work_buffer;
- cstring m_token;
- cstring::iterator m_commited_end;
- shared_array<char_type> m_remainder;
- std::size_t m_remainder_size;
- };
- } // namespace cla
- } // namespace BOOST_RT_PARAM_NAMESPACE
- } // namespace boost
- #ifndef BOOST_RT_PARAM_OFFLINE
- # define BOOST_RT_PARAM_INLINE inline
- # include <boost/test/utils/runtime/cla/argv_traverser.ipp>
- #endif
- #endif // BOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER
|