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