AJA NTV2 SDK  17.1.1.1245
NTV2 SDK 17.1.1.1245
variant.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #ifndef AJA_VARIANT_H
9 #define AJA_VARIANT_H
10 
11 #include "ajabase/common/public.h"
12 #include <vector>
13 
17 typedef enum
18 {
33 
38 {
39 public:
40  explicit AJAVariant (const AJAVariantType type = AJA_VARIANT_INT32);
41  explicit inline AJAVariant (const bool value) {mType = AJA_VARIANT_BOOL; mUnion.mBooleanValue = value;}
42  explicit inline AJAVariant (const float value) {mType = AJA_VARIANT_FLOAT; mUnion.mFloatValue = value;}
43  explicit inline AJAVariant (const double value) {mType = AJA_VARIANT_DOUBLE; mUnion.mDoubleValue = value;}
44  explicit inline AJAVariant (const int8_t value) {mType = AJA_VARIANT_INT8; mUnion.mInt8Value = value;}
45  explicit inline AJAVariant (const uint8_t value) {mType = AJA_VARIANT_UINT8; mUnion.mUInt8Value = value;}
46  explicit inline AJAVariant (const int16_t value) {mType = AJA_VARIANT_INT16; mUnion.mInt16Value = value;}
47  explicit inline AJAVariant (const uint16_t value) {mType = AJA_VARIANT_UINT16; mUnion.mUInt16Value = value;}
48  explicit inline AJAVariant (const int32_t value) {mType = AJA_VARIANT_INT32; mUnion.mInt32Value = value;}
49  explicit inline AJAVariant (const uint32_t value) {mType = AJA_VARIANT_UINT32; mUnion.mUInt32Value = value;}
50  explicit inline AJAVariant (const int64_t value) {mType = AJA_VARIANT_INT64; mUnion.mInt64Value = value;}
51  explicit inline AJAVariant (const uint64_t value) {mType = AJA_VARIANT_UINT64; mUnion.mUInt64Value = value;}
52  explicit inline AJAVariant (const char* pStr) {mType = AJA_VARIANT_STRING; mStringValue = pStr;}
53  explicit inline AJAVariant (const char* pStr, size_t len) : mType(AJA_VARIANT_STRING), mStringValue(pStr, len) {}
54  explicit inline AJAVariant (const std::string & value) : mType(AJA_VARIANT_STRING), mStringValue(value) {}
55 
56  inline AJAVariant (const AJAVariant & other) {operator=(other);}
57 
59 
65  AJAVariant & operator = (const AJAVariant & other);
66 
72  template<typename T> AJAVariant & operator = (const T inRHS)
73  {
74  const AJAVariant v(inRHS);
75  mType = v.mType;
76  mUnion = v.mUnion;
77  mStringValue = v.mStringValue;
78  return *this;
79  }
80 
81  // Type conversion operators
82  inline operator bool() const {return AsBool();}
83  inline operator float() const {return AsFloat();}
84  inline operator double() const {return AsDouble();}
85  inline operator int8_t() const {return AsInt8();}
86  inline operator uint8_t() const {return AsUInt8();}
87  inline operator int16_t() const {return AsInt16();}
88  inline operator uint16_t() const {return AsUInt16();}
89  inline operator int32_t() const {return AsInt32();}
90  inline operator uint32_t() const {return AsUInt32();}
91  inline operator int64_t() const {return AsInt64();}
92  inline operator uint64_t() const {return AsUInt64();}
93  inline operator std::string() const {return AsString();}
94 
95  inline AJAVariantType GetType() const {return mType;}
96 
97  bool IsNumeric() const;
98  bool IsUnsigned() const;
99  bool IsSigned() const;
100 
105  inline bool GetBool() const {return mUnion.mBooleanValue;}
106 
111  inline float GetFloat() const {return mUnion.mFloatValue;}
112 
117  inline double GetDouble() const {return mUnion.mDoubleValue;}
118 
123  inline int8_t GetInt8() const {return mUnion.mInt8Value;}
124 
129  inline uint8_t GetUInt8() const {return mUnion.mUInt8Value;}
130 
135  inline int16_t GetInt16() const {return mUnion.mInt16Value;}
136 
141  inline uint16_t GetUInt16() const {return mUnion.mUInt16Value;}
142 
147  inline int32_t GetInt32() const {return mUnion.mInt32Value;}
148 
153  inline uint32_t GetUInt32() const {return mUnion.mUInt32Value;}
154 
159  inline int64_t GetInt64() const {return mUnion.mInt64Value;}
160 
165  inline uint64_t GetUInt64() const {return mUnion.mUInt64Value;}
166 
171  inline const std::string & GetString() const {return mStringValue;}
172 
177  inline void SetBool(bool value) {mUnion.mBooleanValue = value; mType = AJA_VARIANT_BOOL;}
182  inline void SetFloat(float value) {mUnion.mFloatValue = value; mType = AJA_VARIANT_FLOAT;}
187  inline void SetDouble(double value) {mUnion.mDoubleValue = value; mType = AJA_VARIANT_DOUBLE;}
192  inline void SetInt8(int8_t value) {mUnion.mInt8Value = value; mType = AJA_VARIANT_INT8;}
197  inline void SetUInt8(uint8_t value) {mUnion.mUInt8Value = value; mType = AJA_VARIANT_UINT8;}
202  inline void SetInt16(int16_t value) {mUnion.mInt16Value = value; mType = AJA_VARIANT_INT16;}
207  inline void SetUInt16(uint16_t value) {mUnion.mUInt16Value = value; mType = AJA_VARIANT_UINT16;}
212  inline void SetInt32(int32_t value) {mUnion.mInt32Value = value; mType = AJA_VARIANT_INT32;}
217  inline void SetUInt32(uint32_t value) {mUnion.mUInt32Value = value; mType = AJA_VARIANT_UINT32;}
222  inline void SetInt64(int64_t value) {mUnion.mInt64Value = value; mType = AJA_VARIANT_INT64;}
227  inline void SetUInt64(uint64_t value) {mUnion.mUInt64Value = value; mType = AJA_VARIANT_UINT64;}
232  inline void SetString(const char* value) {mStringValue = std::string(value); mType = AJA_VARIANT_STRING;}
238  inline void SetString(const char* pStr, const size_t len) {mStringValue = std::string(pStr, len); mType = AJA_VARIANT_STRING;}
243  inline void SetString(const std::string & value) {mStringValue = value; mType = AJA_VARIANT_STRING;}
244 
245  // Type conversion methods
250  bool AsBool() const;
255  float AsFloat() const;
260  double AsDouble() const;
265  int8_t AsInt8() const;
270  uint8_t AsUInt8() const;
275  int16_t AsInt16() const;
280  uint16_t AsUInt16() const;
285  int32_t AsInt32() const;
290  uint32_t AsUInt32() const;
295  int64_t AsInt64() const;
300  uint64_t AsUInt64() const;
305  std::string AsString() const;
306 
307 private:
308  void initialize();
309 
310  AJAVariantType mType;
311  union
312  {
314  float mFloatValue;
315  double mDoubleValue;
316  int8_t mInt8Value;
317  uint8_t mUInt8Value;
318  int16_t mInt16Value;
319  uint16_t mUInt16Value;
320  int32_t mInt32Value;
321  uint32_t mUInt32Value;
322  int64_t mInt64Value;
323  uint64_t mUInt64Value;
324  } mUnion;
325  std::string mStringValue;
326 }; // AJAVariant
327 
328 typedef std::vector<AJAVariant> AJAVariantList;
329 
330 #endif // AJA_VARIANT_H
AJAVariant::SetString
void SetString(const char *value)
Definition: variant.h:232
AJA_VARIANT_INT32
@ AJA_VARIANT_INT32
Definition: variant.h:27
AJA_VARIANT_DOUBLE
@ AJA_VARIANT_DOUBLE
Definition: variant.h:22
AJAVariant::AJAVariant
AJAVariant(const uint16_t value)
Definition: variant.h:47
AJAVariant::SetUInt16
void SetUInt16(uint16_t value)
Definition: variant.h:207
AJA_VARIANT_UINT64
@ AJA_VARIANT_UINT64
Definition: variant.h:30
AJAVariant::GetInt16
int16_t GetInt16() const
Definition: variant.h:135
AJA_VARIANT_UINT32
@ AJA_VARIANT_UINT32
Definition: variant.h:28
AJAVariant::AJAVariant
AJAVariant(const float value)
Definition: variant.h:42
AJAVariant::GetUInt32
uint32_t GetUInt32() const
Definition: variant.h:153
AJAVariant::mBooleanValue
bool mBooleanValue
Definition: variant.h:313
AJAVariant::SetBool
void SetBool(bool value)
Definition: variant.h:177
AJAVariant::AJAVariant
AJAVariant(const uint64_t value)
Definition: variant.h:51
AJAVariant::mUInt8Value
uint8_t mUInt8Value
Definition: variant.h:317
AJA_VARIANT_INT64
@ AJA_VARIANT_INT64
Definition: variant.h:29
AJA_EXPORT
#define AJA_EXPORT
Definition: export.h:34
AJAVariant::GetFloat
float GetFloat() const
Definition: variant.h:111
AJAVariant::AJAVariant
AJAVariant(const int16_t value)
Definition: variant.h:46
AJAVariant::SetUInt8
void SetUInt8(uint8_t value)
Definition: variant.h:197
AJAVariant::AJAVariant
AJAVariant(const AJAVariant &other)
Definition: variant.h:56
AJAVariant::mInt64Value
int64_t mInt64Value
Definition: variant.h:322
AJAVariant::SetInt16
void SetInt16(int16_t value)
Definition: variant.h:202
AJA_VARIANT_UINT8
@ AJA_VARIANT_UINT8
Definition: variant.h:24
public.h
Master header for the ajabase library.
AJAVariant::AJAVariant
AJAVariant(const bool value)
Definition: variant.h:41
AJAVariant::mInt16Value
int16_t mInt16Value
Definition: variant.h:318
AJAVariant::AJAVariant
AJAVariant(const char *pStr, size_t len)
Definition: variant.h:53
AJAVariant::mInt32Value
int32_t mInt32Value
Definition: variant.h:320
AJAVariantList
std::vector< AJAVariant > AJAVariantList
Definition: variant.h:328
AJAVariant::AJAVariant
AJAVariant(const int32_t value)
Definition: variant.h:48
AJAVariant::GetString
const std::string & GetString() const
Definition: variant.h:171
AJAVariant::SetString
void SetString(const char *pStr, const size_t len)
Definition: variant.h:238
AJAVariant::AJAVariant
AJAVariant(const uint32_t value)
Definition: variant.h:49
AJAVariantType
AJAVariantType
The data types that AJAVariant supports.
Definition: variant.h:17
AJAVariant::SetDouble
void SetDouble(double value)
Definition: variant.h:187
AJAVariant::~AJAVariant
~AJAVariant()
Definition: variant.h:58
AJAVariant::mFloatValue
float mFloatValue
Definition: variant.h:314
AJAVariant::mDoubleValue
double mDoubleValue
Definition: variant.h:315
AJA_VARIANT_NONE
@ AJA_VARIANT_NONE
Definition: variant.h:19
AJA_VARIANT_UINT16
@ AJA_VARIANT_UINT16
Definition: variant.h:26
AJAVariant::SetUInt32
void SetUInt32(uint32_t value)
Definition: variant.h:217
AJAVariant
A simple Variant class.
Definition: variant.h:37
AJAVariant::mUInt16Value
uint16_t mUInt16Value
Definition: variant.h:319
AJAVariant::AJAVariant
AJAVariant(const double value)
Definition: variant.h:43
AJAVariant::GetUInt64
uint64_t GetUInt64() const
Definition: variant.h:165
AJAVariant::AJAVariant
AJAVariant(const int64_t value)
Definition: variant.h:50
AJAVariant::SetUInt64
void SetUInt64(uint64_t value)
Definition: variant.h:227
AJAVariant::mInt8Value
int8_t mInt8Value
Definition: variant.h:316
AJAVariant::AJAVariant
AJAVariant(const uint8_t value)
Definition: variant.h:45
AJA_VARIANT_BOOL
@ AJA_VARIANT_BOOL
Definition: variant.h:20
AJAVariant::AJAVariant
AJAVariant(const char *pStr)
Definition: variant.h:52
AJA_VARIANT_STRING
@ AJA_VARIANT_STRING
Definition: variant.h:31
AJAVariant::SetString
void SetString(const std::string &value)
Definition: variant.h:243
AJAVariant::GetUInt8
uint8_t GetUInt8() const
Definition: variant.h:129
AJAVariant::GetInt64
int64_t GetInt64() const
Definition: variant.h:159
AJAVariant::GetInt8
int8_t GetInt8() const
Definition: variant.h:123
AJAVariant::GetInt32
int32_t GetInt32() const
Definition: variant.h:147
AJAVariant::mUInt64Value
uint64_t mUInt64Value
Definition: variant.h:323
AJAVariant::mUInt32Value
uint32_t mUInt32Value
Definition: variant.h:321
AJA_VARIANT_INT8
@ AJA_VARIANT_INT8
Definition: variant.h:23
AJAVariant::SetInt8
void SetInt8(int8_t value)
Definition: variant.h:192
AJA_VARIANT_FLOAT
@ AJA_VARIANT_FLOAT
Definition: variant.h:21
AJAVariant::GetUInt16
uint16_t GetUInt16() const
Definition: variant.h:141
AJAVariant::GetBool
bool GetBool() const
Definition: variant.h:105
AJAVariant::AJAVariant
AJAVariant(const int8_t value)
Definition: variant.h:44
AJAVariant::SetInt32
void SetInt32(int32_t value)
Definition: variant.h:212
AJAVariant::AJAVariant
AJAVariant(const std::string &value)
Definition: variant.h:54
AJA_VARIANT_INT16
@ AJA_VARIANT_INT16
Definition: variant.h:25
AJAVariant::SetInt64
void SetInt64(int64_t value)
Definition: variant.h:222
AJAVariant::GetDouble
double GetDouble() const
Definition: variant.h:117
AJAVariant::SetFloat
void SetFloat(float value)
Definition: variant.h:182