Line data Source code
1 : // Boost string_algo library predicate.hpp header file ---------------------------// 2 : 3 : // Copyright Pavol Droba 2002-2003. 4 : // 5 : // Distributed under the Boost Software License, Version 1.0. 6 : // (See accompanying file LICENSE_1_0.txt or copy at 7 : // http://www.boost.org/LICENSE_1_0.txt) 8 : 9 : // See http://www.boost.org/ for updates, documentation, and revision history. 10 : 11 : #ifndef BOOST_STRING_PREDICATE_DETAIL_HPP 12 : #define BOOST_STRING_PREDICATE_DETAIL_HPP 13 : 14 : #include <iterator> 15 : #include <boost/algorithm/string/find.hpp> 16 : 17 : namespace boost { 18 : namespace algorithm { 19 : namespace detail { 20 : 21 : // ends_with predicate implementation ----------------------------------// 22 : 23 : template< 24 : typename ForwardIterator1T, 25 : typename ForwardIterator2T, 26 : typename PredicateT> 27 0 : inline bool ends_with_iter_select( 28 : ForwardIterator1T Begin, 29 : ForwardIterator1T End, 30 : ForwardIterator2T SubBegin, 31 : ForwardIterator2T SubEnd, 32 : PredicateT Comp, 33 : std::bidirectional_iterator_tag) 34 : { 35 0 : ForwardIterator1T it=End; 36 0 : ForwardIterator2T pit=SubEnd; 37 0 : for(;it!=Begin && pit!=SubBegin;) 38 : { 39 0 : if( !(Comp(*(--it),*(--pit))) ) 40 : return false; 41 : } 42 : 43 0 : return pit==SubBegin; 44 : } 45 : 46 : template< 47 : typename ForwardIterator1T, 48 : typename ForwardIterator2T, 49 : typename PredicateT> 50 : inline bool ends_with_iter_select( 51 : ForwardIterator1T Begin, 52 : ForwardIterator1T End, 53 : ForwardIterator2T SubBegin, 54 : ForwardIterator2T SubEnd, 55 : PredicateT Comp, 56 : std::forward_iterator_tag) 57 : { 58 : if ( SubBegin==SubEnd ) 59 : { 60 : // empty subsequence check 61 : return true; 62 : } 63 : 64 : iterator_range<ForwardIterator1T> Result 65 : =last_finder( 66 : ::boost::make_iterator_range(SubBegin, SubEnd), 67 : Comp)(Begin, End); 68 : 69 : return !Result.empty() && Result.end()==End; 70 : } 71 : 72 : } // namespace detail 73 : } // namespace algorithm 74 : } // namespace boost 75 : 76 : 77 : #endif // BOOST_STRING_PREDICATE_DETAIL_HPP