| // Boost string_algo library find_iterator.hpp header file ---------------------------// |
| |
| // Copyright Pavol Droba 2002-2003. |
| // |
| // Distributed under the Boost Software License, Version 1.0. |
| // (See accompanying file LICENSE_1_0.txt or copy at |
| // http://www.boost.org/LICENSE_1_0.txt) |
| |
| // See http://www.boost.org/ for updates, documentation, and revision history. |
| |
| #ifndef BOOST_STRING_FIND_ITERATOR_DETAIL_HPP |
| #define BOOST_STRING_FIND_ITERATOR_DETAIL_HPP |
| |
| #include <boost/algorithm/string/config.hpp> |
| #include <boost/range/iterator_range.hpp> |
| #include <boost/iterator/iterator_facade.hpp> |
| #include <boost/iterator/iterator_categories.hpp> |
| #include <boost/function.hpp> |
| |
| namespace boost { |
| namespace algorithm { |
| namespace detail { |
| |
| // find_iterator base -----------------------------------------------// |
| |
| // Find iterator base |
| template<typename IteratorT> |
| class find_iterator_base |
| { |
| protected: |
| // typedefs |
| typedef IteratorT input_iterator_type; |
| typedef iterator_range<IteratorT> match_type; |
| typedef function2< |
| match_type, |
| input_iterator_type, |
| input_iterator_type> finder_type; |
| |
| protected: |
| // Protected construction/destruction |
| |
| // Default constructor |
| find_iterator_base() {}; |
| // Copy construction |
| find_iterator_base( const find_iterator_base& Other ) : |
| m_Finder(Other.m_Finder) {} |
| |
| // Constructor |
| template<typename FinderT> |
| find_iterator_base( FinderT Finder, int ) : |
| m_Finder(Finder) {} |
| |
| // Destructor |
| ~find_iterator_base() {} |
| |
| // Find operation |
| match_type do_find( |
| input_iterator_type Begin, |
| input_iterator_type End ) const |
| { |
| if (!m_Finder.empty()) |
| { |
| return m_Finder(Begin,End); |
| } |
| else |
| { |
| return match_type(End,End); |
| } |
| } |
| |
| // Check |
| bool is_null() const |
| { |
| return m_Finder.empty(); |
| } |
| |
| private: |
| // Finder |
| finder_type m_Finder; |
| }; |
| |
| } // namespace detail |
| } // namespace algorithm |
| } // namespace boost |
| |
| |
| #endif // BOOST_STRING_FIND_ITERATOR_DETAIL_HPP |