]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/boost-lite/include/boost/algorithm/string/detail/find_iterator.hpp
Inital import
[l4.git] / l4 / pkg / boost-lite / include / boost / algorithm / string / detail / find_iterator.hpp
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.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
43                 find_iterator_base() {};
44                 // Copy construction
45                 find_iterator_base( const find_iterator_base& Other ) :
46                     m_Finder(Other.m_Finder) {}
47                 
48                 // Constructor
49                 template<typename FinderT>
50                 find_iterator_base( FinderT Finder, int ) :
51                     m_Finder(Finder) {}
52
53                 // Destructor
54                 ~find_iterator_base() {}
55
56                 // Find operation
57                 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
72                 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