You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
95 lines
3.1 KiB
95 lines
3.1 KiB
// 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
|
|
|