Line data Source code
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 1069 : inline ForwardIteratorT trim_end_iter_select( 46 : ForwardIteratorT InBegin, 47 : ForwardIteratorT InEnd, 48 : PredicateT IsSpace, 49 : std::bidirectional_iterator_tag ) 50 : { 51 1069 : for( ForwardIteratorT It=InEnd; It!=InBegin; ) 52 : { 53 1069 : if ( !IsSpace(*(--It)) ) 54 1069 : return ++It; 55 : } 56 : 57 0 : return InBegin; 58 : } 59 : // Search for first non matching character from the beginning of the sequence 60 : template< typename ForwardIteratorT, typename PredicateT > 61 1069 : inline ForwardIteratorT trim_begin( 62 : ForwardIteratorT InBegin, 63 : ForwardIteratorT InEnd, 64 : PredicateT IsSpace ) 65 : { 66 1069 : ForwardIteratorT It=InBegin; 67 1069 : for(; It!=InEnd; ++It ) 68 : { 69 1069 : if (!IsSpace(*It)) 70 1069 : return It; 71 : } 72 : 73 0 : return It; 74 : } 75 : 76 : // Search for first non matching character from the end of the sequence 77 : template< typename ForwardIteratorT, typename PredicateT > 78 1069 : 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 2138 : 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