Chris@16
|
1 /*==============================================================================
|
Chris@16
|
2 Copyright (c) 2001-2010 Joel de Guzman
|
Chris@16
|
3 Copyright (c) 2010 Thomas Heller
|
Chris@16
|
4
|
Chris@16
|
5 Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Chris@16
|
6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
7 ==============================================================================*/
|
Chris@16
|
8 #ifndef BOOST_PHOENIX_OPERATOR_IO_HPP
|
Chris@16
|
9 #define BOOST_PHOENIX_OPERATOR_IO_HPP
|
Chris@16
|
10
|
Chris@16
|
11 #include <iosfwd>
|
Chris@16
|
12
|
Chris@16
|
13 #include <boost/phoenix/core/limits.hpp>
|
Chris@16
|
14 #include <boost/fusion/sequence/intrinsic/at.hpp>
|
Chris@16
|
15 #include <boost/phoenix/core/domain.hpp>
|
Chris@16
|
16 #include <boost/proto/make_expr.hpp>
|
Chris@16
|
17 #include <boost/proto/tags.hpp>
|
Chris@16
|
18 #include <boost/proto/operators.hpp>
|
Chris@16
|
19
|
Chris@16
|
20 namespace boost { namespace phoenix
|
Chris@16
|
21 {
|
Chris@16
|
22 namespace detail
|
Chris@16
|
23 {
|
Chris@16
|
24 typedef std::ios_base& (*iomanip_type)(std::ios_base&);
|
Chris@16
|
25 typedef std::istream& (*imanip_type)(std::istream&);
|
Chris@16
|
26 typedef std::ostream& (*omanip_type)(std::ostream&);
|
Chris@16
|
27 }
|
Chris@16
|
28
|
Chris@16
|
29 /////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
30 //
|
Chris@16
|
31 // overloads for I/O manipulators.
|
Chris@16
|
32 //
|
Chris@16
|
33 /////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
34 template <typename Expr>
|
Chris@16
|
35 inline
|
Chris@16
|
36 typename proto::result_of::make_expr<
|
Chris@16
|
37 proto::tag::shift_left
|
Chris@16
|
38 , phoenix_domain
|
Chris@16
|
39 , actor<Expr>
|
Chris@16
|
40 , detail::iomanip_type
|
Chris@16
|
41 >::type const
|
Chris@16
|
42 operator<<(actor<Expr> const& a0, detail::iomanip_type a1)
|
Chris@16
|
43 {
|
Chris@16
|
44 return proto::make_expr<
|
Chris@16
|
45 proto::tag::shift_left, phoenix_domain>(a0, a1);
|
Chris@16
|
46 }
|
Chris@16
|
47
|
Chris@16
|
48 template <typename Expr>
|
Chris@16
|
49 inline
|
Chris@16
|
50 typename proto::result_of::make_expr<
|
Chris@16
|
51 proto::tag::shift_left
|
Chris@16
|
52 , phoenix_domain
|
Chris@16
|
53 , actor<Expr>
|
Chris@16
|
54 , detail::omanip_type
|
Chris@16
|
55 >::type const
|
Chris@16
|
56 operator<<(actor<Expr> const& a0, detail::omanip_type a1)
|
Chris@16
|
57 {
|
Chris@16
|
58 return proto::make_expr<
|
Chris@16
|
59 proto::tag::shift_left, phoenix_domain>(a0, a1);
|
Chris@16
|
60 }
|
Chris@16
|
61
|
Chris@16
|
62 template <typename Expr>
|
Chris@16
|
63 inline
|
Chris@16
|
64 typename proto::result_of::make_expr<
|
Chris@16
|
65 proto::tag::shift_right
|
Chris@16
|
66 , phoenix_domain
|
Chris@16
|
67 , actor<Expr>
|
Chris@16
|
68 , detail::iomanip_type
|
Chris@16
|
69 >::type const
|
Chris@16
|
70 operator>>(actor<Expr> const& a0, detail::iomanip_type a1)
|
Chris@16
|
71 {
|
Chris@16
|
72 return proto::make_expr<
|
Chris@16
|
73 proto::tag::shift_right, phoenix_domain>(a0, a1);
|
Chris@16
|
74 }
|
Chris@16
|
75
|
Chris@16
|
76 template <typename Expr>
|
Chris@16
|
77 inline
|
Chris@16
|
78 typename proto::result_of::make_expr<
|
Chris@16
|
79 proto::tag::shift_right
|
Chris@16
|
80 , phoenix_domain
|
Chris@16
|
81 , actor<Expr>
|
Chris@16
|
82 , detail::imanip_type
|
Chris@16
|
83 >::type const
|
Chris@16
|
84 operator>>(actor<Expr> const& a0, detail::imanip_type a1)
|
Chris@16
|
85 {
|
Chris@16
|
86 return proto::make_expr<
|
Chris@16
|
87 proto::tag::shift_right, phoenix_domain>(a0, a1);
|
Chris@16
|
88 }
|
Chris@16
|
89
|
Chris@16
|
90 using proto::exprns_::operator<<;
|
Chris@16
|
91 using proto::exprns_::operator>>;
|
Chris@16
|
92 }}
|
Chris@16
|
93
|
Chris@16
|
94 #endif
|