1 // (C) Copyright Gennadiy Rozental 2001.
2 // Use, modification, and distribution are subject to the
3 // Boost Software License, Version 1.0. (See accompanying file
4 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 // See http://www.boost.org/libs/test for the library home page.
10 // Version : $Revision$
12 // Description : defines facility to hide input traversing details
13 // ***************************************************************************
15 #ifndef BOOST_TEST_UTILS_RUNTIME_CLA_ARGV_TRAVERSER_HPP
16 #define BOOST_TEST_UTILS_RUNTIME_CLA_ARGV_TRAVERSER_HPP
18 // Boost.Test Runtime parameters
19 #include <boost/test/utils/runtime/fwd.hpp>
21 #include <boost/test/detail/suppress_warnings.hpp>
27 // ************************************************************************** //
28 // ************** runtime::cla::argv_traverser ************** //
29 // ************************************************************************** //
31 class argv_traverser {
32 typedef char const** argv_type;
34 /// Constructs traverser based on argc/argv pair
35 /// argv is taken "by reference" and later can be
36 /// updated in remainder method
37 argv_traverser( int argc, argv_type argv )
53 /// Returns true, if we reached end on input
56 return m_curr_token == m_argc;
59 /// Returns current token in the input
60 cstring current_token()
65 return cstring( m_argv[m_curr_token], m_token_size );
68 /// Saves current token for remainder
74 m_token_size = ::strlen( m_argv[m_curr_token] );
77 /// Commit current token and iterate to next one
81 for( std::size_t i = m_curr_token; i < m_argc-1; ++i )
82 m_argv[i] = m_argv[i + 1];
86 m_token_size = ::strlen( m_argv[m_curr_token] );
93 std::size_t m_argc; // total number of arguments
94 std::size_t m_curr_token; // current token index in argv
95 std::size_t m_token_size; // current token size
96 argv_type m_argv; // all arguments
100 } // namespace runtime
103 #include <boost/test/detail/enable_warnings.hpp>
105 #endif // BOOST_TEST_UTILS_RUNTIME_CLA_ARGV_TRAVERSER_HPP