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