// Boost string_algo library formatter.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_FORMATTER_DETAIL_HPP | |
#define BOOST_STRING_FORMATTER_DETAIL_HPP | |
#include <boost/range/iterator_range.hpp> | |
#include <boost/range/begin.hpp> | |
#include <boost/range/end.hpp> | |
#include <boost/range/const_iterator.hpp> | |
#include <boost/algorithm/string/detail/util.hpp> | |
// generic replace functors -----------------------------------------------// | |
namespace boost { | |
namespace algorithm { | |
namespace detail { | |
// const format functor ----------------------------------------------------// | |
// constant format functor | |
template<typename RangeT> | |
struct const_formatF | |
{ | |
private: | |
typedef BOOST_STRING_TYPENAME | |
range_const_iterator<RangeT>::type format_iterator; | |
typedef iterator_range<format_iterator> result_type; | |
public: | |
// Construction | |
const_formatF(const RangeT& Format) : | |
m_Format(::boost::begin(Format), ::boost::end(Format)) {} | |
// Operation | |
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) | |
template<typename Range2T> | |
result_type& operator()(const Range2T&) | |
{ | |
return m_Format; | |
} | |
#endif | |
template<typename Range2T> | |
const result_type& operator()(const Range2T&) const | |
{ | |
return m_Format; | |
} | |
private: | |
result_type m_Format; | |
}; | |
// identity format functor ----------------------------------------------------// | |
// identity format functor | |
template<typename RangeT> | |
struct identity_formatF | |
{ | |
// Operation | |
template< typename Range2T > | |
const RangeT& operator()(const Range2T& Replace) const | |
{ | |
return RangeT(::boost::begin(Replace), ::boost::end(Replace)); | |
} | |
}; | |
// empty format functor ( used by erase ) ------------------------------------// | |
// empty format functor | |
template< typename CharT > | |
struct empty_formatF | |
{ | |
template< typename ReplaceT > | |
empty_container<CharT> operator()(const ReplaceT&) const | |
{ | |
return empty_container<CharT>(); | |
} | |
}; | |
} // namespace detail | |
} // namespace algorithm | |
} // namespace boost | |
#endif // BOOST_STRING_FORMATTER_DETAIL_HPP |