88 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			88 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								//  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_core.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
							 |