]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // Boost string_algo library trim.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_TRIM_DETAIL_HPP | |
12 | #define BOOST_STRING_TRIM_DETAIL_HPP | |
13 | ||
14 | #include <boost/algorithm/string/config.hpp> | |
15 | #include <boost/detail/iterator.hpp> | |
16 | ||
17 | namespace boost { | |
18 | namespace algorithm { | |
19 | namespace detail { | |
20 | ||
21 | // trim iterator helper -----------------------------------------------// | |
22 | ||
23 | template< typename ForwardIteratorT, typename PredicateT > | |
24 | inline ForwardIteratorT trim_end_iter_select( | |
25 | ForwardIteratorT InBegin, | |
26 | ForwardIteratorT InEnd, | |
27 | PredicateT IsSpace, | |
28 | std::forward_iterator_tag ) | |
29 | { | |
30 | ForwardIteratorT TrimIt=InBegin; | |
31 | ||
32 | for( ForwardIteratorT It=InBegin; It!=InEnd; ++It ) | |
33 | { | |
34 | if ( !IsSpace(*It) ) | |
35 | { | |
36 | TrimIt=It; | |
37 | ++TrimIt; | |
38 | } | |
39 | } | |
40 | ||
41 | return TrimIt; | |
42 | } | |
43 | ||
44 | template< typename ForwardIteratorT, typename PredicateT > | |
45 | inline ForwardIteratorT trim_end_iter_select( | |
46 | ForwardIteratorT InBegin, | |
47 | ForwardIteratorT InEnd, | |
48 | PredicateT IsSpace, | |
49 | std::bidirectional_iterator_tag ) | |
50 | { | |
51 | for( ForwardIteratorT It=InEnd; It!=InBegin; ) | |
52 | { | |
53 | if ( !IsSpace(*(--It)) ) | |
54 | return ++It; | |
55 | } | |
56 | ||
57 | return InBegin; | |
58 | } | |
59 | // Search for first non matching character from the beginning of the sequence | |
60 | template< typename ForwardIteratorT, typename PredicateT > | |
61 | inline ForwardIteratorT trim_begin( | |
62 | ForwardIteratorT InBegin, | |
63 | ForwardIteratorT InEnd, | |
64 | PredicateT IsSpace ) | |
65 | { | |
66 | ForwardIteratorT It=InBegin; | |
67 | for(; It!=InEnd; ++It ) | |
68 | { | |
69 | if (!IsSpace(*It)) | |
70 | return It; | |
71 | } | |
72 | ||
73 | return It; | |
74 | } | |
75 | ||
76 | // Search for first non matching character from the end of the sequence | |
77 | template< typename ForwardIteratorT, typename PredicateT > | |
78 | inline ForwardIteratorT trim_end( | |
79 | ForwardIteratorT InBegin, | |
80 | ForwardIteratorT InEnd, | |
81 | PredicateT IsSpace ) | |
82 | { | |
83 | typedef BOOST_STRING_TYPENAME boost::detail:: | |
84 | iterator_traits<ForwardIteratorT>::iterator_category category; | |
85 | ||
86 | return ::boost::algorithm::detail::trim_end_iter_select( InBegin, InEnd, IsSpace, category() ); | |
87 | } | |
88 | ||
89 | ||
90 | } // namespace detail | |
91 | } // namespace algorithm | |
92 | } // namespace boost | |
93 | ||
94 | ||
95 | #endif // BOOST_STRING_TRIM_DETAIL_HPP |