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 BOOST_DEFAULTED_FUNCTION(find_iterator_base(), {})
44
45 // Copy construction
46 BOOST_DEFAULTED_FUNCTION(find_iterator_base( const find_iterator_base& Other ), :
47 m_Finder(Other.m_Finder) {}
48 )
49
50 // Assignment
51 BOOST_DEFAULTED_FUNCTION(find_iterator_base& operator=( const find_iterator_base& Other ), {
52 m_Finder = Other.m_Finder;
53 return *this;
54 })
55
56 // Constructor
57 template<typename FinderT>
58 find_iterator_base( FinderT Finder, int ) :
59 m_Finder(Finder) {}
60
61 // Destructor
62 BOOST_DEFAULTED_FUNCTION(~find_iterator_base(), {})
63
64 // Find operation
65 match_type do_find(
66 input_iterator_type Begin,
67 input_iterator_type End ) const
68 {
69 if (!m_Finder.empty())
70 {
71 return m_Finder(Begin,End);
72 }
73 else
74 {
75 return match_type(End,End);
76 }
77 }
78
79 // Check
80 bool is_null() const
81 {
82 return m_Finder.empty();
83 }
84
85 private:
86 // Finder
87 finder_type m_Finder;
88 };
89
90 } // namespace detail
91 } // namespace algorithm
92} // namespace boost
93
94
95#endif // BOOST_STRING_FIND_ITERATOR_DETAIL_HPP
96

source code of include/boost/algorithm/string/detail/find_iterator.hpp