AJA NTV2 SDK  17.6.0.2675
NTV2 SDK 17.6.0.2675
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/export.h"
12 #include <string>
13 #include <vector>
14 #include <cstdint>
15 
19 typedef enum
20 {
35 
40 {
41 public:
42  explicit AJAVariant (const AJAVariantType type = AJA_VARIANT_INT32);
43  explicit inline AJAVariant (const bool value) {mType = AJA_VARIANT_BOOL; mUnion.mBooleanValue = value;}
44  explicit inline AJAVariant (const float value) {mType = AJA_VARIANT_FLOAT; mUnion.mFloatValue = value;}
45  explicit inline AJAVariant (const double value) {mType = AJA_VARIANT_DOUBLE; mUnion.mDoubleValue = value;}
46  explicit inline AJAVariant (const int8_t value) {mType = AJA_VARIANT_INT8; mUnion.mInt8Value = value;}
47  explicit inline AJAVariant (const uint8_t value) {mType = AJA_VARIANT_UINT8; mUnion.mUInt8Value = value;}
48  explicit inline AJAVariant (const int16_t value) {mType = AJA_VARIANT_INT16; mUnion.mInt16Value = value;}
49  explicit inline AJAVariant (const uint16_t value) {mType = AJA_VARIANT_UINT16; mUnion.mUInt16Value = value;}
50  explicit inline AJAVariant (const int32_t value) {mType = AJA_VARIANT_INT32; mUnion.mInt32Value = value;}
51  explicit inline AJAVariant (const uint32_t value) {mType = AJA_VARIANT_UINT32; mUnion.mUInt32Value = value;}
52  explicit inline AJAVariant (const int64_t value) {mType = AJA_VARIANT_INT64; mUnion.mInt64Value = value;}
53  explicit inline AJAVariant (const uint64_t value) {mType = AJA_VARIANT_UINT64; mUnion.mUInt64Value = value;}
54  explicit inline AJAVariant (const char* pStr) {mType = AJA_VARIANT_STRING; mStringValue = pStr;}
55  explicit inline AJAVariant (const char* pStr, size_t len) : mType(AJA_VARIANT_STRING), mStringValue(pStr, len) {}
56  explicit inline AJAVariant (const std::string & value) : mType(AJA_VARIANT_STRING), mStringValue(value) {}
57 
58  inline AJAVariant (const AJAVariant & other) {operator=(other);}
59 
61 
67  AJAVariant & operator = (const AJAVariant & other);
68 
74  template<typename T> AJAVariant & operator = (const T inRHS)
75  {
76  const AJAVariant v(inRHS);
77  mType = v.mType;
78  mUnion = v.mUnion;
79  mStringValue = v.mStringValue;
80  return *this;
81  }
82 
83  // Type conversion operators
84  inline operator bool() const {return AsBool();}
85  inline operator float() const {return AsFloat();}
86  inline operator double() const {return AsDouble();}
87  inline operator int8_t() const {return AsInt8();}
88  inline operator uint8_t() const {return AsUInt8();}
89  inline operator int16_t() const {return AsInt16();}
90  inline operator uint16_t() const {return AsUInt16();}
91  inline operator int32_t() const {return AsInt32();}
92  inline operator uint32_t() const {return AsUInt32();}
93  inline operator int64_t() const {return AsInt64();}
94  inline operator uint64_t() const {return AsUInt64();}
95  inline operator std::string() const {return AsString();}
96 
97  inline AJAVariantType GetType() const {return mType;}
98 
99  bool IsNumeric() const;
100  bool IsUnsigned() const;
101  bool IsSigned() const;
102 
107  inline bool GetBool() const {return mUnion.mBooleanValue;}
108 
113  inline float GetFloat() const {return mUnion.mFloatValue;}
114 
119  inline double GetDouble() const {return mUnion.mDoubleValue;}
120 
125  inline int8_t GetInt8() const {return mUnion.mInt8Value;}
126 
131  inline uint8_t GetUInt8() const {return mUnion.mUInt8Value;}
132 
137  inline int16_t GetInt16() const {return mUnion.mInt16Value;}
138 
143  inline uint16_t GetUInt16() const {return mUnion.mUInt16Value;}
144 
149  inline int32_t GetInt32() const {return mUnion.mInt32Value;}
150 
155  inline uint32_t GetUInt32() const {return mUnion.mUInt32Value;}
156 
161  inline int64_t GetInt64() const {return mUnion.mInt64Value;}
162 
167  inline uint64_t GetUInt64() const {return mUnion.mUInt64Value;}
168 
173  inline const std::string & GetString() const {return mStringValue;}
174 
179  inline void SetBool(bool value) {mUnion.mBooleanValue = value; mType = AJA_VARIANT_BOOL;}
184  inline void SetFloat(float value) {mUnion.mFloatValue = value; mType = AJA_VARIANT_FLOAT;}
189  inline void SetDouble(double value) {mUnion.mDoubleValue = value; mType = AJA_VARIANT_DOUBLE;}
194  inline void SetInt8(int8_t value) {mUnion.mInt8Value = value; mType = AJA_VARIANT_INT8;}
199  inline void SetUInt8(uint8_t value) {mUnion.mUInt8Value = value; mType = AJA_VARIANT_UINT8;}
204  inline void SetInt16(int16_t value) {mUnion.mInt16Value = value; mType = AJA_VARIANT_INT16;}
209  inline void SetUInt16(uint16_t value) {mUnion.mUInt16Value = value; mType = AJA_VARIANT_UINT16;}
214  inline void SetInt32(int32_t value) {mUnion.mInt32Value = value; mType = AJA_VARIANT_INT32;}
219  inline void SetUInt32(uint32_t value) {mUnion.mUInt32Value = value; mType = AJA_VARIANT_UINT32;}
224  inline void SetInt64(int64_t value) {mUnion.mInt64Value = value; mType = AJA_VARIANT_INT64;}
229  inline void SetUInt64(uint64_t value) {mUnion.mUInt64Value = value; mType = AJA_VARIANT_UINT64;}
234  inline void SetString(const char* value) {mStringValue = std::string(value); mType = AJA_VARIANT_STRING;}
240  inline void SetString(const char* pStr, const size_t len) {mStringValue = std::string(pStr, len); mType = AJA_VARIANT_STRING;}
245  inline void SetString(const std::string & value) {mStringValue = value; mType = AJA_VARIANT_STRING;}
246 
247  // Type conversion methods
252  bool AsBool() const;
257  float AsFloat() const;
262  double AsDouble() const;
267  int8_t AsInt8() const;
272  uint8_t AsUInt8() const;
277  int16_t AsInt16() const;
282  uint16_t AsUInt16() const;
287  int32_t AsInt32() const;
292  uint32_t AsUInt32() const;
297  int64_t AsInt64() const;
302  uint64_t AsUInt64() const;
307  std::string AsString() const;
308 
309 private:
310  void initialize();
311 
312  AJAVariantType mType;
313  union
314  {
316  float mFloatValue;
317  double mDoubleValue;
318  int8_t mInt8Value;
319  uint8_t mUInt8Value;
320  int16_t mInt16Value;
321  uint16_t mUInt16Value;
322  int32_t mInt32Value;
323  uint32_t mUInt32Value;
324  int64_t mInt64Value;
325  uint64_t mUInt64Value;
326  } mUnion;
327  std::string mStringValue;
328 }; // AJAVariant
329 
330 typedef std::vector<AJAVariant> AJAVariantList;
331 
332 #endif // AJA_VARIANT_H
AJAVariant::SetString
void SetString(const char *value)
Definition: variant.h:234
AJA_VARIANT_INT32
@ AJA_VARIANT_INT32
Definition: variant.h:29
AJA_VARIANT_DOUBLE
@ AJA_VARIANT_DOUBLE
Definition: variant.h:24
AJAVariant::AJAVariant
AJAVariant(const uint16_t value)
Definition: variant.h:49
AJAVariant::SetUInt16
void SetUInt16(uint16_t value)
Definition: variant.h:209
AJA_VARIANT_UINT64
@ AJA_VARIANT_UINT64
Definition: variant.h:32
AJAVariant::GetInt16
int16_t GetInt16() const
Definition: variant.h:137
AJA_VARIANT_UINT32
@ AJA_VARIANT_UINT32
Definition: variant.h:30
AJAVariant::AJAVariant
AJAVariant(const float value)
Definition: variant.h:44
AJAVariant::GetUInt32
uint32_t GetUInt32() const
Definition: variant.h:155
AJAVariant::mBooleanValue
bool mBooleanValue
Definition: variant.h:315
AJAVariant::SetBool
void SetBool(bool value)
Definition: variant.h:179
AJAVariant::AJAVariant
AJAVariant(const uint64_t value)
Definition: variant.h:53
AJAVariant::mUInt8Value
uint8_t mUInt8Value
Definition: variant.h:319
AJA_VARIANT_INT64
@ AJA_VARIANT_INT64
Definition: variant.h:31
AJA_EXPORT
#define AJA_EXPORT
Definition: export.h:34
AJAVariant::GetFloat
float GetFloat() const
Definition: variant.h:113
AJAVariant::AJAVariant
AJAVariant(const int16_t value)
Definition: variant.h:48
AJAVariant::SetUInt8
void SetUInt8(uint8_t value)
Definition: variant.h:199
AJAVariant::AJAVariant
AJAVariant(const AJAVariant &other)
Definition: variant.h:58
AJAVariant::mInt64Value
int64_t mInt64Value
Definition: variant.h:324
AJAVariant::SetInt16
void SetInt16(int16_t value)
Definition: variant.h:204
AJA_VARIANT_UINT8
@ AJA_VARIANT_UINT8
Definition: variant.h:26
AJAVariant::AJAVariant
AJAVariant(const bool value)
Definition: variant.h:43
AJAVariant::mInt16Value
int16_t mInt16Value
Definition: variant.h:320
AJAVariant::AJAVariant
AJAVariant(const char *pStr, size_t len)
Definition: variant.h:55
AJAVariant::mInt32Value
int32_t mInt32Value
Definition: variant.h:322
AJAVariantList
std::vector< AJAVariant > AJAVariantList
Definition: variant.h:330
AJAVariant::AJAVariant
AJAVariant(const int32_t value)
Definition: variant.h:50
AJAVariant::GetString
const std::string & GetString() const
Definition: variant.h:173
AJAVariant::SetString
void SetString(const char *pStr, const size_t len)
Definition: variant.h:240
AJAVariant::AJAVariant
AJAVariant(const uint32_t value)
Definition: variant.h:51
AJAVariantType
AJAVariantType
The data types that AJAVariant supports.
Definition: variant.h:19
AJAVariant::SetDouble
void SetDouble(double value)
Definition: variant.h:189
AJAVariant::~AJAVariant
~AJAVariant()
Definition: variant.h:60
AJAVariant::mFloatValue
float mFloatValue
Definition: variant.h:316
AJAVariant::mDoubleValue
double mDoubleValue
Definition: variant.h:317
AJA_VARIANT_NONE
@ AJA_VARIANT_NONE
Definition: variant.h:21
AJA_VARIANT_UINT16
@ AJA_VARIANT_UINT16
Definition: variant.h:28
AJAVariant::SetUInt32
void SetUInt32(uint32_t value)
Definition: variant.h:219
AJAVariant
A simple Variant class.
Definition: variant.h:39
AJAVariant::mUInt16Value
uint16_t mUInt16Value
Definition: variant.h:321
AJAVariant::AJAVariant
AJAVariant(const double value)
Definition: variant.h:45
AJAVariant::GetUInt64
uint64_t GetUInt64() const
Definition: variant.h:167
AJAVariant::AJAVariant
AJAVariant(const int64_t value)
Definition: variant.h:52
AJAVariant::SetUInt64
void SetUInt64(uint64_t value)
Definition: variant.h:229
AJAVariant::mInt8Value
int8_t mInt8Value
Definition: variant.h:318
AJAVariant::AJAVariant
AJAVariant(const uint8_t value)
Definition: variant.h:47
AJA_VARIANT_BOOL
@ AJA_VARIANT_BOOL
Definition: variant.h:22
AJAVariant::AJAVariant
AJAVariant(const char *pStr)
Definition: variant.h:54
AJA_VARIANT_STRING
@ AJA_VARIANT_STRING
Definition: variant.h:33
AJAVariant::SetString
void SetString(const std::string &value)
Definition: variant.h:245
AJAVariant::GetUInt8
uint8_t GetUInt8() const
Definition: variant.h:131
AJAVariant::GetInt64
int64_t GetInt64() const
Definition: variant.h:161
AJAVariant::GetInt8
int8_t GetInt8() const
Definition: variant.h:125
AJAVariant::GetInt32
int32_t GetInt32() const
Definition: variant.h:149
AJAVariant::mUInt64Value
uint64_t mUInt64Value
Definition: variant.h:325
AJAVariant::mUInt32Value
uint32_t mUInt32Value
Definition: variant.h:323
AJA_VARIANT_INT8
@ AJA_VARIANT_INT8
Definition: variant.h:25
AJAVariant::SetInt8
void SetInt8(int8_t value)
Definition: variant.h:194
AJA_VARIANT_FLOAT
@ AJA_VARIANT_FLOAT
Definition: variant.h:23
AJAVariant::GetUInt16
uint16_t GetUInt16() const
Definition: variant.h:143
AJAVariant::GetBool
bool GetBool() const
Definition: variant.h:107
AJAVariant::AJAVariant
AJAVariant(const int8_t value)
Definition: variant.h:46
AJAVariant::SetInt32
void SetInt32(int32_t value)
Definition: variant.h:214
AJAVariant::AJAVariant
AJAVariant(const std::string &value)
Definition: variant.h:56
AJA_VARIANT_INT16
@ AJA_VARIANT_INT16
Definition: variant.h:27
AJAVariant::SetInt64
void SetInt64(int64_t value)
Definition: variant.h:224
AJAVariant::GetDouble
double GetDouble() const
Definition: variant.h:119
export.h
Declares system-dependent import/export macros and libraries.
AJAVariant::SetFloat
void SetFloat(float value)
Definition: variant.h:184