107 lines
3.4 KiB
C++
107 lines
3.4 KiB
C++
// Boost string_algo library util.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_UTIL_DETAIL_HPP
|
|
#define BOOST_STRING_UTIL_DETAIL_HPP
|
|
|
|
#include <boost/algorithm/string/config.hpp>
|
|
#include <functional>
|
|
#include <boost/range/iterator_range.hpp>
|
|
|
|
namespace boost {
|
|
namespace algorithm {
|
|
namespace detail {
|
|
|
|
// empty container -----------------------------------------------//
|
|
|
|
// empty_container
|
|
/*
|
|
This class represents always empty container,
|
|
containing elements of type CharT.
|
|
|
|
It is supposed to be used in a const version only
|
|
*/
|
|
template< typename CharT >
|
|
struct empty_container
|
|
{
|
|
typedef empty_container<CharT> type;
|
|
typedef CharT value_type;
|
|
typedef std::size_t size_type;
|
|
typedef std::ptrdiff_t difference_type;
|
|
typedef const value_type& reference;
|
|
typedef const value_type& const_reference;
|
|
typedef const value_type* iterator;
|
|
typedef const value_type* const_iterator;
|
|
|
|
|
|
// Operations
|
|
const_iterator begin() const
|
|
{
|
|
return reinterpret_cast<const_iterator>(0);
|
|
}
|
|
|
|
const_iterator end() const
|
|
{
|
|
return reinterpret_cast<const_iterator>(0);
|
|
}
|
|
|
|
bool empty() const
|
|
{
|
|
return false;
|
|
}
|
|
|
|
size_type size() const
|
|
{
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
// bounded copy algorithm -----------------------------------------------//
|
|
|
|
// Bounded version of the std::copy algorithm
|
|
template<typename InputIteratorT, typename OutputIteratorT>
|
|
inline OutputIteratorT bounded_copy(
|
|
InputIteratorT First,
|
|
InputIteratorT Last,
|
|
OutputIteratorT DestFirst,
|
|
OutputIteratorT DestLast )
|
|
{
|
|
InputIteratorT InputIt=First;
|
|
OutputIteratorT OutputIt=DestFirst;
|
|
for(; InputIt!=Last && OutputIt!=DestLast; InputIt++, OutputIt++ )
|
|
{
|
|
*OutputIt=*InputIt;
|
|
}
|
|
|
|
return OutputIt;
|
|
}
|
|
|
|
// iterator range utilities -----------------------------------------//
|
|
|
|
// copy range functor
|
|
template<
|
|
typename SeqT,
|
|
typename IteratorT=BOOST_STRING_TYPENAME SeqT::const_iterator >
|
|
struct copy_iterator_rangeF :
|
|
public std::unary_function< iterator_range<IteratorT>, SeqT >
|
|
{
|
|
SeqT operator()( const iterator_range<IteratorT>& Range ) const
|
|
{
|
|
return copy_range<SeqT>(Range);
|
|
}
|
|
};
|
|
|
|
} // namespace detail
|
|
} // namespace algorithm
|
|
} // namespace boost
|
|
|
|
|
|
#endif // BOOST_STRING_UTIL_DETAIL_HPP
|