blob: 7950c6f58da43e1b454dec116158142e367481b7 [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_INPUT_SEQUENCE_HPP_INCLUDED
9#define NDNBOOST_IOSTREAMS_INPUT_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 input_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>
40input_sequence(T& t)
41{ return detail::input_sequence_impl<T>::input_sequence(t); }
42
43namespace detail {
44
45//------------------Definition of direct_impl-------------------------------//
46
47template<typename T>
48struct input_sequence_impl
49 : mpl::if_<
50 detail::is_custom<T>,
51 operations<T>,
52 input_sequence_impl<direct_tag>
53 >::type
54 { };
55
56template<>
57struct input_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 input_sequence(U& u) { return u.input_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_INPUT_SEQUENCE_HPP_INCLUDED