| // (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 NDNBOOST_IOSTREAMS_DETAIL_TRANSLATE_INT_TYPE_HPP_INCLUDED |
| #define NDNBOOST_IOSTREAMS_DETAIL_TRANSLATE_INT_TYPE_HPP_INCLUDED |
| |
| #if defined(_MSC_VER) && (_MSC_VER >= 1020) |
| # pragma once |
| #endif |
| |
| #include <ndnboost/type_traits/is_same.hpp> |
| |
| namespace ndnboost { 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 NDNBOOST_IOSTREAMS_DETAIL_TRANSLATE_INT_TYPE_HPP_INCLUDED |