1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- //-----------------------------------------------------------------------------
- // 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
|