forked from boostorg/algorithm
		
	
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//  Boost string_algo library predicate.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_PREDICATE_DETAIL_HPP
 | 
						|
#define BOOST_STRING_PREDICATE_DETAIL_HPP
 | 
						|
 | 
						|
#include <iterator>
 | 
						|
#include <boost/algorithm/string/find.hpp>
 | 
						|
 | 
						|
namespace boost {
 | 
						|
    namespace algorithm {
 | 
						|
        namespace detail {
 | 
						|
 | 
						|
//  ends_with predicate implementation ----------------------------------//
 | 
						|
 | 
						|
            template< 
 | 
						|
                typename ForwardIterator1T, 
 | 
						|
                typename ForwardIterator2T,
 | 
						|
                typename PredicateT>
 | 
						|
            inline bool ends_with_iter_select( 
 | 
						|
                ForwardIterator1T Begin, 
 | 
						|
                ForwardIterator1T End, 
 | 
						|
                ForwardIterator2T SubBegin,
 | 
						|
                ForwardIterator2T SubEnd,
 | 
						|
                PredicateT Comp,
 | 
						|
                std::bidirectional_iterator_tag)
 | 
						|
            {
 | 
						|
                ForwardIterator1T it=End;
 | 
						|
                ForwardIterator2T pit=SubEnd;
 | 
						|
                for(;it!=Begin && pit!=SubBegin;)
 | 
						|
                {
 | 
						|
                    if( !(Comp(*(--it),*(--pit))) )
 | 
						|
                        return false;
 | 
						|
                }
 | 
						|
 | 
						|
                return pit==SubBegin;
 | 
						|
            }
 | 
						|
 | 
						|
            template< 
 | 
						|
                typename ForwardIterator1T, 
 | 
						|
                typename ForwardIterator2T,
 | 
						|
                typename PredicateT>
 | 
						|
            inline bool ends_with_iter_select( 
 | 
						|
                ForwardIterator1T Begin, 
 | 
						|
                ForwardIterator1T End, 
 | 
						|
                ForwardIterator2T SubBegin,
 | 
						|
                ForwardIterator2T SubEnd,
 | 
						|
                PredicateT Comp,
 | 
						|
                std::forward_iterator_tag)
 | 
						|
            {
 | 
						|
                if ( SubBegin==SubEnd )
 | 
						|
                {
 | 
						|
                    // empty subsequence check
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
 | 
						|
                iterator_range<ForwardIterator1T> Result
 | 
						|
                    =last_finder( 
 | 
						|
                        ::boost::make_iterator_range(SubBegin, SubEnd),
 | 
						|
                        Comp)(Begin, End);
 | 
						|
 | 
						|
                return !Result.empty() && Result.end()==End;
 | 
						|
            }
 | 
						|
 | 
						|
        } // namespace detail
 | 
						|
    } // namespace algorithm
 | 
						|
} // namespace boost
 | 
						|
 | 
						|
 | 
						|
#endif  // BOOST_STRING_PREDICATE_DETAIL_HPP
 |