123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // 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
|