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
20namespace 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
88