xref: /aosp_15_r20/external/armnn/third-party/mapbox/variant_io.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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 Worker operator<<(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