Statistics
| Revision:

root / tmp / org.txm.statsengine.r.core.win32 / res / win32 / library / BH / include / boost / algorithm / string / detail / trim.hpp @ 2486

History | View | Annotate | Download (3.1 kB)

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