6 #ifndef _INC_cVariant_H
7 #define _INC_cVariant_H
18 typedef tagVARIANT VARIANT;
47 void InitVar(
VARTYPE_TYPE eVarType,
const void* pStr,
size_t iLen);
75 #define CTYPE_DEF(a,_TYPE,c,d,e,f,g,h) cVariant( _TYPE bVal );
83 ASSERT(eVarType == VARTYPE_UID || eVarType == VARTYPE_Color || eVarType == VARTYPE_HResult || eVarType == VARTYPE_TimeInt);
84 InitVar(eVarType, &uVal,
sizeof(uVal));
90 InitVar(eVarType, &uVal,
sizeof(uVal));
96 InitVar(eVarType, pvData, nLen);
105 m_eVarType = ref.m_eVarType;
115 size_t GetHeapStats(OUT
ITERATE_t& iAllocCount)
const;
123 return GetVarTypeDef(m_eVarType);
133 return get_VarTypeDef().isNumeric();
137 return get_VarTypeDef().isFloat();
141 return get_VarTypeDef().isString();
146 return get_VarTypeDef().isNumSigned();
150 return get_VarTypeDef().isStringA();
154 return get_VarTypeDef().isStringW();
158 return get_VarTypeDef().isTime();
164 return m_eVarType == VARTYPE_Array || m_eVarType == VARTYPE_ArrayT ;
169 return m_eVarType == VARTYPE_StringExp ;
173 return IsXObj(m_eVarType) ;
178 return m_eVarType == VARTYPE_HResult ;
181 size_t get_DataSize()
const;
182 const void* get_DataPtr()
const;
187 return(!Compare(vVar));
191 return(!Compare(vVar));
195 return(Compare(vVar));
202 return FAILED(m_u.m_HResult);
204 bool isEmptyVar()
const;
205 bool isZeroVar()
const;
219 void SetVarData(
VARTYPE_TYPE eVarType,
const void* pData,
size_t iLen);
223 #define VARIANT_DEF(a,b,c) b get_##a() const; \
227 VARIANT_DEF(StrCW,
const wchar_t*,
const wchar_t*);
241 VARIANT_DEF(Vector3, cVariantVector3<float>,
const float*);
244 #define CTYPE_DEF(a,_TYPE,c,d,e,f,g,h) _TYPE get_##a() const; \
245 void put_##a( _TYPE x );
260 #ifdef USE_LONG_AS_INT64
261 void put_Long(
signed long iVal );
262 signed long get_Long()
const;
263 void put_ULong(
unsigned long uVal );
264 unsigned long get_ULong()
const;
267 template<
typename _TYPE_CH>
270 void put_UID(
const IXObject* pXObj);
273 void put_Vector3(
float x,
float y,
float z);
277 void SetTimeIntNow();
278 void SetTimeDoubleNow();
281 void SetVarTypeSimplest(
bool bKeepFloat );
284 #ifdef USE_EXPRESSION
291 return SUPER_t::GetStrExpT(m_eVarType, pszStr, iLenMax, bInArray);
294 CY_t GetCY(
bool bAssumeNaked =
false, CY_t uValMul = k_CYMul)
const;
296 void SetBlobData(
const void* pData,
size_t nSize,
VARTYPE_TYPE eVarType = VARTYPE_Blob);
301 size_t GetBlobData(
void* pData,
size_t nSizeMax)
const;
305 #define VARIANT_OP(a,b,c) operator b() const { return( get_##a()); } \
306 const THIS_t& operator=( c x ) { put_##a( x ); return *this; }
313 #define CTYPE_DEF(a,_TYPE,c,d,e,f,g,h) VARIANT_OP(a,_TYPE,_TYPE)
347 return GetMapVar(pszName);
351 return MakeMapVar(pszName);
356 ITERATE_t MakeArraySize(
bool bBreakQuotes =
false);
360 bool IsArrayChild(
const cVariant& vVal)
const;
366 double get_ArrayRangeDouble()
const;
374 return GetArrayElement(
index);
384 return MakeArrayElement(
index);
391 #define VARIANT_ARRAY_TYPE(_NAME,_TYPE) \
392 void SetArray##_NAME( ITERATE_t index, _TYPE Val ) { MakeArrayElement(index).put_##_NAME(Val); } \
393 void AddArray##_NAME( _TYPE Val ) { MakeArrayElement(k_ITERATE_BAD).put_##_NAME(Val); }
409 #define CTYPE_DEF(a,_TYPE,c,d,e,f,g,h) VARIANT_ARRAY_TYPE(a,_TYPE)
413 #undef VARIANT_ARRAY_TYPE
434 HRESULT put_VARIANT(
const VARIANT& var);
435 HRESULT get_VARIANT(VARIANT& var);
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
#define FAILED(x)
Definition: HResult.h:30
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
UINT32 COLORREF
ABGR (high to low bits)
Definition: cVariantData.h:21
#define VARIANT_DEF(a, b, c)
Definition: cVariant.h:223
#define VARIANT_OP(a, b, c)
Definition: cVariant.h:305
#define VARIANT_ARRAY_TYPE(_NAME, _TYPE)
Definition: cVariant.h:391
Definition: cVarMap.h:109
Definition: cVariantData.h:80
Definition: cVariantData.h:56
Definition: cVariantData.h:145
union GrayLib::cVariantData::@61 m_u
Definition: cVarMap.h:248
Definition: cVariantType.h:46
Definition: cVariant.h:26
static const cVariant k_VarNULL
VARTYPE_NoType isNoType()
Definition: cVariant.h:39
StrLen_t GetStrExpUnk(ATOMCHAR_t *pszStr, StrLen_t iLenMax, bool bInArray=false) const
Definition: cVariant.h:288
THIS_t & operator[](const ATOMCHAR_t *pszName)
Definition: cVariant.h:349
cStringT< _TYPE_CH > get_StrT() const
bool isHResult() const noexcept
Definition: cVariant.h:175
void SetMove(THIS_t &ref)
Definition: cVariant.h:325
bool isArray() const noexcept
Definition: cVariant.h:161
bool isTime() const noexcept
a time stamp?
Definition: cVariant.h:156
cStringW get_StrW() const
Definition: cVariantStr.cpp:203
cVariant get_VarExpEval() const
bool isVarTypeFloat() const noexcept
Definition: cVariant.h:135
THIS_t & operator[](ITERATE_t index)
Definition: cVariant.h:382
void AddArrayUID(const IXObject *pObj)
Definition: cVariant.h:416
bool isNoType() const noexcept
Definition: cVariant.h:126
void AddArrayElement(const THIS_t &vVal)
Definition: cVariant.h:378
bool isStringA() const noexcept
UTF8 format string. char*.
Definition: cVariant.h:148
const cVariantTypeDef & get_VarTypeDef() const noexcept
Definition: cVariant.h:121
cVariant(THIS_t &&ref) noexcept
Definition: cVariant.h:102
UNITTEST_FRIEND(cVariant)
bool isVarTypeNumeric() const noexcept
Definition: cVariant.h:131
bool isNumSigned() const noexcept
Definition: cVariant.h:144
VARTYPE_TYPE get_VarType() const noexcept
Definition: cVariant.h:117
cVariant() noexcept
Definition: cVariant.h:53
int get_Int() const
Definition: cVariant.h:255
cStringA get_StrA() const
Definition: cVariantStr.cpp:153
bool isXObj() const noexcept
Definition: cVariant.h:171
void put_Int(int nVal)
Definition: cVariant.h:251
cVariant(VARTYPE_TYPE eVarType, UINT32 uVal)
Definition: cVariant.h:79
~cVariant()
Definition: cVariant.h:110
bool isHResultError() const
Definition: cVariant.h:198
const THIS_t & operator[](const ATOMCHAR_t *pszName) const
Definition: cVariant.h:345
cVariant(VARTYPE_TYPE eVarType, const void *pvData, size_t nLen=0)
Definition: cVariant.h:92
bool isStringExp() const noexcept
Definition: cVariant.h:166
const THIS_t & operator[](ITERATE_t index) const
Definition: cVariant.h:372
void SetNoType()
empty example of the type.
Definition: cVariant.h:208
const THIS_t & operator=(const THIS_t &vVal)
Definition: cVariant.h:319
cVariant(const THIS_t &vVal)
Definition: cVariant.h:98
bool isVarTypeString() const noexcept
Definition: cVariant.h:139
void SetClear()
Definition: cVariant.h:213
HRESULT put_StrExpEval(const ATOMCHAR_t *pStrExp)
cVariant(VARTYPE_TYPE eVarType, UINT64 uVal)
Definition: cVariant.h:86
bool isStringW() const noexcept
UNICODE format string. wchar_t*.
Definition: cVariant.h:152
bool IsEqualTo(const THIS_t &vVar) const
Definition: cVariant.h:185
void put_Blob(const cHeapBlock &b, VARTYPE_TYPE eVarType=VARTYPE_Blob)
Definition: cVariant.h:297
VARTYPE_TYPE m_eVarType
type for cVariantData. VT_NULL or VARTYPE (for COM). really held in a single BYTE
Definition: cVariant.h:42
Definition: cArchive.h:20
void * get_Data() const noexcept
Definition: cHeap.h:363
size_t get_DataSize() const noexcept
Definition: cMem.h:344
Definition: cRefPtr.h:225
Definition: cStream.h:126
Definition: cTimeDouble.h:21
< similar to the MFC CTime and cTimeSpan, not as accurate or large ranged as COleDateTime
Definition: cTimeInt.h:101
Definition: IXObject.h:46
VARTYPE_TYPE
< define types of structure/record elements. (COM uses VARTYPE=VARENUM for this) stored as BYTE
Definition: cVariantType.h:19
@ VARTYPE_NoType
Definition: cVariantType.h:24
UNITTEST2_PREDEF(cQuadtree)
class __DECL_IMPORT cVariant
Definition: cJSONWriter.h:19
HASHCODE32_t UID_t
Sort of the same as a HASHCODE_t. not the same as UIDINDEX_t.
Definition: cUID.h:18
int COMPARE_t
result of compare. 0=same, 1=a>b, -1=a<b
Definition: cValT.h:17
int StrLen_t
the length of a string in chars (bytes for UTF8, wchar_t for UNICODE). or offset in characters....
Definition: StrConst.h:32
template class GRAYCORE_LINK cStringT< wchar_t >
Definition: cString.cpp:652
int ITERATE_t
like size_t but signed
Definition: Index.h:28
cStringT< wchar_t > cStringW
Definition: cString.h:634
cStringT< char > cStringA
Definition: cString.h:635
time_t TIMESEC_t
absolute seconds since January 1, 1970. (GMT?)(signed) NOTE: Changing to __time64_t just adds more ra...
Definition: cTimeUnits.h:23
char ATOMCHAR_t
the char form (UNICODE or not) for an atom. (for symbolic names)
Definition: StrConst.h:15
char GChar_t
My version of TCHAR, _TCHAR.
Definition: StrConst.h:26
const ITERATE_t k_ITERATE_BAD
Definition: Index.h:30
bool operator!=(const cTimeDouble &dt1, const cTimeDouble &dt2)
Definition: cTimeDouble.h:254
bool operator==(const cTimeDouble &dt1, const cTimeDouble &dt2)
Definition: cTimeDouble.h:250
cStringT< GChar_t > cString
Definition: cString.h:636
uint16 index
Definition: sample3.cpp:29
Definition: cDebugAssert.h:29
Definition: IUnknown.h:34