forked from boostorg/algorithm
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//  Boost string_algo library trim.hpp header file  ---------------------------//
 | 
						|
 | 
						|
//  Copyright Pavol Droba 2002-2003.
 | 
						|
//
 | 
						|
// Distributed under the Boost Software License, Version 1.0.
 | 
						|
//    (See accompanying file LICENSE_1_0.txt or copy at
 | 
						|
//          http://www.boost.org/LICENSE_1_0.txt)
 | 
						|
 | 
						|
//  See http://www.boost.org/ for updates, documentation, and revision history.
 | 
						|
 | 
						|
#ifndef BOOST_STRING_TRIM_DETAIL_HPP
 | 
						|
#define BOOST_STRING_TRIM_DETAIL_HPP
 | 
						|
 | 
						|
#include <boost/algorithm/string/config.hpp>
 | 
						|
#include <boost/detail/iterator.hpp>
 | 
						|
 | 
						|
namespace boost {
 | 
						|
    namespace algorithm {
 | 
						|
        namespace detail {
 | 
						|
 | 
						|
//  trim iterator helper -----------------------------------------------//
 | 
						|
 | 
						|
            template< typename ForwardIteratorT, typename PredicateT >
 | 
						|
            inline ForwardIteratorT trim_end_iter_select( 
 | 
						|
                ForwardIteratorT InBegin, 
 | 
						|
                ForwardIteratorT InEnd, 
 | 
						|
                PredicateT IsSpace,
 | 
						|
                std::forward_iterator_tag )
 | 
						|
            {
 | 
						|
                ForwardIteratorT TrimIt=InBegin;
 | 
						|
 | 
						|
                for( ForwardIteratorT It=InBegin; It!=InEnd; ++It )
 | 
						|
                {
 | 
						|
                    if ( !IsSpace(*It) ) 
 | 
						|
                    {
 | 
						|
                        TrimIt=It;
 | 
						|
                        ++TrimIt;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                return TrimIt;
 | 
						|
            }
 | 
						|
 | 
						|
            template< typename ForwardIteratorT, typename PredicateT >
 | 
						|
            inline ForwardIteratorT trim_end_iter_select( 
 | 
						|
                ForwardIteratorT InBegin, 
 | 
						|
                ForwardIteratorT InEnd, 
 | 
						|
                PredicateT IsSpace,
 | 
						|
                std::bidirectional_iterator_tag )
 | 
						|
            {
 | 
						|
                for( ForwardIteratorT It=InEnd; It!=InBegin;  )
 | 
						|
                {
 | 
						|
                    if ( !IsSpace(*(--It)) )
 | 
						|
                        return ++It;
 | 
						|
                }
 | 
						|
 | 
						|
                return InBegin;
 | 
						|
            }
 | 
						|
   // Search for first non matching character from the beginning of the sequence
 | 
						|
            template< typename ForwardIteratorT, typename PredicateT >
 | 
						|
            inline ForwardIteratorT trim_begin( 
 | 
						|
                ForwardIteratorT InBegin, 
 | 
						|
                ForwardIteratorT InEnd, 
 | 
						|
                PredicateT IsSpace )
 | 
						|
            {
 | 
						|
                ForwardIteratorT It=InBegin;
 | 
						|
                for(; It!=InEnd; ++It )
 | 
						|
                {
 | 
						|
                    if (!IsSpace(*It))
 | 
						|
                        return It;
 | 
						|
                }
 | 
						|
 | 
						|
                return It;
 | 
						|
            }
 | 
						|
 | 
						|
            // Search for first non matching character from the end of the sequence
 | 
						|
            template< typename ForwardIteratorT, typename PredicateT >
 | 
						|
            inline ForwardIteratorT trim_end( 
 | 
						|
                ForwardIteratorT InBegin, 
 | 
						|
                ForwardIteratorT InEnd, 
 | 
						|
                PredicateT IsSpace )
 | 
						|
            {
 | 
						|
                typedef BOOST_STRING_TYPENAME boost::detail::
 | 
						|
                    iterator_traits<ForwardIteratorT>::iterator_category category;
 | 
						|
 | 
						|
                return ::boost::algorithm::detail::trim_end_iter_select( InBegin, InEnd, IsSpace, category() );
 | 
						|
            }
 | 
						|
 | 
						|
 | 
						|
        } // namespace detail
 | 
						|
    } // namespace algorithm
 | 
						|
} // namespace boost
 | 
						|
 | 
						|
 | 
						|
#endif  // BOOST_STRING_TRIM_DETAIL_HPP
 |