You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
77 lines
2.4 KiB
77 lines
2.4 KiB
// 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
|
|
|