blob: 1e1f7bc8ee919077287120dc3c2d9f7053861e59 [file] [log] [blame]
// (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 NDNBOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER
#define NDNBOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER
// Boost.Runtime.Parameter
#include <ndnboost/test/utils/runtime/config.hpp>
// Boost.Test
#include <ndnboost/test/utils/class_properties.hpp>
// Boost
#include <ndnboost/noncopyable.hpp>
#include <ndnboost/shared_array.hpp>
namespace ndnboost {
namespace NDNBOOST_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 NDNBOOST_RT_PARAM_NAMESPACE
} // namespace ndnboost
#ifndef NDNBOOST_RT_PARAM_OFFLINE
# define NDNBOOST_RT_PARAM_INLINE inline
# include <ndnboost/test/utils/runtime/cla/argv_traverser.ipp>
#endif
#endif // NDNBOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER