epoc32/include/stdapis/boost/variant/detail/variant_io.hpp
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:27:01 +0100
branchSymbian2
changeset 3 e1b950c65cb4
permissions -rw-r--r--
Attempt to represent the S^2->S^3 header reorganisation as a series of "hg rename" operations
     1 //-----------------------------------------------------------------------------
     2 // boost variant/detail/variant_io.hpp header file
     3 // See http://www.boost.org for updates, documentation, and revision history.
     4 //-----------------------------------------------------------------------------
     5 //
     6 // Copyright (c) 2002-2003
     7 // Eric Friedman, Itay Maman
     8 //
     9 // Distributed under the Boost Software License, Version 1.0. (See
    10 // accompanying file LICENSE_1_0.txt or copy at
    11 // http://www.boost.org/LICENSE_1_0.txt)
    12 
    13 #ifndef BOOST_VARIANT_DETAIL_VARIANT_IO_HPP
    14 #define BOOST_VARIANT_DETAIL_VARIANT_IO_HPP
    15 
    16 #include <iosfwd> // for std::basic_ostream forward declare
    17 
    18 #include "boost/variant/variant_fwd.hpp"
    19 
    20 #include "boost/detail/templated_streams.hpp"
    21 #include "boost/variant/static_visitor.hpp"
    22 
    23 namespace boost {
    24 
    25 ///////////////////////////////////////////////////////////////////////////////
    26 // function template operator<<
    27 //
    28 // Outputs the content of the given variant to the given ostream.
    29 //
    30 
    31 // forward declare (allows output of embedded variant< variant< ... >, ... >)
    32 template <
    33       BOOST_TEMPLATED_STREAM_ARGS(E,T)
    34     BOOST_TEMPLATED_STREAM_COMMA
    35       BOOST_VARIANT_ENUM_PARAMS(typename U)
    36     >
    37 inline BOOST_TEMPLATED_STREAM(ostream, E,T)& operator<<(
    38       BOOST_TEMPLATED_STREAM(ostream, E,T)& out
    39     , const variant< BOOST_VARIANT_ENUM_PARAMS(U) >& rhs
    40     );
    41 
    42 namespace detail { namespace variant {
    43 
    44 template <typename OStream>
    45 class printer
    46     : public boost::static_visitor<>
    47 {
    48 private: // representation
    49 
    50     OStream& out_;
    51 
    52 public: // structors
    53 
    54     explicit printer(OStream& out)
    55         : out_( out )
    56     {
    57     }
    58 
    59 public: // visitor interface
    60 
    61     template <typename T>
    62     void operator()(const T& operand) const
    63     {
    64         out_ << operand;
    65     }
    66 
    67 };
    68 
    69 }} // namespace detail::variant
    70 
    71 template <
    72       BOOST_TEMPLATED_STREAM_ARGS(E,T)
    73     BOOST_TEMPLATED_STREAM_COMMA
    74       BOOST_VARIANT_ENUM_PARAMS(typename U)
    75     >
    76 inline BOOST_TEMPLATED_STREAM(ostream, E,T)& operator<<(
    77       BOOST_TEMPLATED_STREAM(ostream, E,T)& out
    78     , const variant< BOOST_VARIANT_ENUM_PARAMS(U) >& rhs
    79     )
    80 {
    81     detail::variant::printer<
    82           BOOST_TEMPLATED_STREAM(ostream, E,T)
    83         > visitor(out);
    84 
    85     rhs.apply_visitor(visitor);
    86 
    87     return out;
    88 }
    89 
    90 } // namespace boost
    91 
    92 #endif // BOOST_VARIANT_DETAIL_VARIANT_IO_HPP