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.h 24 //! \brief Implementation for user setting value 25 //! 26 27 #ifndef __MEDIA_USER_SETTING_VALUE_H__ 28 #define __MEDIA_USER_SETTING_VALUE_H__ 29 30 #include "mos_utilities_common.h" 31 #include <string> 32 #include <sstream> 33 34 namespace MediaUserSetting { 35 36 class Value 37 { 38 public: 39 Value(); 40 virtual ~Value(); 41 Value(const Value &value); 42 Value(const int32_t &value); 43 Value(const int64_t &value); 44 Value(const uint32_t &value); 45 Value(const uint64_t &value); 46 Value(const bool &value); 47 Value(const float &value); 48 Value(const std::string &value); 49 Value(const char* value); 50 Value(char* value); 51 52 Value& operator=(const Value &value); 53 Value& operator=(const int32_t &value); 54 Value& operator=(const int64_t &value); 55 Value& operator=(const uint32_t &value); 56 Value& operator=(const uint64_t &value); 57 Value& operator=(const bool &value); 58 Value& operator=(const float &value); 59 Value& operator=(const std::string &value); 60 Value& operator=(const char* value); 61 Value& operator=(char* value); 62 63 template <class T> Get()64 T Get() const 65 { 66 return m_sValue; 67 } 68 ConstString()69 const std::string &ConstString() const { return m_sValue; } 70 Size()71 const std::size_t &Size() const { return m_size; } ValueType()72 const MOS_USER_FEATURE_VALUE_TYPE &ValueType() const { return m_type; } 73 74 private: 75 std::size_t m_size = 0; 76 std::string m_sValue{}; 77 union NUMERIC_VALUE 78 { 79 NUMERIC_VALUE(); 80 NUMERIC_VALUE(const bool value); 81 NUMERIC_VALUE(const uint32_t value); 82 NUMERIC_VALUE(const uint64_t value); 83 NUMERIC_VALUE(const int32_t value); 84 NUMERIC_VALUE(const int64_t value); 85 NUMERIC_VALUE(const float value); 86 NUMERIC_VALUE &operator=(const int32_t &value); 87 NUMERIC_VALUE &operator=(const int64_t &value); 88 NUMERIC_VALUE &operator=(const uint32_t &value); 89 NUMERIC_VALUE &operator=(const uint64_t &value); 90 NUMERIC_VALUE &operator=(const bool &value); 91 NUMERIC_VALUE &operator=(const float &value); 92 93 bool m_bData; 94 uint32_t m_u32Data; 95 uint64_t m_u64Data; 96 int32_t m_i32Data; 97 int64_t m_i64Data; 98 float m_fData; 99 }; 100 NUMERIC_VALUE m_numericValue = {}; 101 MOS_USER_FEATURE_VALUE_TYPE m_type = MOS_USER_FEATURE_VALUE_TYPE_INVALID; 102 }; 103 104 template <> bool Value::Get() const; 105 template <> uint8_t Value::Get() const; 106 template <> uint32_t Value::Get() const; 107 template <> int32_t Value::Get() const; 108 template <> unsigned long Value::Get() const; 109 template <> int64_t Value::Get() const; 110 template <> float Value::Get() const; 111 template <> unsigned long long Value::Get() const; 112 } 113 114 #endif