summaryrefslogtreecommitdiff
path: root/src/third_party/boost/boost/test/utils/iterator/token_iterator.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/boost/boost/test/utils/iterator/token_iterator.hpp')
-rw-r--r--src/third_party/boost/boost/test/utils/iterator/token_iterator.hpp418
1 files changed, 0 insertions, 418 deletions
diff --git a/src/third_party/boost/boost/test/utils/iterator/token_iterator.hpp b/src/third_party/boost/boost/test/utils/iterator/token_iterator.hpp
deleted file mode 100644
index c303ab7e711..00000000000
--- a/src/third_party/boost/boost/test/utils/iterator/token_iterator.hpp
+++ /dev/null
@@ -1,418 +0,0 @@
-// (C) Copyright Gennadiy Rozental 2004-2008.
-// Distributed under 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: 54633 $
-//
-// Description : token iterator for string and range tokenization
-// ***************************************************************************
-
-#ifndef BOOST_TOKEN_ITERATOR_HPP_071894GER
-#define BOOST_TOKEN_ITERATOR_HPP_071894GER
-
-// Boost
-#include <boost/config.hpp>
-#include <boost/detail/workaround.hpp>
-
-#include <boost/iterator/iterator_categories.hpp>
-#include <boost/iterator/iterator_traits.hpp>
-
-#include <boost/test/utils/iterator/input_iterator_facade.hpp>
-#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
-#include <boost/test/utils/named_params.hpp>
-#include <boost/test/utils/foreach.hpp>
-
-// STL
-#include <iosfwd>
-#include <cctype>
-
-#include <boost/test/detail/suppress_warnings.hpp>
-
-//____________________________________________________________________________//
-
-#ifdef BOOST_NO_STDC_NAMESPACE
-namespace std{ using ::ispunct; using ::isspace; }
-#endif
-
-namespace boost {
-
-namespace unit_test {
-
-// ************************************************************************** //
-// ************** ti_delimeter_type ************** //
-// ************************************************************************** //
-
-enum ti_delimeter_type {
- dt_char, // character is delimeter if it among explicit list of some characters
- dt_ispunct, // character is delimeter if it satisfies ispunct functor
- dt_isspace, // character is delimeter if it satisfies isspace functor
- dt_none // no character is delimeter
-};
-
-namespace ut_detail {
-
-// ************************************************************************** //
-// ************** default_char_compare ************** //
-// ************************************************************************** //
-
-template<typename CharT>
-class default_char_compare {
-public:
- bool operator()( CharT c1, CharT c2 )
- {
-#ifdef BOOST_CLASSIC_IOSTREAMS
- return std::string_char_traits<CharT>::eq( c1, c2 );
-#else
- return std::char_traits<CharT>::eq( c1, c2 );
-#endif
- }
-};
-
-// ************************************************************************** //
-// ************** delim_policy ************** //
-// ************************************************************************** //
-
-template<typename CharT,typename CharCompare>
-class delim_policy {
- typedef basic_cstring<CharT const> cstring;
-public:
- // Constructor
- explicit delim_policy( ti_delimeter_type t = dt_char, cstring d = cstring() )
- : m_type( t )
- {
- set_delimeters( d );
- }
-
- void set_delimeters( ti_delimeter_type t ) { m_type = t; }
- template<typename Src>
- void set_delimeters( Src d )
- {
- nfp::optionally_assign( m_delimeters, d );
-
- if( !m_delimeters.is_empty() )
- m_type = dt_char;
- }
-
- bool operator()( CharT c )
- {
- switch( m_type ) {
- case dt_char: {
- BOOST_TEST_FOREACH( CharT, delim, m_delimeters )
- if( CharCompare()( delim, c ) )
- return true;
-
- return false;
- }
- case dt_ispunct:
- return (std::ispunct)( c ) != 0;
- case dt_isspace:
- return (std::isspace)( c ) != 0;
- case dt_none:
- return false;
- }
-
- return false;
- }
-
-private:
- // Data members
- cstring m_delimeters;
- ti_delimeter_type m_type;
-};
-
-// ************************************************************************** //
-// ************** token_assigner ************** //
-// ************************************************************************** //
-
-template<typename TraversalTag>
-struct token_assigner {
-#if BOOST_WORKAROUND( BOOST_DINKUMWARE_STDLIB, < 306 )
- template<typename Iterator, typename C, typename T>
- static void assign( Iterator b, Iterator e, std::basic_string<C,T>& t )
- { for( ; b != e; ++b ) t += *b; }
-
- template<typename Iterator, typename C>
- static void assign( Iterator b, Iterator e, basic_cstring<C>& t ) { t.assign( b, e ); }
-#else
- template<typename Iterator, typename Token>
- static void assign( Iterator b, Iterator e, Token& t ) { t.assign( b, e ); }
-#endif
- template<typename Iterator, typename Token>
- static void append_move( Iterator& b, Token& ) { ++b; }
-};
-
-//____________________________________________________________________________//
-
-template<>
-struct token_assigner<single_pass_traversal_tag> {
- template<typename Iterator, typename Token>
- static void assign( Iterator b, Iterator e, Token& t ) {}
-
- template<typename Iterator, typename Token>
- static void append_move( Iterator& b, Token& t ) { t += *b; ++b; }
-};
-
-} // namespace ut_detail
-
-// ************************************************************************** //
-// ************** modifiers ************** //
-// ************************************************************************** //
-
-namespace {
-nfp::keyword<struct dropped_delimeters_t > dropped_delimeters;
-nfp::keyword<struct kept_delimeters_t > kept_delimeters;
-nfp::typed_keyword<bool,struct keep_empty_tokens_t > keep_empty_tokens;
-nfp::typed_keyword<std::size_t,struct max_tokens_t > max_tokens;
-}
-
-// ************************************************************************** //
-// ************** token_iterator_base ************** //
-// ************************************************************************** //
-
-template<typename Derived,
- typename CharT,
- typename CharCompare = ut_detail::default_char_compare<CharT>,
- typename ValueType = basic_cstring<CharT const>,
- typename Reference = basic_cstring<CharT const>,
- typename Traversal = forward_traversal_tag>
-class token_iterator_base
-: public input_iterator_facade<Derived,ValueType,Reference,Traversal> {
- typedef basic_cstring<CharT const> cstring;
- typedef ut_detail::delim_policy<CharT,CharCompare> delim_policy;
- typedef input_iterator_facade<Derived,ValueType,Reference,Traversal> base;
-
-protected:
- // Constructor
- explicit token_iterator_base()
- : m_is_dropped( dt_isspace )
- , m_is_kept( dt_ispunct )
- , m_keep_empty_tokens( false )
- , m_tokens_left( static_cast<std::size_t>(-1) )
- , m_token_produced( false )
- {
- }
-
- template<typename Modifier>
- void
- apply_modifier( Modifier const& m )
- {
- if( m.has( dropped_delimeters ) )
- m_is_dropped.set_delimeters( m[dropped_delimeters] );
-
- if( m.has( kept_delimeters ) )
- m_is_kept.set_delimeters( m[kept_delimeters] );
-
- if( m.has( keep_empty_tokens ) )
- m_keep_empty_tokens = true;
-
- nfp::optionally_assign( m_tokens_left, m, max_tokens );
- }
-
- template<typename Iter>
- bool get( Iter& begin, Iter end )
- {
- typedef ut_detail::token_assigner<BOOST_DEDUCED_TYPENAME iterator_traversal<Iter>::type> Assigner;
- Iter check_point;
-
- this->m_value.clear();
-
- if( !m_keep_empty_tokens ) {
- while( begin != end && m_is_dropped( *begin ) )
- ++begin;
-
- if( begin == end )
- return false;
-
- check_point = begin;
-
- if( m_tokens_left == 1 )
- while( begin != end )
- Assigner::append_move( begin, this->m_value );
- else if( m_is_kept( *begin ) )
- Assigner::append_move( begin, this->m_value );
- else
- while( begin != end && !m_is_dropped( *begin ) && !m_is_kept( *begin ) )
- Assigner::append_move( begin, this->m_value );
-
- --m_tokens_left;
- }
- else { // m_keep_empty_tokens is true
- check_point = begin;
-
- if( begin == end ) {
- if( m_token_produced )
- return false;
-
- m_token_produced = true;
- }
- if( m_is_kept( *begin ) ) {
- if( m_token_produced )
- Assigner::append_move( begin, this->m_value );
-
- m_token_produced = !m_token_produced;
- }
- else if( !m_token_produced && m_is_dropped( *begin ) )
- m_token_produced = true;
- else {
- if( m_is_dropped( *begin ) )
- check_point = ++begin;
-
- while( begin != end && !m_is_dropped( *begin ) && !m_is_kept( *begin ) )
- Assigner::append_move( begin, this->m_value );
-
- m_token_produced = true;
- }
- }
-
- Assigner::assign( check_point, begin, this->m_value );
-
- return true;
- }
-
-private:
- // Data members
- delim_policy m_is_dropped;
- delim_policy m_is_kept;
- bool m_keep_empty_tokens;
- std::size_t m_tokens_left;
- bool m_token_produced;
-};
-
-// ************************************************************************** //
-// ************** basic_string_token_iterator ************** //
-// ************************************************************************** //
-
-template<typename CharT,
- typename CharCompare = ut_detail::default_char_compare<CharT> >
-class basic_string_token_iterator
-: public token_iterator_base<basic_string_token_iterator<CharT,CharCompare>,CharT,CharCompare> {
- typedef basic_cstring<CharT const> cstring;
- typedef token_iterator_base<basic_string_token_iterator<CharT,CharCompare>,CharT,CharCompare> base;
-public:
- explicit basic_string_token_iterator() {}
- explicit basic_string_token_iterator( cstring src )
- : m_src( src )
- {
- this->init();
- }
-
- template<typename Src, typename Modifier>
- basic_string_token_iterator( Src src, Modifier const& m )
- : m_src( src )
- {
- this->apply_modifier( m );
-
- this->init();
- }
-
-private:
- friend class input_iterator_core_access;
-
- // input iterator implementation
- bool get()
- {
- typename cstring::iterator begin = m_src.begin();
- bool res = base::get( begin, m_src.end() );
-
- m_src.assign( begin, m_src.end() );
-
- return res;
- }
-
- // Data members
- cstring m_src;
-};
-
-typedef basic_string_token_iterator<char> string_token_iterator;
-typedef basic_string_token_iterator<wchar_t> wstring_token_iterator;
-
-// ************************************************************************** //
-// ************** range_token_iterator ************** //
-// ************************************************************************** //
-
-template<typename Iter,
- typename CharCompare = ut_detail::default_char_compare<BOOST_DEDUCED_TYPENAME iterator_value<Iter>::type>,
- typename ValueType = std::basic_string<BOOST_DEDUCED_TYPENAME iterator_value<Iter>::type>,
- typename Reference = ValueType const&>
-class range_token_iterator
-: public token_iterator_base<range_token_iterator<Iter,CharCompare,ValueType,Reference>,
- typename iterator_value<Iter>::type,CharCompare,ValueType,Reference> {
- typedef basic_cstring<typename ValueType::value_type> cstring;
- typedef token_iterator_base<range_token_iterator<Iter,CharCompare,ValueType,Reference>,
- typename iterator_value<Iter>::type,CharCompare,ValueType,Reference> base;
-public:
- explicit range_token_iterator() {}
- explicit range_token_iterator( Iter begin, Iter end = Iter() )
- : m_begin( begin ), m_end( end )
- {
- this->init();
- }
- range_token_iterator( range_token_iterator const& rhs )
- : base( rhs )
- {
- if( this->m_valid ) {
- m_begin = rhs.m_begin;
- m_end = rhs.m_end;
- }
- }
-
- template<typename Modifier>
- range_token_iterator( Iter begin, Iter end, Modifier const& m )
- : m_begin( begin ), m_end( end )
- {
- this->apply_modifier( m );
-
- this->init();
- }
-
-private:
- friend class input_iterator_core_access;
-
- // input iterator implementation
- bool get()
- {
- return base::get( m_begin, m_end );
- }
-
- // Data members
- Iter m_begin;
- Iter m_end;
-};
-
-// ************************************************************************** //
-// ************** make_range_token_iterator ************** //
-// ************************************************************************** //
-
-template<typename Iter>
-inline range_token_iterator<Iter>
-make_range_token_iterator( Iter begin, Iter end = Iter() )
-{
- return range_token_iterator<Iter>( begin, end );
-}
-
-//____________________________________________________________________________//
-
-template<typename Iter,typename Modifier>
-inline range_token_iterator<Iter>
-make_range_token_iterator( Iter begin, Iter end, Modifier const& m )
-{
- return range_token_iterator<Iter>( begin, end, m );
-}
-
-//____________________________________________________________________________//
-
-} // namespace unit_test
-
-} // namespace boost
-
-//____________________________________________________________________________//
-
-#include <boost/test/detail/enable_warnings.hpp>
-
-#endif // BOOST_TOKEN_ITERATOR_HPP_071894GER
-