1 /*
2  * This file is auto-generated.  DO NOT MODIFY.
3  * Using: out/host/linux-x86/bin/aidl --lang=cpp -Weverything -Wno-missing-permission-annotation -t --min_sdk_version 29 -pout/soong/.intermediates/system/hardware/interfaces/media/android.media.audio.common.types_interface/4/preprocessed.aidl -pout/soong/.intermediates/frameworks/av/media/libaudioclient/audioclient-types-aidl_interface/preprocessed.aidl -pout/soong/.intermediates/frameworks/native/libs/permission/framework-permission-aidl_interface/preprocessed.aidl --ninja -d out/soong/.intermediates/frameworks/av/media/libaudioclient/audiopolicy-types-aidl-cpp-source/gen/staging/android/media/AudioMixMatchCriterionValue.cpp.d -h out/soong/.intermediates/frameworks/av/media/libaudioclient/audiopolicy-types-aidl-cpp-source/gen/include/staging -o out/soong/.intermediates/frameworks/av/media/libaudioclient/audiopolicy-types-aidl-cpp-source/gen/staging -Nframeworks/av/media/libaudioclient/aidl frameworks/av/media/libaudioclient/aidl/android/media/AudioMixMatchCriterionValue.aidl
4  *
5  * DO NOT CHECK THIS FILE INTO A CODE TREE (e.g. git, etc..).
6  * ALWAYS GENERATE THIS FILE FROM UPDATED AIDL COMPILER
7  * AS A BUILD INTERMEDIATE ONLY. THIS IS NOT SOURCE CODE.
8  */
9 #pragma once
10 
11 #include <android/binder_to_string.h>
12 #include <android/media/audio/common/AudioSource.h>
13 #include <android/media/audio/common/AudioUsage.h>
14 #include <array>
15 #include <binder/Enums.h>
16 #include <binder/Parcel.h>
17 #include <binder/Status.h>
18 #include <cassert>
19 #include <cstdint>
20 #include <string>
21 #include <type_traits>
22 #include <utility>
23 #include <utils/String16.h>
24 #include <variant>
25 
26 #ifndef __BIONIC__
27 #define __assert2(a,b,c,d) ((void)0)
28 #endif
29 
30 namespace android {
31 namespace media {
32 class LIBBINDER_EXPORTED AudioMixMatchCriterionValue : public ::android::Parcelable {
33 public:
34   enum class Tag : int32_t {
35     usage = 0,
36     source = 1,
37     uid = 2,
38     userId = 3,
39     audioSessionId = 4,
40   };
41   // Expose tag symbols for legacy code
42   static const inline Tag usage = Tag::usage;
43   static const inline Tag source = Tag::source;
44   static const inline Tag uid = Tag::uid;
45   static const inline Tag userId = Tag::userId;
46   static const inline Tag audioSessionId = Tag::audioSessionId;
47 
48   template<typename _Tp>
49   static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, AudioMixMatchCriterionValue>;
50 
AudioMixMatchCriterionValue()51   AudioMixMatchCriterionValue() : _value(std::in_place_index<static_cast<size_t>(usage)>, ::android::media::audio::common::AudioUsage(::android::media::audio::common::AudioUsage::UNKNOWN)) { }
52 
53   template <typename _Tp, typename = std::enable_if_t<_not_self<_Tp>>>
54   // NOLINTNEXTLINE(google-explicit-constructor)
AudioMixMatchCriterionValue(_Tp && _arg)55   constexpr AudioMixMatchCriterionValue(_Tp&& _arg)
56       : _value(std::forward<_Tp>(_arg)) {}
57 
58   template <size_t _Np, typename... _Tp>
AudioMixMatchCriterionValue(std::in_place_index_t<_Np>,_Tp &&..._args)59   constexpr explicit AudioMixMatchCriterionValue(std::in_place_index_t<_Np>, _Tp&&... _args)
60       : _value(std::in_place_index<_Np>, std::forward<_Tp>(_args)...) {}
61 
62   template <Tag _tag, typename... _Tp>
make(_Tp &&..._args)63   static AudioMixMatchCriterionValue make(_Tp&&... _args) {
64     return AudioMixMatchCriterionValue(std::in_place_index<static_cast<size_t>(_tag)>, std::forward<_Tp>(_args)...);
65   }
66 
67   template <Tag _tag, typename _Tp, typename... _Up>
make(std::initializer_list<_Tp> _il,_Up &&..._args)68   static AudioMixMatchCriterionValue make(std::initializer_list<_Tp> _il, _Up&&... _args) {
69     return AudioMixMatchCriterionValue(std::in_place_index<static_cast<size_t>(_tag)>, std::move(_il), std::forward<_Up>(_args)...);
70   }
71 
getTag()72   Tag getTag() const {
73     return static_cast<Tag>(_value.index());
74   }
75 
76   template <Tag _tag>
get()77   const auto& get() const {
78     if (getTag() != _tag) { __assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "bad access: a wrong tag"); }
79     return std::get<static_cast<size_t>(_tag)>(_value);
80   }
81 
82   template <Tag _tag>
get()83   auto& get() {
84     if (getTag() != _tag) { __assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "bad access: a wrong tag"); }
85     return std::get<static_cast<size_t>(_tag)>(_value);
86   }
87 
88   template <Tag _tag, typename... _Tp>
set(_Tp &&..._args)89   void set(_Tp&&... _args) {
90     _value.emplace<static_cast<size_t>(_tag)>(std::forward<_Tp>(_args)...);
91   }
92 
93   inline bool operator==(const AudioMixMatchCriterionValue& _rhs) const {
94     return _value == _rhs._value;
95   }
96   inline bool operator<(const AudioMixMatchCriterionValue& _rhs) const {
97     return _value < _rhs._value;
98   }
99   inline bool operator!=(const AudioMixMatchCriterionValue& _rhs) const {
100     return !(*this == _rhs);
101   }
102   inline bool operator>(const AudioMixMatchCriterionValue& _rhs) const {
103     return _rhs < *this;
104   }
105   inline bool operator>=(const AudioMixMatchCriterionValue& _rhs) const {
106     return !(*this < _rhs);
107   }
108   inline bool operator<=(const AudioMixMatchCriterionValue& _rhs) const {
109     return !(_rhs < *this);
110   }
111 
112   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
113   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
getParcelableDescriptor()114   static const ::android::String16& getParcelableDescriptor() {
115     static const ::android::StaticString16 DESCRIPTOR (u"android.media.AudioMixMatchCriterionValue");
116     return DESCRIPTOR;
117   }
toString()118   inline std::string toString() const {
119     std::ostringstream os;
120     os << "AudioMixMatchCriterionValue{";
121     switch (getTag()) {
122     case usage: os << "usage: " << ::android::internal::ToString(get<usage>()); break;
123     case source: os << "source: " << ::android::internal::ToString(get<source>()); break;
124     case uid: os << "uid: " << ::android::internal::ToString(get<uid>()); break;
125     case userId: os << "userId: " << ::android::internal::ToString(get<userId>()); break;
126     case audioSessionId: os << "audioSessionId: " << ::android::internal::ToString(get<audioSessionId>()); break;
127     }
128     os << "}";
129     return os.str();
130   }
131 private:
132   std::variant<::android::media::audio::common::AudioUsage, ::android::media::audio::common::AudioSource, int32_t, int32_t, int32_t> _value;
133 };  // class AudioMixMatchCriterionValue
134 }  // namespace media
135 }  // namespace android
136 namespace android {
137 namespace media {
toString(AudioMixMatchCriterionValue::Tag val)138 [[nodiscard]] static inline std::string toString(AudioMixMatchCriterionValue::Tag val) {
139   switch(val) {
140   case AudioMixMatchCriterionValue::Tag::usage:
141     return "usage";
142   case AudioMixMatchCriterionValue::Tag::source:
143     return "source";
144   case AudioMixMatchCriterionValue::Tag::uid:
145     return "uid";
146   case AudioMixMatchCriterionValue::Tag::userId:
147     return "userId";
148   case AudioMixMatchCriterionValue::Tag::audioSessionId:
149     return "audioSessionId";
150   default:
151     return std::to_string(static_cast<int32_t>(val));
152   }
153 }
154 }  // namespace media
155 }  // namespace android
156 namespace android {
157 namespace internal {
158 #pragma clang diagnostic push
159 #pragma clang diagnostic ignored "-Wc++17-extensions"
160 template <>
161 constexpr inline std::array<::android::media::AudioMixMatchCriterionValue::Tag, 5> enum_values<::android::media::AudioMixMatchCriterionValue::Tag> = {
162   ::android::media::AudioMixMatchCriterionValue::Tag::usage,
163   ::android::media::AudioMixMatchCriterionValue::Tag::source,
164   ::android::media::AudioMixMatchCriterionValue::Tag::uid,
165   ::android::media::AudioMixMatchCriterionValue::Tag::userId,
166   ::android::media::AudioMixMatchCriterionValue::Tag::audioSessionId,
167 };
168 #pragma clang diagnostic pop
169 }  // namespace internal
170 }  // namespace android
171