Line data Source code
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 43 0 : find_iterator_base() {} 44 : // Copy construction 45 0 : find_iterator_base( const find_iterator_base& Other ) : 46 0 : m_Finder(Other.m_Finder) {} 47 : 48 : // Constructor 49 : template<typename FinderT> 50 0 : find_iterator_base( FinderT Finder, int ) : 51 0 : m_Finder(Finder) {} 52 : 53 : // Destructor 54 0 : ~find_iterator_base() {} 55 : 56 : // Find operation 57 0 : match_type do_find( 58 : input_iterator_type Begin, 59 : input_iterator_type End ) const 60 : { 61 0 : if (!m_Finder.empty()) 62 : { 63 0 : return m_Finder(Begin,End); 64 : } 65 : else 66 : { 67 0 : return match_type(End,End); 68 : } 69 : } 70 : 71 : // Check 72 0 : bool is_null() const 73 : { 74 0 : 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