123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- // 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
|