blob: fa0e522b1f5d081cfc115da405e30a1c1c63ee62 [file] [log] [blame]
Jeff Thompson86b6d642013-10-17 15:01:56 -07001// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
2// (C) Copyright 2003-2007 Jonathan Turkanis
3// Distributed under the Boost Software License, Version 1.0. (See accompanying
4// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
5
6// See http://www.boost.org/libs/iostreams for documentation.
7
8#ifndef NDNBOOST_IOSTREAMS_OUTPUT_SEQUENCE_HPP_INCLUDED
9#define NDNBOOST_IOSTREAMS_OUTPUT_SEQUENCE_HPP_INCLUDED
10
11#if defined(_MSC_VER) && (_MSC_VER >= 1020)
12# pragma once
13#endif
14
15#include <utility> // pair.
16#include <ndnboost/config.hpp> // DEDUCED_TYPENAME, MSVC.
17#include <ndnboost/detail/workaround.hpp>
18#include <ndnboost/iostreams/detail/wrap_unwrap.hpp>
19#include <ndnboost/iostreams/operations_fwd.hpp> // is_custom
20#include <ndnboost/iostreams/traits.hpp>
21#include <ndnboost/mpl/if.hpp>
22
23// Must come last.
24#include <ndnboost/iostreams/detail/config/disable_warnings.hpp>
25
26namespace ndnboost { namespace iostreams {
27
28namespace detail {
29
30template<typename T>
31struct output_sequence_impl;
32
33} // End namespace detail.
34
35template<typename T>
36inline std::pair<
37 NDNBOOST_DEDUCED_TYPENAME char_type_of<T>::type*,
38 NDNBOOST_DEDUCED_TYPENAME char_type_of<T>::type*
39>
40output_sequence(T& t)
41{ return detail::output_sequence_impl<T>::output_sequence(t); }
42
43namespace detail {
44
45//------------------Definition of output_sequence_impl------------------------//
46
47template<typename T>
48struct output_sequence_impl
49 : mpl::if_<
50 detail::is_custom<T>,
51 operations<T>,
52 output_sequence_impl<direct_tag>
53 >::type
54 { };
55
56template<>
57struct output_sequence_impl<direct_tag> {
58 template<typename U>
59 static std::pair<
60 NDNBOOST_DEDUCED_TYPENAME char_type_of<U>::type*,
61 NDNBOOST_DEDUCED_TYPENAME char_type_of<U>::type*
62 >
63 output_sequence(U& u) { return u.output_sequence(); }
64};
65
66} // End namespace detail.
67
68} } // End namespaces iostreams, boost.
69
70#include <ndnboost/iostreams/detail/config/enable_warnings.hpp>
71
72#endif // #ifndef NDNBOOST_IOSTREAMS_OUTPUT_SEQUENCE_HPP_INCLUDED