| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  | //  Boost string_algo library predicate.hpp header file  ---------------------------//
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-25 18:07:19 +00:00
										 |  |  | //  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)
 | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-25 18:07:19 +00:00
										 |  |  | //  See http://www.boost.org/ for updates, documentation, and revision history.
 | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #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(  | 
					
						
							| 
									
										
										
										
											2009-09-13 19:10:55 +00:00
										 |  |  |                         ::boost::make_iterator_range(SubBegin, SubEnd), | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  |                         Comp)(Begin, End); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 return !Result.empty() && Result.end()==End; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } // namespace detail
 | 
					
						
							|  |  |  |     } // namespace algorithm
 | 
					
						
							|  |  |  | } // namespace boost
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif  // BOOST_STRING_PREDICATE_DETAIL_HPP
 |