1 /*
2 * Copyright (c) 2021, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 //!
23 //! \file     media_user_setting_value.cpp
24 //! \brief    Implementation for user setting value
25 //!
26 #include "media_user_setting_value.h"
27 
28 namespace MediaUserSetting {
NUMERIC_VALUE()29 Value::NUMERIC_VALUE::NUMERIC_VALUE() : m_u64Data(0)
30 {
31 }
NUMERIC_VALUE(const bool value)32 Value::NUMERIC_VALUE::NUMERIC_VALUE(const bool value) : m_u64Data(0)
33 {
34     m_bData = value;
35 }
NUMERIC_VALUE(const uint32_t value)36 Value::NUMERIC_VALUE::NUMERIC_VALUE(const uint32_t value) : m_u64Data(0)
37 {
38     m_u32Data = value;
39 }
NUMERIC_VALUE(const uint64_t value)40 Value::NUMERIC_VALUE::NUMERIC_VALUE(const uint64_t value) : m_u64Data(0)
41 {
42     m_u64Data = value;
43 }
NUMERIC_VALUE(const int32_t value)44 Value::NUMERIC_VALUE::NUMERIC_VALUE(const int32_t value) : m_u64Data(0)
45 {
46     m_i32Data = value;
47 }
NUMERIC_VALUE(const int64_t value)48 Value::NUMERIC_VALUE::NUMERIC_VALUE(const int64_t value) : m_u64Data(0)
49 {
50     m_i64Data = value;
51 }
NUMERIC_VALUE(const float value)52 Value::NUMERIC_VALUE::NUMERIC_VALUE(const float value) : m_u64Data(0)
53 {
54     m_fData = value;
55 }
56 
operator =(const int32_t & value)57 Value::NUMERIC_VALUE &Value::NUMERIC_VALUE::operator=(const int32_t &value)
58 {
59     m_i32Data = value;
60     return *this;
61 }
operator =(const int64_t & value)62 Value::NUMERIC_VALUE &Value::NUMERIC_VALUE::operator = (const int64_t &value)
63 {
64     m_i64Data = value;
65     return *this;
66 }
operator =(const uint32_t & value)67 Value::NUMERIC_VALUE &Value::NUMERIC_VALUE::operator = (const uint32_t &value)
68 {
69     m_u32Data = value;
70     return *this;
71 }
operator =(const uint64_t & value)72 Value::NUMERIC_VALUE &Value::NUMERIC_VALUE::operator = (const uint64_t &value)
73 {
74     m_u64Data = value;
75     return *this;
76 }
operator =(const bool & value)77 Value::NUMERIC_VALUE &Value::NUMERIC_VALUE::operator=(const bool &value)
78 {
79     m_bData = value;
80     return *this;
81 }
operator =(const float & value)82 Value::NUMERIC_VALUE &Value::NUMERIC_VALUE::operator=(const float &value)
83 {
84     m_fData = value;
85     return *this;
86 }
87 
Value()88 Value::Value()
89 {
90 }
91 
~Value()92 Value::~Value()
93 {
94 }
95 
Value(const Value & value)96 Value::Value(const Value &value)
97 {
98     m_sValue        = value.m_sValue;
99     m_size          = value.m_size;
100     m_type          = value.m_type;
101     m_numericValue  = value.m_numericValue;
102 }
103 
Value(const int32_t & value)104 Value::Value(const int32_t &value) : m_numericValue(value)
105 {
106     m_sValue        = std::to_string(value);
107     m_size          = sizeof(int32_t);
108     m_type          = MOS_USER_FEATURE_VALUE_TYPE_INT32;
109 }
110 
Value(const int64_t & value)111 Value::Value(const int64_t &value): m_numericValue(value)
112 {
113     m_sValue        = std::to_string(value);
114     m_size          = sizeof(int64_t);
115     m_type          = MOS_USER_FEATURE_VALUE_TYPE_INT64;
116 }
Value(const uint32_t & value)117 Value::Value(const uint32_t &value) : m_numericValue(value)
118 {
119     m_sValue        = std::to_string(value);
120     m_size          = sizeof(uint32_t);
121     m_type          = MOS_USER_FEATURE_VALUE_TYPE_UINT32;
122 }
123 
Value(const uint64_t & value)124 Value::Value(const uint64_t &value) : m_numericValue(value)
125 {
126     m_sValue        = std::to_string(value);
127     m_size          = sizeof(uint64_t);
128     m_type          = MOS_USER_FEATURE_VALUE_TYPE_UINT64;
129 }
130 
Value(const bool & value)131 Value::Value(const bool &value) : m_numericValue(value)
132 {
133     m_sValue        = value ? "1" : "0";
134     m_size          = sizeof(uint32_t);
135     m_type          = MOS_USER_FEATURE_VALUE_TYPE_BOOL;
136 }
137 
Value(const float & value)138 Value::Value(const float &value) : m_numericValue(value)
139 {
140     m_sValue        = std::to_string(value);
141     m_size          = sizeof(float);
142     m_type          = MOS_USER_FEATURE_VALUE_TYPE_FLOAT;
143 }
144 
Value(const std::string & value)145 Value::Value(const std::string &value) : m_numericValue(0)
146 {
147     m_sValue        = value;
148     m_size          = m_sValue.length();
149     m_type          = MOS_USER_FEATURE_VALUE_TYPE_STRING;
150 }
151 
Value(const char * value)152 Value::Value(const char *value) : m_numericValue(0)
153 {
154     m_sValue        = value;
155     m_size          = m_sValue.length();
156     m_type          = MOS_USER_FEATURE_VALUE_TYPE_STRING;
157 }
158 
Value(char * value)159 Value::Value(char *value) : m_numericValue(0)
160 {
161     m_sValue        = value;
162     m_size          = m_sValue.length();
163     m_type          = MOS_USER_FEATURE_VALUE_TYPE_STRING;
164 }
165 
operator =(const Value & value)166 Value& Value::operator=(const Value &value)
167 {
168     if (this != &value)
169     {
170         m_sValue                = value.m_sValue;
171         m_size                  = value.m_size;
172         m_type                  = value.m_type;
173         m_numericValue          = value.m_numericValue;
174     }
175     return *this;
176 }
177 
operator =(const int32_t & value)178 Value& Value::operator=(const int32_t &value)
179 {
180     m_sValue                    = std::to_string(value);
181     m_size                      = sizeof(int32_t);
182     m_type                      = MOS_USER_FEATURE_VALUE_TYPE_INT32;
183     m_numericValue.m_i32Data    = value;
184     return *this;
185 }
186 
operator =(const int64_t & value)187 Value& Value::operator=(const int64_t &value)
188 {
189     m_sValue                    = std::to_string(value);
190     m_size                      = sizeof(int64_t);
191     m_type                      = MOS_USER_FEATURE_VALUE_TYPE_INT64;
192     m_numericValue.m_i64Data    = value;
193     return *this;
194 }
operator =(const uint32_t & value)195 Value& Value::operator=(const uint32_t &value)
196 {
197     m_sValue                    = std::to_string(value);
198     m_size                      = sizeof(uint32_t);
199     m_type                      = MOS_USER_FEATURE_VALUE_TYPE_UINT32;
200     m_numericValue.m_u32Data    = value;
201     return *this;
202 }
operator =(const uint64_t & value)203 Value& Value::operator=(const uint64_t &value)
204 {
205     m_sValue                    = std::to_string(value);
206     m_size                      = sizeof(uint64_t);
207     m_type                      = MOS_USER_FEATURE_VALUE_TYPE_UINT64;
208     m_numericValue.m_u64Data    = value;
209     return *this;
210 }
operator =(const bool & value)211 Value& Value::operator=(const bool &value)
212 {
213     m_sValue                    = value ? "1" : "0";
214     m_size                      = sizeof(uint32_t);
215     m_type                      = MOS_USER_FEATURE_VALUE_TYPE_BOOL;
216     m_numericValue.m_bData      = value;
217     return *this;
218 }
operator =(const float & value)219 Value& Value::operator=(const float &value)
220 {
221     m_sValue                    = std::to_string(value);
222     m_size                      = sizeof(float);
223     m_type                      = MOS_USER_FEATURE_VALUE_TYPE_FLOAT;
224     m_numericValue.m_fData      = value;
225     return *this;
226 }
227 
operator =(const std::string & value)228 Value& Value::operator=(const std::string &value)
229 {
230     m_sValue                    = value;
231     m_size                      = m_sValue.length();
232     m_type                      = MOS_USER_FEATURE_VALUE_TYPE_STRING;
233     m_numericValue.m_u64Data    = 0;
234     return *this;
235 }
236 
operator =(const char * value)237 Value& Value::operator=(const char* value)
238 {
239     m_sValue                    = value;
240     m_size                      = m_sValue.length();
241     m_type                      = MOS_USER_FEATURE_VALUE_TYPE_STRING;
242     m_numericValue.m_u64Data    = 0;
243     return *this;
244 }
245 
operator =(char * value)246 Value& Value::operator=(char* value)
247 {
248     m_sValue                    = value;
249     m_size                      = m_sValue.length();
250     m_type                      = MOS_USER_FEATURE_VALUE_TYPE_STRING;
251     m_numericValue.m_u64Data    = 0;
252     return *this;
253 }
254 
255 template <>
Get() const256 bool Value::Get() const
257 {
258     return m_numericValue.m_bData;
259 }
260 
261 template <>
Get() const262 uint8_t Value::Get()const
263 {
264     return (uint8_t)m_numericValue.m_u32Data;
265 }
266 
267 template <>
Get() const268 uint32_t Value::Get()const
269 {
270     return m_numericValue.m_u32Data;
271 }
272 
273 template <>
Get() const274 int32_t Value::Get()const
275 {
276     return m_numericValue.m_i32Data;
277 }
278 
279 template <>
Get() const280 int64_t Value::Get()const
281 {
282     return m_numericValue.m_i64Data;
283 }
284 
285 template <>
Get() const286 unsigned long Value::Get() const
287 {
288     return (unsigned long) m_numericValue.m_u64Data;
289 }
290 
291 template <>
Get() const292 unsigned long long Value::Get()const
293 {
294     return m_numericValue.m_u64Data;
295 }
296 
297 template <>
Get() const298 float Value::Get() const
299 {
300     return m_numericValue.m_fData;
301 }
302 }