source: XIOS/dev/dev_olga/src/extern/boost/include/boost/algorithm/string/detail/trim.hpp @ 1022

Last change on this file since 1022 was 1022, checked in by mhnguyen, 7 years ago
File size: 3.1 KB
Line 
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
17namespace 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
Note: See TracBrowser for help on using the repository browser.