PageRenderTime 21ms CodeModel.GetById 13ms app.highlight 6ms RepoModel.GetById 1ms app.codeStats 0ms

/Src/Dependencies/Boost/boost/algorithm/string/detail/predicate.hpp

http://hadesmem.googlecode.com/
C++ Header | 77 lines | 54 code | 14 blank | 9 comment | 5 complexity | cf69244ec8523b1a82146923f9559d93 MD5 | raw file
 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
17namespace 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            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                ForwardIterator1T it=End;
36                ForwardIterator2T pit=SubEnd;
37                for(;it!=Begin && pit!=SubBegin;)
38                {
39                    if( !(Comp(*(--it),*(--pit))) )
40                        return false;
41                }
42
43                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