1// (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 BOOST_IOSTREAMS_INPUT_SEQUENCE_HPP_INCLUDED
9#define BOOST_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 <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
17#include <boost/detail/workaround.hpp>
18#include <boost/iostreams/detail/wrap_unwrap.hpp>
19#include <boost/iostreams/operations_fwd.hpp> // is_custom
20#include <boost/iostreams/traits.hpp>
21#include <boost/mpl/if.hpp>
22
23// Must come last.
24#include <boost/iostreams/detail/config/disable_warnings.hpp>
25
26namespace boost { 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 BOOST_DEDUCED_TYPENAME char_type_of<T>::type*,
38 BOOST_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 BOOST_DEDUCED_TYPENAME char_type_of<U>::type*,
61 BOOST_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 <boost/iostreams/detail/config/enable_warnings.hpp>
71
72#endif // #ifndef BOOST_IOSTREAMS_INPUT_SEQUENCE_HPP_INCLUDED
73

source code of boost/boost/iostreams/input_sequence.hpp