63 lines
2.0 KiB
C++
63 lines
2.0 KiB
C++
// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
|
|
// (C) Copyright 2003-2007 Jonathan Turkanis
|
|
// 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/libs/iostreams for documentation.
|
|
|
|
#ifndef BOOST_IOSTREAMS_DETAIL_TRANSLATE_INT_TYPE_HPP_INCLUDED
|
|
#define BOOST_IOSTREAMS_DETAIL_TRANSLATE_INT_TYPE_HPP_INCLUDED
|
|
|
|
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
|
|
# pragma once
|
|
#endif
|
|
|
|
#include <boost/type_traits/is_same.hpp>
|
|
|
|
namespace boost { namespace iostreams { namespace detail {
|
|
|
|
template<bool IsSame>
|
|
struct translate_int_type_impl;
|
|
|
|
//
|
|
// Template name: translate_char.
|
|
// Description: Translates a character or an end-of-file indicator from the
|
|
// int_type of one character traits type to the int_type of another.
|
|
//
|
|
template<typename SourceTr, typename TargetTr>
|
|
typename TargetTr::int_type
|
|
translate_int_type(typename SourceTr::int_type c)
|
|
{
|
|
typedef translate_int_type_impl<is_same<SourceTr, TargetTr>::value> impl;
|
|
return impl::template inner<SourceTr, TargetTr>::translate(c);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------//
|
|
|
|
template<>
|
|
struct translate_int_type_impl<true> {
|
|
template<typename SourceTr, typename TargetTr>
|
|
struct inner {
|
|
static typename TargetTr::int_type
|
|
translate(typename SourceTr::int_type c) { return c; }
|
|
};
|
|
};
|
|
|
|
template<>
|
|
struct translate_int_type_impl<false> {
|
|
template<typename SourceTr, typename TargetTr>
|
|
struct inner {
|
|
static typename TargetTr::int_type
|
|
translate(typename SourceTr::int_type c)
|
|
{
|
|
return SourceTr::eq_int_type(SourceTr::eof()) ?
|
|
TargetTr::eof() :
|
|
TargetTr::to_int_type(SourceTr::to_char_type(c));
|
|
}
|
|
};
|
|
};
|
|
|
|
} } } // End namespaces detail, iostreams, boost.
|
|
|
|
#endif // #ifndef BOOST_IOSTREAMS_DETAIL_TRANSLATE_INT_TYPE_HPP_INCLUDED
|