You.i Engine
YiVariant.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_VARIANT_H_
3 #define _YI_VARIANT_H_
4 
5 #include "framework/YiPredef.h"
6 #include "framework/YiAny.h"
7 #include "utility/YiString.h"
8 
9 #include <glm/fwd.hpp>
10 
16 
34 {
35 public:
39  enum TYPE
40  {
57  };
58 
63  CYIVariant(const CYIVariant &rOther) : m_any(rOther.m_any) {}
65 
69  CYIVariant(float fValue);
70 
74  CYIVariant(const float pfValue[], uint32_t uCount);
75 
79  CYIVariant(const glm::vec3 &rvValue);
80 
84  CYIVariant(float fX, float fY, float fZ);
85 
89  CYIVariant(int32_t nValue);
90 
94  CYIVariant(const int32_t pnValue[], uint32_t uCount);
95 
99  CYIVariant(const glm::quat &rValue);
100 
104  CYIVariant(const CYIString &rsValue);
105 
106 
110  void Set(float fValue);
111 
115  void Set(const float pfValue[], uint32_t uCount);
116 
120  void Set(const glm::vec3 &rvValue);
121 
125  void Set(float fX, float fY, float fZ);
126 
130  void Set(int32_t nValue);
131 
135  void Set(const int32_t pnValue[], uint32_t uCount);
136 
140  void Set(const glm::quat &rValue);
141 
145  void Set(const CYIString &rsValue);
146 
150  void SetInvalid();
151 
155  float GetAsFloat() const;
156 
160  const float *GetAsFloatPointer(size_t *pSize = nullptr) const;
161 
165  glm::vec3 GetAsFloatVector() const;
166 
170  int32_t GetAsInt() const;
171 
175  const int32_t *GetAsIntPointer(size_t *pSize = nullptr) const;
176 
180  glm::quat GetAsQuaternion() const;
181 
185  CYIString GetAsString() const;
186 
190  bool IsValid() const;
191 
196  TYPE GetType() const;
197 
198  bool operator+=(const CYIVariant &rOther);
199  bool operator-=(const CYIVariant &rOther);
200  bool operator*=(const CYIVariant &rOther);
201  bool operator/=(const CYIVariant &rOther);
202  CYIVariant operator+(const CYIVariant &rOther) const;
203  CYIVariant operator-(const CYIVariant &rOther) const;
204  CYIVariant operator*(const CYIVariant &rOther) const;
205  CYIVariant operator/(const CYIVariant &rOther) const;
206 
210  CYIVariant LogOf() const;
211 
215  CYIVariant ExpOf() const;
216 
226  static void Lerp(const CYIVariant &start, const CYIVariant &end, float *pfPercentages, uint32_t uPercentageCount, CYIVariant &out_variant);
227 
231  int32_t GetApproximateSize() const;
232 
233 private:
234  friend bool operator==(const CYIVariant &rLHS, const CYIVariant &rRHS);
235  friend bool operator!=(const CYIVariant &rLHS, const CYIVariant &rRHS);
236 
237  CYIAny m_any;
238 };
239 
240 bool operator==(const CYIVariant &rLHS, const CYIVariant &rRHS);
241 bool operator!=(const CYIVariant &rLHS, const CYIVariant &rRHS);
242 
245 #endif // _YI_VARIANT_H_
Definition: YiVariant.h:50
glm::quat GetAsQuaternion() const
A container class for common data types.
Definition: YiVariant.h:33
CYIVariant(const CYIVariant &rOther)
Definition: YiVariant.h:63
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:35
static void Lerp(const CYIVariant &start, const CYIVariant &end, float *pfPercentages, uint32_t uPercentageCount, CYIVariant &out_variant)
Definition: YiVariant.h:44
CYIVariant operator-(const CYIVariant &rOther) const
Supported types: Int, Float and FloatVector.
float GetAsFloat() const
CYIString GetAsString() const
Definition: YiVariant.h:56
A class that holds instances of any type that is copy-constructible.
Definition: YiAny.h:77
const int32_t * GetAsIntPointer(size_t *pSize=nullptr) const
Definition: YiVariant.h:48
friend bool operator==(const CYIVariant &rLHS, const CYIVariant &rRHS)
Supported types: Int, String, Float, FloatVector and Quaternion.
Definition: YiVariant.h:42
CYIVariant operator+(const CYIVariant &rOther) const
Supported types: Int, String, Float and FloatVector.
~CYIVariant()
Definition: YiVariant.h:64
bool operator-=(const CYIVariant &rOther)
Supported types: Int, Float and FloatVector.
TYPE
Definition: YiVariant.h:39
bool operator*=(const CYIVariant &rOther)
Supported types: Int, Float and FloatVector.
Definition: YiVariant.h:52
CYIVariant operator*(const CYIVariant &rOther) const
Supported types: Int, Float and FloatVector.
CYIVariant()
Definition: YiVariant.h:62
void Set(float fValue)
int32_t GetAsInt() const
CYIVariant operator/(const CYIVariant &rOther) const
Supported types: Int, Float and FloatVector.
glm::vec3 GetAsFloatVector() const
int32_t GetApproximateSize() const
Definition: YiVariant.h:46
void SetInvalid()
CYIVariant LogOf() const
CYIVariant ExpOf() const
bool operator/=(const CYIVariant &rOther)
Supported types: Int, Float and FloatVector.
bool IsValid() const
bool operator+=(const CYIVariant &rOther)
Supported types: Int, String, Float and FloatVector.
const float * GetAsFloatPointer(size_t *pSize=nullptr) const
friend bool operator!=(const CYIVariant &rLHS, const CYIVariant &rRHS)
Supported types: Int, String, Float, FloatVector and Quaternion.
TYPE GetType() const
Definition: YiVariant.h:54