1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright (c) MapBox All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: BSD-3-Clause 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker 6*89c4ff92SAndroid Build Coastguard Worker #ifndef MAPBOX_UTIL_VARIANT_IO_HPP 7*89c4ff92SAndroid Build Coastguard Worker #define MAPBOX_UTIL_VARIANT_IO_HPP 8*89c4ff92SAndroid Build Coastguard Worker 9*89c4ff92SAndroid Build Coastguard Worker #include <iosfwd> 10*89c4ff92SAndroid Build Coastguard Worker 11*89c4ff92SAndroid Build Coastguard Worker #include <mapbox/variant.hpp> 12*89c4ff92SAndroid Build Coastguard Worker 13*89c4ff92SAndroid Build Coastguard Worker namespace mapbox { 14*89c4ff92SAndroid Build Coastguard Worker namespace util { 15*89c4ff92SAndroid Build Coastguard Worker 16*89c4ff92SAndroid Build Coastguard Worker namespace detail { 17*89c4ff92SAndroid Build Coastguard Worker // operator<< helper 18*89c4ff92SAndroid Build Coastguard Worker template <typename Out> 19*89c4ff92SAndroid Build Coastguard Worker class printer 20*89c4ff92SAndroid Build Coastguard Worker { 21*89c4ff92SAndroid Build Coastguard Worker public: printer(Out & out)22*89c4ff92SAndroid Build Coastguard Worker explicit printer(Out& out) 23*89c4ff92SAndroid Build Coastguard Worker : out_(out) {} 24*89c4ff92SAndroid Build Coastguard Worker printer& operator=(printer const&) = delete; 25*89c4ff92SAndroid Build Coastguard Worker 26*89c4ff92SAndroid Build Coastguard Worker // visitor 27*89c4ff92SAndroid Build Coastguard Worker template <typename T> operator ()(T const & operand) const28*89c4ff92SAndroid Build Coastguard Worker void operator()(T const& operand) const 29*89c4ff92SAndroid Build Coastguard Worker { 30*89c4ff92SAndroid Build Coastguard Worker out_ << operand; 31*89c4ff92SAndroid Build Coastguard Worker } 32*89c4ff92SAndroid Build Coastguard Worker 33*89c4ff92SAndroid Build Coastguard Worker private: 34*89c4ff92SAndroid Build Coastguard Worker Out& out_; 35*89c4ff92SAndroid Build Coastguard Worker }; 36*89c4ff92SAndroid Build Coastguard Worker } 37*89c4ff92SAndroid Build Coastguard Worker 38*89c4ff92SAndroid Build Coastguard Worker // operator<< 39*89c4ff92SAndroid Build Coastguard Worker template <typename CharT, typename Traits, typename... Types> 40*89c4ff92SAndroid Build Coastguard Worker VARIANT_INLINE std::basic_ostream<CharT, Traits>& operator <<(std::basic_ostream<CharT,Traits> & out,variant<Types...> const & rhs)41*89c4ff92SAndroid Build Coastguard Workeroperator<<(std::basic_ostream<CharT, Traits>& out, variant<Types...> const& rhs) 42*89c4ff92SAndroid Build Coastguard Worker { 43*89c4ff92SAndroid Build Coastguard Worker detail::printer<std::basic_ostream<CharT, Traits>> visitor(out); 44*89c4ff92SAndroid Build Coastguard Worker apply_visitor(visitor, rhs); 45*89c4ff92SAndroid Build Coastguard Worker return out; 46*89c4ff92SAndroid Build Coastguard Worker } 47*89c4ff92SAndroid Build Coastguard Worker } // namespace util 48*89c4ff92SAndroid Build Coastguard Worker } // namespace mapbox 49*89c4ff92SAndroid Build Coastguard Worker 50*89c4ff92SAndroid Build Coastguard Worker #endif // MAPBOX_UTIL_VARIANT_IO_HPP 51