Chris@16
|
1 /*=============================================================================
|
Chris@16
|
2 Copyright (c) 2001-2007 Joel de Guzman
|
Chris@16
|
3
|
Chris@16
|
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Chris@16
|
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
6 ==============================================================================*/
|
Chris@16
|
7 #ifndef PHOENIX_OPERATOR_IO_HPP
|
Chris@16
|
8 #define PHOENIX_OPERATOR_IO_HPP
|
Chris@16
|
9
|
Chris@16
|
10 #include <boost/spirit/home/phoenix/operator/detail/io.hpp>
|
Chris@16
|
11
|
Chris@16
|
12 namespace boost { namespace phoenix
|
Chris@16
|
13 {
|
Chris@16
|
14 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
15 //
|
Chris@16
|
16 // overloads for std::basic_ostream and std::basic_istream
|
Chris@16
|
17 //
|
Chris@16
|
18 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
19 template <typename T0, typename T1>
|
Chris@16
|
20 inline typename detail::enable_if_ostream<T0, T1>::type
|
Chris@16
|
21 operator<<(T0& a0, actor<T1> const& a1)
|
Chris@16
|
22 {
|
Chris@16
|
23 return compose<shift_left_eval>(phoenix::ref(a0), a1);
|
Chris@16
|
24 }
|
Chris@16
|
25
|
Chris@16
|
26 template <typename T0, typename T1>
|
Chris@16
|
27 inline typename detail::enable_if_istream<T0, T1>::type
|
Chris@16
|
28 operator>>(T0& a0, actor<T1> const& a1)
|
Chris@16
|
29 {
|
Chris@16
|
30 return compose<shift_right_eval>(phoenix::ref(a0), a1);
|
Chris@16
|
31 }
|
Chris@16
|
32
|
Chris@16
|
33 // resolve ambiguities with fusion.
|
Chris@16
|
34 template <typename T1>
|
Chris@16
|
35 inline typename detail::enable_if_ostream<std::ostream, T1>::type
|
Chris@16
|
36 operator<<(std::ostream& a0, actor<T1> const& a1)
|
Chris@16
|
37 {
|
Chris@16
|
38 return compose<shift_left_eval>(phoenix::ref(a0), a1);
|
Chris@16
|
39 }
|
Chris@16
|
40
|
Chris@16
|
41 template <typename T1>
|
Chris@16
|
42 inline typename detail::enable_if_istream<std::istream, T1>::type
|
Chris@16
|
43 operator>>(std::istream& a0, actor<T1> const& a1)
|
Chris@16
|
44 {
|
Chris@16
|
45 return compose<shift_right_eval>(phoenix::ref(a0), a1);
|
Chris@16
|
46 }
|
Chris@16
|
47
|
Chris@16
|
48 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
49 //
|
Chris@16
|
50 // overloads for I/O manipulators.
|
Chris@16
|
51 //
|
Chris@16
|
52 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
53 template <typename T0>
|
Chris@16
|
54 inline actor<typename as_composite<
|
Chris@16
|
55 shift_left_eval, actor<T0>, detail::omanip_type>::type>
|
Chris@16
|
56 operator<<(actor<T0> const& a0, detail::omanip_type a1)
|
Chris@16
|
57 {
|
Chris@16
|
58 return compose<shift_left_eval>(a0, a1);
|
Chris@16
|
59 }
|
Chris@16
|
60
|
Chris@16
|
61 template <typename T0>
|
Chris@16
|
62 inline actor<typename as_composite<
|
Chris@16
|
63 shift_left_eval, actor<T0>, detail::iomanip_type>::type>
|
Chris@16
|
64 operator<<(actor<T0> const& a0, detail::iomanip_type a1)
|
Chris@16
|
65 {
|
Chris@16
|
66 return compose<shift_left_eval>(a0, a1);
|
Chris@16
|
67 }
|
Chris@16
|
68
|
Chris@16
|
69 template <typename T0>
|
Chris@16
|
70 inline actor<typename as_composite<
|
Chris@16
|
71 shift_right_eval, actor<T0>, detail::imanip_type>::type>
|
Chris@16
|
72 operator>>(actor<T0> const& a0, detail::imanip_type a1)
|
Chris@16
|
73 {
|
Chris@16
|
74 return compose<shift_right_eval>(a0, a1);
|
Chris@16
|
75 }
|
Chris@16
|
76
|
Chris@16
|
77 template <typename T0>
|
Chris@16
|
78 inline actor<typename as_composite<
|
Chris@16
|
79 shift_right_eval, actor<T0>, detail::iomanip_type>::type>
|
Chris@16
|
80 operator>>(actor<T0> const& a0, detail::iomanip_type a1)
|
Chris@16
|
81 {
|
Chris@16
|
82 return compose<shift_right_eval>(a0, a1);
|
Chris@16
|
83 }
|
Chris@16
|
84 }}
|
Chris@16
|
85
|
Chris@16
|
86 #endif
|