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
|