96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
//-----------------------------------------------------------------------------
 | 
						|
// boost variant/detail/variant_io.hpp header file
 | 
						|
// See http://www.boost.org for updates, documentation, and revision history.
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
//
 | 
						|
// Copyright (c) 2002-2003
 | 
						|
// Eric Friedman, Itay Maman
 | 
						|
//
 | 
						|
// Distributed under the Boost Software License, Version 1.0. (See
 | 
						|
// accompanying file LICENSE_1_0.txt or copy at
 | 
						|
// http://www.boost.org/LICENSE_1_0.txt)
 | 
						|
 | 
						|
#ifndef BOOST_VARIANT_DETAIL_VARIANT_IO_HPP
 | 
						|
#define BOOST_VARIANT_DETAIL_VARIANT_IO_HPP
 | 
						|
 | 
						|
#include <iosfwd> // for std::basic_ostream forward declare
 | 
						|
 | 
						|
#include <boost/variant/variant_fwd.hpp>
 | 
						|
 | 
						|
#include <boost/detail/templated_streams.hpp>
 | 
						|
#include <boost/variant/static_visitor.hpp>
 | 
						|
 | 
						|
namespace boost {
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////////////////////////
 | 
						|
// function template operator<<
 | 
						|
//
 | 
						|
// Outputs the content of the given variant to the given ostream.
 | 
						|
//
 | 
						|
 | 
						|
// forward declare (allows output of embedded variant< variant< ... >, ... >)
 | 
						|
template <
 | 
						|
      BOOST_TEMPLATED_STREAM_ARGS(E,T)
 | 
						|
    BOOST_TEMPLATED_STREAM_COMMA
 | 
						|
      BOOST_VARIANT_ENUM_PARAMS(typename U)
 | 
						|
    >
 | 
						|
inline BOOST_TEMPLATED_STREAM(ostream, E,T)& operator<<(
 | 
						|
      BOOST_TEMPLATED_STREAM(ostream, E,T)& out
 | 
						|
    , const variant< BOOST_VARIANT_ENUM_PARAMS(U) >& rhs
 | 
						|
    );
 | 
						|
 | 
						|
namespace detail { namespace variant {
 | 
						|
 | 
						|
template <typename OStream>
 | 
						|
class printer
 | 
						|
    : public boost::static_visitor<>
 | 
						|
{
 | 
						|
private: // representation
 | 
						|
 | 
						|
    OStream& out_;
 | 
						|
 | 
						|
public: // structors
 | 
						|
 | 
						|
    explicit printer(OStream& out)
 | 
						|
        : out_( out )
 | 
						|
    {
 | 
						|
    }
 | 
						|
 | 
						|
public: // visitor interface
 | 
						|
 | 
						|
    template <typename T>
 | 
						|
    void operator()(const T& operand) const
 | 
						|
    {
 | 
						|
        out_ << operand;
 | 
						|
    }
 | 
						|
 | 
						|
private:
 | 
						|
    printer& operator=(const printer&);
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
}} // namespace detail::variant
 | 
						|
 | 
						|
template <
 | 
						|
      BOOST_TEMPLATED_STREAM_ARGS(E,T)
 | 
						|
    BOOST_TEMPLATED_STREAM_COMMA
 | 
						|
      BOOST_VARIANT_ENUM_PARAMS(typename U)
 | 
						|
    >
 | 
						|
inline BOOST_TEMPLATED_STREAM(ostream, E,T)& operator<<(
 | 
						|
      BOOST_TEMPLATED_STREAM(ostream, E,T)& out
 | 
						|
    , const variant< BOOST_VARIANT_ENUM_PARAMS(U) >& rhs
 | 
						|
    )
 | 
						|
{
 | 
						|
    detail::variant::printer<
 | 
						|
          BOOST_TEMPLATED_STREAM(ostream, E,T)
 | 
						|
        > visitor(out);
 | 
						|
 | 
						|
    rhs.apply_visitor(visitor);
 | 
						|
 | 
						|
    return out;
 | 
						|
}
 | 
						|
 | 
						|
} // namespace boost
 | 
						|
 | 
						|
#endif // BOOST_VARIANT_DETAIL_VARIANT_IO_HPP
 |