#ifndef PSTADE_NAPKIN_TRANSFORM_OUT_HPP
#define PSTADE_NAPKIN_TRANSFORM_OUT_HPP
// PStade.Napkin
//
// Copyright 2006 MB.
// 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)
// Usage:
//
// Functor must return OutputStreamable.
#include "./ostream.hpp"
namespace pstade { namespace napkin {
template< class CharT, class Functor >
struct basic_transform_out
{
template< class StringOutputable >
basic_transform_out(Functor fun, StringOutputable& out) :
m_fun(fun), m_os(out)
{ }
void operator<<(const CharT *psz)
{
m_os << m_fun(psz);
}
Functor functor() const
{
return m_fun;
}
private:
Functor m_fun;
basic_ostream<CharT> m_os;
};
template< class Functor >
struct transform_out :
basic_transform_out<char, Functor>
{
template< class StringOutputable >
transform_out(Functor fun, StringOutputable& out) :
basic_transform_out<char, Functor>(fun, out)
{ }
};
template< class Functor >
struct transform_wout :
basic_transform_out<wchar_t, Functor>
{
template< class WideStringOutputable >
transform_wout(Functor fun, WideStringOutputable& wout) :
basic_transform_out<wchar_t, Functor>(fun, wout)
{ }
};
} } // namespace pstade::napkin
#endif