• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //  Boost string_algo library find_iterator.hpp header file  ---------------------------//
2 
3 //  Copyright Pavol Droba 2002-2003.
4 //
5 // Distributed under the Boost Software License, Version 1.0.
6 //    (See accompanying file LICENSE_1_0.txt or copy at
7 //          http://www.boost.org/LICENSE_1_0.txt)
8 
9 //  See http://www.boost.org/ for updates, documentation, and revision history.
10 
11 #ifndef BOOST_STRING_FIND_ITERATOR_DETAIL_HPP
12 #define BOOST_STRING_FIND_ITERATOR_DETAIL_HPP
13 
14 #include <boost/algorithm/string/config.hpp>
15 #include <boost/range/iterator_range_core.hpp>
16 #include <boost/iterator/iterator_facade.hpp>
17 #include <boost/iterator/iterator_categories.hpp>
18 #include <boost/function.hpp>
19 
20 namespace boost {
21     namespace algorithm {
22         namespace detail {
23 
24 //  find_iterator base -----------------------------------------------//
25 
26             // Find iterator base
27             template<typename IteratorT>
28             class find_iterator_base
29             {
30             protected:
31                 // typedefs
32                 typedef IteratorT input_iterator_type;
33                 typedef iterator_range<IteratorT> match_type;
34                 typedef function2<
35                     match_type,
36                     input_iterator_type,
37                     input_iterator_type> finder_type;
38 
39             protected:
40             // Protected construction/destruction
41 
42                 // Default constructor
find_iterator_base()43                 find_iterator_base() {}
44                 // Copy construction
find_iterator_base(const find_iterator_base & Other)45                 find_iterator_base( const find_iterator_base& Other ) :
46                     m_Finder(Other.m_Finder) {}
47 
48                 // Constructor
49                 template<typename FinderT>
find_iterator_base(FinderT Finder,int)50                 find_iterator_base( FinderT Finder, int ) :
51                     m_Finder(Finder) {}
52 
53                 // Destructor
~find_iterator_base()54                 ~find_iterator_base() {}
55 
56                 // Find operation
do_find(input_iterator_type Begin,input_iterator_type End) const57                 match_type do_find(
58                     input_iterator_type Begin,
59                     input_iterator_type End ) const
60                 {
61                     if (!m_Finder.empty())
62                     {
63                         return m_Finder(Begin,End);
64                     }
65                     else
66                     {
67                         return match_type(End,End);
68                     }
69                 }
70 
71                 // Check
is_null() const72                 bool is_null() const
73                 {
74                     return m_Finder.empty();
75                 }
76 
77             private:
78                 // Finder
79                 finder_type m_Finder;
80             };
81 
82        } // namespace detail
83     } // namespace algorithm
84 } // namespace boost
85 
86 
87 #endif  // BOOST_STRING_FIND_ITERATOR_DETAIL_HPP
88