summaryrefslogtreecommitdiffstats
path: root/contrib/src/boost/algorithm/string/find_iterator.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/src/boost/algorithm/string/find_iterator.hpp')
-rw-r--r--contrib/src/boost/algorithm/string/find_iterator.hpp776
1 files changed, 388 insertions, 388 deletions
diff --git a/contrib/src/boost/algorithm/string/find_iterator.hpp b/contrib/src/boost/algorithm/string/find_iterator.hpp
index 831a9d9..5a52d92 100644
--- a/contrib/src/boost/algorithm/string/find_iterator.hpp
+++ b/contrib/src/boost/algorithm/string/find_iterator.hpp
@@ -1,388 +1,388 @@
-// Boost string_algo library find_iterator.hpp header file ---------------------------//
-
-// Copyright Pavol Droba 2002-2004.
-//
-// 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/ for updates, documentation, and revision history.
-
-#ifndef BOOST_STRING_FIND_ITERATOR_HPP
-#define BOOST_STRING_FIND_ITERATOR_HPP
-
-#include <boost/algorithm/string/config.hpp>
-#include <boost/iterator/iterator_facade.hpp>
-#include <boost/iterator/iterator_categories.hpp>
-
-#include <boost/range/iterator_range_core.hpp>
-#include <boost/range/begin.hpp>
-#include <boost/range/end.hpp>
-#include <boost/range/iterator.hpp>
-#include <boost/range/as_literal.hpp>
-
-#include <boost/algorithm/string/detail/find_iterator.hpp>
-
-/*! \file
- Defines find iterator classes. Find iterator repeatedly applies a Finder
- to the specified input string to search for matches. Dereferencing
- the iterator yields the current match or a range between the last and the current
- match depending on the iterator used.
-*/
-
-namespace boost {
- namespace algorithm {
-
-// find_iterator -----------------------------------------------//
-
- //! find_iterator
- /*!
- Find iterator encapsulates a Finder and allows
- for incremental searching in a string.
- Each increment moves the iterator to the next match.
-
- Find iterator is a readable forward traversal iterator.
-
- Dereferencing the iterator yields an iterator_range delimiting
- the current match.
- */
- template<typename IteratorT>
- class find_iterator :
- public iterator_facade<
- find_iterator<IteratorT>,
- const iterator_range<IteratorT>,
- forward_traversal_tag >,
- private detail::find_iterator_base<IteratorT>
- {
- private:
- // facade support
- friend class ::boost::iterator_core_access;
-
- private:
- // typedefs
-
- typedef detail::find_iterator_base<IteratorT> base_type;
- typedef BOOST_STRING_TYPENAME
- base_type::input_iterator_type input_iterator_type;
- typedef BOOST_STRING_TYPENAME
- base_type::match_type match_type;
-
- public:
- //! Default constructor
- /*!
- Construct null iterator. All null iterators are equal.
-
- \post eof()==true
- */
- find_iterator() {}
-
- //! Copy constructor
- /*!
- Construct a copy of the find_iterator
- */
- find_iterator( const find_iterator& Other ) :
- base_type(Other),
- m_Match(Other.m_Match),
- m_End(Other.m_End) {}
-
- //! Constructor
- /*!
- Construct new find_iterator for a given finder
- and a range.
- */
- template<typename FinderT>
- find_iterator(
- IteratorT Begin,
- IteratorT End,
- FinderT Finder ) :
- detail::find_iterator_base<IteratorT>(Finder,0),
- m_Match(Begin,Begin),
- m_End(End)
- {
- increment();
- }
-
- //! Constructor
- /*!
- Construct new find_iterator for a given finder
- and a range.
- */
- template<typename FinderT, typename RangeT>
- find_iterator(
- RangeT& Col,
- FinderT Finder ) :
- detail::find_iterator_base<IteratorT>(Finder,0)
- {
- iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(::boost::as_literal(Col));
- m_Match=::boost::make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));
- m_End=::boost::end(lit_col);
-
- increment();
- }
-
- private:
- // iterator operations
-
- // dereference
- const match_type& dereference() const
- {
- return m_Match;
- }
-
- // increment
- void increment()
- {
- m_Match=this->do_find(m_Match.end(),m_End);
- }
-
- // comparison
- bool equal( const find_iterator& Other ) const
- {
- bool bEof=eof();
- bool bOtherEof=Other.eof();
-
- return bEof || bOtherEof ? bEof==bOtherEof :
- (
- m_Match==Other.m_Match &&
- m_End==Other.m_End
- );
- }
-
- public:
- // operations
-
- //! Eof check
- /*!
- Check the eof condition. Eof condition means that
- there is nothing more to be searched i.e. find_iterator
- is after the last match.
- */
- bool eof() const
- {
- return
- this->is_null() ||
- (
- m_Match.begin() == m_End &&
- m_Match.end() == m_End
- );
- }
-
- private:
- // Attributes
- match_type m_Match;
- input_iterator_type m_End;
- };
-
- //! find iterator construction helper
- /*!
- * Construct a find iterator to iterate through the specified string
- */
- template<typename RangeT, typename FinderT>
- inline find_iterator<
- BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
- make_find_iterator(
- RangeT& Collection,
- FinderT Finder)
- {
- return find_iterator<BOOST_STRING_TYPENAME range_iterator<RangeT>::type>(
- Collection, Finder);
- }
-
-// split iterator -----------------------------------------------//
-
- //! split_iterator
- /*!
- Split iterator encapsulates a Finder and allows
- for incremental searching in a string.
- Unlike the find iterator, split iterator iterates
- through gaps between matches.
-
- Find iterator is a readable forward traversal iterator.
-
- Dereferencing the iterator yields an iterator_range delimiting
- the current match.
- */
- template<typename IteratorT>
- class split_iterator :
- public iterator_facade<
- split_iterator<IteratorT>,
- const iterator_range<IteratorT>,
- forward_traversal_tag >,
- private detail::find_iterator_base<IteratorT>
- {
- private:
- // facade support
- friend class ::boost::iterator_core_access;
-
- private:
- // typedefs
-
- typedef detail::find_iterator_base<IteratorT> base_type;
- typedef BOOST_STRING_TYPENAME
- base_type::input_iterator_type input_iterator_type;
- typedef BOOST_STRING_TYPENAME
- base_type::match_type match_type;
-
- public:
- //! Default constructor
- /*!
- Construct null iterator. All null iterators are equal.
-
- \post eof()==true
- */
- split_iterator() :
- m_Next(),
- m_End(),
- m_bEof(true)
- {}
-
- //! Copy constructor
- /*!
- Construct a copy of the split_iterator
- */
- split_iterator( const split_iterator& Other ) :
- base_type(Other),
- m_Match(Other.m_Match),
- m_Next(Other.m_Next),
- m_End(Other.m_End),
- m_bEof(Other.m_bEof)
- {}
-
- //! Constructor
- /*!
- Construct new split_iterator for a given finder
- and a range.
- */
- template<typename FinderT>
- split_iterator(
- IteratorT Begin,
- IteratorT End,
- FinderT Finder ) :
- detail::find_iterator_base<IteratorT>(Finder,0),
- m_Match(Begin,Begin),
- m_Next(Begin),
- m_End(End),
- m_bEof(false)
- {
- // force the correct behavior for empty sequences and yield at least one token
- if(Begin!=End)
- {
- increment();
- }
- }
- //! Constructor
- /*!
- Construct new split_iterator for a given finder
- and a collection.
- */
- template<typename FinderT, typename RangeT>
- split_iterator(
- RangeT& Col,
- FinderT Finder ) :
- detail::find_iterator_base<IteratorT>(Finder,0),
- m_bEof(false)
- {
- iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(::boost::as_literal(Col));
- m_Match=make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));
- m_Next=::boost::begin(lit_col);
- m_End=::boost::end(lit_col);
-
- // force the correct behavior for empty sequences and yield at least one token
- if(m_Next!=m_End)
- {
- increment();
- }
- }
-
-
- private:
- // iterator operations
-
- // dereference
- const match_type& dereference() const
- {
- return m_Match;
- }
-
- // increment
- void increment()
- {
- match_type FindMatch=this->do_find( m_Next, m_End );
-
- if(FindMatch.begin()==m_End && FindMatch.end()==m_End)
- {
- if(m_Match.end()==m_End)
- {
- // Mark iterator as eof
- m_bEof=true;
- }
- }
-
- m_Match=match_type( m_Next, FindMatch.begin() );
- m_Next=FindMatch.end();
- }
-
- // comparison
- bool equal( const split_iterator& Other ) const
- {
- bool bEof=eof();
- bool bOtherEof=Other.eof();
-
- return bEof || bOtherEof ? bEof==bOtherEof :
- (
- m_Match==Other.m_Match &&
- m_Next==Other.m_Next &&
- m_End==Other.m_End
- );
- }
-
- public:
- // operations
-
- //! Eof check
- /*!
- Check the eof condition. Eof condition means that
- there is nothing more to be searched i.e. find_iterator
- is after the last match.
- */
- bool eof() const
- {
- return this->is_null() || m_bEof;
- }
-
- private:
- // Attributes
- match_type m_Match;
- input_iterator_type m_Next;
- input_iterator_type m_End;
- bool m_bEof;
- };
-
- //! split iterator construction helper
- /*!
- * Construct a split iterator to iterate through the specified collection
- */
- template<typename RangeT, typename FinderT>
- inline split_iterator<
- BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
- make_split_iterator(
- RangeT& Collection,
- FinderT Finder)
- {
- return split_iterator<BOOST_STRING_TYPENAME range_iterator<RangeT>::type>(
- Collection, Finder);
- }
-
-
- } // namespace algorithm
-
- // pull names to the boost namespace
- using algorithm::find_iterator;
- using algorithm::make_find_iterator;
- using algorithm::split_iterator;
- using algorithm::make_split_iterator;
-
-} // namespace boost
-
-
-#endif // BOOST_STRING_FIND_ITERATOR_HPP
+// Boost string_algo library find_iterator.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2004.
+//
+// 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/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FIND_ITERATOR_HPP
+#define BOOST_STRING_FIND_ITERATOR_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/as_literal.hpp>
+
+#include <boost/algorithm/string/detail/find_iterator.hpp>
+
+/*! \file
+ Defines find iterator classes. Find iterator repeatedly applies a Finder
+ to the specified input string to search for matches. Dereferencing
+ the iterator yields the current match or a range between the last and the current
+ match depending on the iterator used.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// find_iterator -----------------------------------------------//
+
+ //! find_iterator
+ /*!
+ Find iterator encapsulates a Finder and allows
+ for incremental searching in a string.
+ Each increment moves the iterator to the next match.
+
+ Find iterator is a readable forward traversal iterator.
+
+ Dereferencing the iterator yields an iterator_range delimiting
+ the current match.
+ */
+ template<typename IteratorT>
+ class find_iterator :
+ public iterator_facade<
+ find_iterator<IteratorT>,
+ const iterator_range<IteratorT>,
+ forward_traversal_tag >,
+ private detail::find_iterator_base<IteratorT>
+ {
+ private:
+ // facade support
+ friend class ::boost::iterator_core_access;
+
+ private:
+ // typedefs
+
+ typedef detail::find_iterator_base<IteratorT> base_type;
+ typedef BOOST_STRING_TYPENAME
+ base_type::input_iterator_type input_iterator_type;
+ typedef BOOST_STRING_TYPENAME
+ base_type::match_type match_type;
+
+ public:
+ //! Default constructor
+ /*!
+ Construct null iterator. All null iterators are equal.
+
+ \post eof()==true
+ */
+ find_iterator() {}
+
+ //! Copy constructor
+ /*!
+ Construct a copy of the find_iterator
+ */
+ find_iterator( const find_iterator& Other ) :
+ base_type(Other),
+ m_Match(Other.m_Match),
+ m_End(Other.m_End) {}
+
+ //! Constructor
+ /*!
+ Construct new find_iterator for a given finder
+ and a range.
+ */
+ template<typename FinderT>
+ find_iterator(
+ IteratorT Begin,
+ IteratorT End,
+ FinderT Finder ) :
+ detail::find_iterator_base<IteratorT>(Finder,0),
+ m_Match(Begin,Begin),
+ m_End(End)
+ {
+ increment();
+ }
+
+ //! Constructor
+ /*!
+ Construct new find_iterator for a given finder
+ and a range.
+ */
+ template<typename FinderT, typename RangeT>
+ find_iterator(
+ RangeT& Col,
+ FinderT Finder ) :
+ detail::find_iterator_base<IteratorT>(Finder,0)
+ {
+ iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(::boost::as_literal(Col));
+ m_Match=::boost::make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));
+ m_End=::boost::end(lit_col);
+
+ increment();
+ }
+
+ private:
+ // iterator operations
+
+ // dereference
+ const match_type& dereference() const
+ {
+ return m_Match;
+ }
+
+ // increment
+ void increment()
+ {
+ m_Match=this->do_find(m_Match.end(),m_End);
+ }
+
+ // comparison
+ bool equal( const find_iterator& Other ) const
+ {
+ bool bEof=eof();
+ bool bOtherEof=Other.eof();
+
+ return bEof || bOtherEof ? bEof==bOtherEof :
+ (
+ m_Match==Other.m_Match &&
+ m_End==Other.m_End
+ );
+ }
+
+ public:
+ // operations
+
+ //! Eof check
+ /*!
+ Check the eof condition. Eof condition means that
+ there is nothing more to be searched i.e. find_iterator
+ is after the last match.
+ */
+ bool eof() const
+ {
+ return
+ this->is_null() ||
+ (
+ m_Match.begin() == m_End &&
+ m_Match.end() == m_End
+ );
+ }
+
+ private:
+ // Attributes
+ match_type m_Match;
+ input_iterator_type m_End;
+ };
+
+ //! find iterator construction helper
+ /*!
+ * Construct a find iterator to iterate through the specified string
+ */
+ template<typename RangeT, typename FinderT>
+ inline find_iterator<
+ BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
+ make_find_iterator(
+ RangeT& Collection,
+ FinderT Finder)
+ {
+ return find_iterator<BOOST_STRING_TYPENAME range_iterator<RangeT>::type>(
+ Collection, Finder);
+ }
+
+// split iterator -----------------------------------------------//
+
+ //! split_iterator
+ /*!
+ Split iterator encapsulates a Finder and allows
+ for incremental searching in a string.
+ Unlike the find iterator, split iterator iterates
+ through gaps between matches.
+
+ Find iterator is a readable forward traversal iterator.
+
+ Dereferencing the iterator yields an iterator_range delimiting
+ the current match.
+ */
+ template<typename IteratorT>
+ class split_iterator :
+ public iterator_facade<
+ split_iterator<IteratorT>,
+ const iterator_range<IteratorT>,
+ forward_traversal_tag >,
+ private detail::find_iterator_base<IteratorT>
+ {
+ private:
+ // facade support
+ friend class ::boost::iterator_core_access;
+
+ private:
+ // typedefs
+
+ typedef detail::find_iterator_base<IteratorT> base_type;
+ typedef BOOST_STRING_TYPENAME
+ base_type::input_iterator_type input_iterator_type;
+ typedef BOOST_STRING_TYPENAME
+ base_type::match_type match_type;
+
+ public:
+ //! Default constructor
+ /*!
+ Construct null iterator. All null iterators are equal.
+
+ \post eof()==true
+ */
+ split_iterator() :
+ m_Next(),
+ m_End(),
+ m_bEof(true)
+ {}
+
+ //! Copy constructor
+ /*!
+ Construct a copy of the split_iterator
+ */
+ split_iterator( const split_iterator& Other ) :
+ base_type(Other),
+ m_Match(Other.m_Match),
+ m_Next(Other.m_Next),
+ m_End(Other.m_End),
+ m_bEof(Other.m_bEof)
+ {}
+
+ //! Constructor
+ /*!
+ Construct new split_iterator for a given finder
+ and a range.
+ */
+ template<typename FinderT>
+ split_iterator(
+ IteratorT Begin,
+ IteratorT End,
+ FinderT Finder ) :
+ detail::find_iterator_base<IteratorT>(Finder,0),
+ m_Match(Begin,Begin),
+ m_Next(Begin),
+ m_End(End),
+ m_bEof(false)
+ {
+ // force the correct behavior for empty sequences and yield at least one token
+ if(Begin!=End)
+ {
+ increment();
+ }
+ }
+ //! Constructor
+ /*!
+ Construct new split_iterator for a given finder
+ and a collection.
+ */
+ template<typename FinderT, typename RangeT>
+ split_iterator(
+ RangeT& Col,
+ FinderT Finder ) :
+ detail::find_iterator_base<IteratorT>(Finder,0),
+ m_bEof(false)
+ {
+ iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(::boost::as_literal(Col));
+ m_Match=make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));
+ m_Next=::boost::begin(lit_col);
+ m_End=::boost::end(lit_col);
+
+ // force the correct behavior for empty sequences and yield at least one token
+ if(m_Next!=m_End)
+ {
+ increment();
+ }
+ }
+
+
+ private:
+ // iterator operations
+
+ // dereference
+ const match_type& dereference() const
+ {
+ return m_Match;
+ }
+
+ // increment
+ void increment()
+ {
+ match_type FindMatch=this->do_find( m_Next, m_End );
+
+ if(FindMatch.begin()==m_End && FindMatch.end()==m_End)
+ {
+ if(m_Match.end()==m_End)
+ {
+ // Mark iterator as eof
+ m_bEof=true;
+ }
+ }
+
+ m_Match=match_type( m_Next, FindMatch.begin() );
+ m_Next=FindMatch.end();
+ }
+
+ // comparison
+ bool equal( const split_iterator& Other ) const
+ {
+ bool bEof=eof();
+ bool bOtherEof=Other.eof();
+
+ return bEof || bOtherEof ? bEof==bOtherEof :
+ (
+ m_Match==Other.m_Match &&
+ m_Next==Other.m_Next &&
+ m_End==Other.m_End
+ );
+ }
+
+ public:
+ // operations
+
+ //! Eof check
+ /*!
+ Check the eof condition. Eof condition means that
+ there is nothing more to be searched i.e. find_iterator
+ is after the last match.
+ */
+ bool eof() const
+ {
+ return this->is_null() || m_bEof;
+ }
+
+ private:
+ // Attributes
+ match_type m_Match;
+ input_iterator_type m_Next;
+ input_iterator_type m_End;
+ bool m_bEof;
+ };
+
+ //! split iterator construction helper
+ /*!
+ * Construct a split iterator to iterate through the specified collection
+ */
+ template<typename RangeT, typename FinderT>
+ inline split_iterator<
+ BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
+ make_split_iterator(
+ RangeT& Collection,
+ FinderT Finder)
+ {
+ return split_iterator<BOOST_STRING_TYPENAME range_iterator<RangeT>::type>(
+ Collection, Finder);
+ }
+
+
+ } // namespace algorithm
+
+ // pull names to the boost namespace
+ using algorithm::find_iterator;
+ using algorithm::make_find_iterator;
+ using algorithm::split_iterator;
+ using algorithm::make_split_iterator;
+
+} // namespace boost
+
+
+#endif // BOOST_STRING_FIND_ITERATOR_HPP