File indexing completed on 2025-01-18 09:46:04
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef BOOST_PHOENIX_OPERATOR_IO_HPP
0009 #define BOOST_PHOENIX_OPERATOR_IO_HPP
0010
0011 #include <iosfwd>
0012
0013 #include <boost/phoenix/core/limits.hpp>
0014 #include <boost/fusion/sequence/intrinsic/at.hpp>
0015 #include <boost/phoenix/core/domain.hpp>
0016 #include <boost/proto/make_expr.hpp>
0017 #include <boost/proto/tags.hpp>
0018 #include <boost/proto/operators.hpp>
0019
0020 namespace boost { namespace phoenix
0021 {
0022 namespace detail
0023 {
0024 typedef std::ios_base& (*iomanip_type)(std::ios_base&);
0025 typedef std::istream& (*imanip_type)(std::istream&);
0026 typedef std::ostream& (*omanip_type)(std::ostream&);
0027 }
0028
0029
0030
0031
0032
0033
0034 template <typename Expr>
0035 inline
0036 typename proto::result_of::make_expr<
0037 proto::tag::shift_left
0038 , phoenix_domain
0039 , actor<Expr>
0040 , detail::iomanip_type
0041 >::type const
0042 operator<<(actor<Expr> const& a0, detail::iomanip_type a1)
0043 {
0044 return proto::make_expr<
0045 proto::tag::shift_left, phoenix_domain>(a0, a1);
0046 }
0047
0048 template <typename Expr>
0049 inline
0050 typename proto::result_of::make_expr<
0051 proto::tag::shift_left
0052 , phoenix_domain
0053 , actor<Expr>
0054 , detail::omanip_type
0055 >::type const
0056 operator<<(actor<Expr> const& a0, detail::omanip_type a1)
0057 {
0058 return proto::make_expr<
0059 proto::tag::shift_left, phoenix_domain>(a0, a1);
0060 }
0061
0062 template <typename Expr>
0063 inline
0064 typename proto::result_of::make_expr<
0065 proto::tag::shift_right
0066 , phoenix_domain
0067 , actor<Expr>
0068 , detail::iomanip_type
0069 >::type const
0070 operator>>(actor<Expr> const& a0, detail::iomanip_type a1)
0071 {
0072 return proto::make_expr<
0073 proto::tag::shift_right, phoenix_domain>(a0, a1);
0074 }
0075
0076 template <typename Expr>
0077 inline
0078 typename proto::result_of::make_expr<
0079 proto::tag::shift_right
0080 , phoenix_domain
0081 , actor<Expr>
0082 , detail::imanip_type
0083 >::type const
0084 operator>>(actor<Expr> const& a0, detail::imanip_type a1)
0085 {
0086 return proto::make_expr<
0087 proto::tag::shift_right, phoenix_domain>(a0, a1);
0088 }
0089
0090 using proto::exprns_::operator<<;
0091 using proto::exprns_::operator>>;
0092 }}
0093
0094 #endif