Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:46:04

0001 /*==============================================================================
0002     Copyright (c) 2001-2010 Joel de Guzman
0003     Copyright (c) 2010 Thomas Heller
0004 
0005     Distributed under the Boost Software License, Version 1.0. (See accompanying
0006     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
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     //  overloads for I/O manipulators.
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