Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cStructElem.h
Go to the documentation of this file.
1 //
5 //
6 
7 #ifndef _INC_cStructElem_H
8 #define _INC_cStructElem_H
9 #ifndef NO_PRAGMA_ONCE
10 #pragma once
11 #endif
12 
13 #include "../GrayLibBase.h"
14 #include "../Variant/cVariantType.h"
17 
18 
19 namespace GrayLib
20 {
24  class cVariant;
25 
27  {
31 
32  public:
34  size_t m_offset;
35  UINT m_extra;
36 
37  public:
38  // get structure value.
39  inline void* GetValPtr(const void* pBaseInst) const noexcept
40  {
42  return(((BYTE*)const_cast<void*>(pBaseInst)) + m_offset);
43  }
44 
45  size_t get_TypeLength() const;
46  size_t GetDataLength(const void* pBaseInst) const;
47  COMPARE_t CompareVal(const void* pBase1, const void* pBase2) const;
48  COMPARE_t CompareVar(void* pBaseInst, const cVariant& vVal) const;
49 
50  int GetValInt(const void* pBaseInst) const;
51  cString GetValStr(const void* pBaseInst) const;
52  bool GetValVar(const void* pBaseInst, cVariant& vVal) const;
53 
54  bool SetValInt(void* pBaseInst, int iVal) const;
55  bool SetValStr(void* pBaseInst, cString sVal) const;
56  bool SetValVar(void* pBaseInst, const cVariant& vVal) const;
57 
58  HRESULT SetValCheck(void* pBaseInst, const cVariant& vVal) const;
59 
60  // Move the element. Read or Write.
61  HRESULT SerializeInput(cStreamInput& file, void* pBaseInst) const;
62  HRESULT SerializeOutput(cStreamOutput& file, const void* pBaseInst) const;
63  HRESULT Serialize(cStream& file, bool bModeWrite, void* pBaseInst) const
64  {
67  if (bModeWrite)
68  return SerializeOutput(file, pBaseInst);
69  else
70  return SerializeInput(file, pBaseInst);
71  }
72  HRESULT Serialize(cArchive& a, void* pBaseInst) const
73  {
74  if (a.IsStoring())
75  return SerializeOutput(a.ref_Out(), pBaseInst);
76  else
77  return SerializeInput(a.ref_Inp(), pBaseInst);
78  }
79 
80  HRESULT ScriptWrite(IScriptableSetter* pScript, const void* pBaseInst, const ATOMCHAR_t* pszPropName) const;
81  HRESULT ScriptRead(IScriptableGetter* pScript, void* pBaseInst, const ATOMCHAR_t* pszPropName) const;
82 
84  };
85 
86  class GRAYLIB_LINK cStructNamedElem // associate members of some class/structure with entries in the registry.
87  {
92 
93  public:
94  // StrT::k_LEN_MAX_KEY
97 
98  public:
99  operator const ATOMCHAR_t* () const noexcept // if we use cAtomRef for this we can't do static init!!
100  {
101  return m_pszKey;
102  }
103  const ATOMCHAR_t* get_Name() const noexcept
104  {
105  return m_pszKey;
106  }
107 
108  // get structure value.
109  void* GetValPtr(const void* pBaseInst) const
110  {
111  return m_elem.GetValPtr(pBaseInst);
112  }
113  bool GetValVar(const void* pBaseInst, cVariant& vVal) const
114  {
115  return(m_elem.GetValVar(pBaseInst, vVal));
116  }
117  bool SetValVar(void* pBaseInst, const cVariant& vVal) const
118  {
119  return(m_elem.SetValVar(pBaseInst, vVal));
120  }
121  HRESULT SetValCheck(void* pBaseInst, const cVariant& vVal) const
122  {
124  return(m_elem.SetValCheck(pBaseInst, vVal));
125  }
126 
127  HRESULT Serialize(cStream& file, bool bModeWrite, void* pBaseInst)
128  {
129  return m_elem.Serialize(file, bModeWrite, pBaseInst);
130  }
131  COMPARE_t Compare(const void* pBase1, const void* pBase2) const
132  {
133  return m_elem.CompareVal(pBase1, pBase2);
134  }
135 
136  // IScriptableSetter ------------------
137 
138  HRESULT ScriptWrite(IScriptableSetter* pScript, const void* pBaseInst) const
139  {
141  return m_elem.ScriptWrite(pScript, pBaseInst, m_pszKey);
142  }
143  HRESULT ScriptRead(IScriptableGetter* pScript, void* pBaseInst) const
144  {
146  return m_elem.ScriptRead(pScript, pBaseInst, m_pszKey);
147  }
148 
149  // Assumes an array of cStructNamedElem.
150 
151  const cStructNamedElem* FindArrayKey(const ATOMCHAR_t* pszKey, size_t iSizeElem) const;
152  void ScriptWriteArray(IScriptableSetter* pScript, const void* pBaseInst) const;
153  void ScriptReadArray(IScriptableGetter* pScript, void* pBaseInst) const;
154 
155  COMPARE_t CompareArray(const void* pBase1, const void* pBase2, size_t iSizeElem) const;
156  };
157 };
158 #endif // _INC_cStructElem_H
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cStructElem.h:27
HRESULT Serialize(cStream &file, bool bModeWrite, void *pBaseInst) const
Definition: cStructElem.h:63
HRESULT ScriptRead(IScriptableGetter *pScript, void *pBaseInst, const ATOMCHAR_t *pszPropName) const
Definition: cStructElem.cpp:405
UINT m_extra
m_extra for VARTYPE_StringConst = max size.
Definition: cStructElem.h:35
bool SetValVar(void *pBaseInst, const cVariant &vVal) const
Definition: cStructElem.cpp:95
size_t m_offset
The offset into the struct/class instance for this item.
Definition: cStructElem.h:34
VARTYPE_TYPE m_eVarType
effective type of the data in the mapped structure.
Definition: cStructElem.h:33
void * GetValPtr(const void *pBaseInst) const noexcept
Definition: cStructElem.h:39
UNITTEST_FRIEND(cStructElem)
HRESULT SetValCheck(void *pBaseInst, const cVariant &vVal) const
Definition: cStructElem.cpp:236
HRESULT ScriptWrite(IScriptableSetter *pScript, const void *pBaseInst, const ATOMCHAR_t *pszPropName) const
Definition: cStructElem.cpp:391
HRESULT Serialize(cArchive &a, void *pBaseInst) const
Definition: cStructElem.h:72
COMPARE_t CompareVal(const void *pBase1, const void *pBase2) const
Definition: cStructElem.cpp:77
bool GetValVar(const void *pBaseInst, cVariant &vVal) const
Definition: cStructElem.cpp:251
Definition: cStructElem.h:87
HRESULT Serialize(cStream &file, bool bModeWrite, void *pBaseInst)
Definition: cStructElem.h:127
bool GetValVar(const void *pBaseInst, cVariant &vVal) const
Definition: cStructElem.h:113
const ATOMCHAR_t * get_Name() const noexcept
Definition: cStructElem.h:103
void * GetValPtr(const void *pBaseInst) const
Definition: cStructElem.h:109
HRESULT ScriptWrite(IScriptableSetter *pScript, const void *pBaseInst) const
Definition: cStructElem.h:138
COMPARE_t Compare(const void *pBase1, const void *pBase2) const
Definition: cStructElem.h:131
const ATOMCHAR_t * m_pszKey
the key identifier for the data field. nullptr=last, May be cAtomRef?
Definition: cStructElem.h:95
bool SetValVar(void *pBaseInst, const cVariant &vVal) const
Definition: cStructElem.h:117
HRESULT SetValCheck(void *pBaseInst, const cVariant &vVal) const
Definition: cStructElem.h:121
HRESULT ScriptRead(IScriptableGetter *pScript, void *pBaseInst) const
Definition: cStructElem.h:143
cStructElem m_elem
(type,offset,extra)
Definition: cStructElem.h:96
Definition: cVariant.h:26
Definition: cArchive.h:20
cStreamOutput & ref_Out()
Definition: cArchive.h:62
bool IsStoring() const noexcept
Definition: cArchive.h:49
cStreamInput & ref_Inp()
Definition: cArchive.h:67
Definition: cStream.h:306
Definition: cStream.h:126
Definition: cStream.h:456
Definition: IScriptableObj.h:51
Definition: IScriptableObj.h:62
Definition: cMesh.h:22
VARTYPE_TYPE
< define types of structure/record elements. (COM uses VARTYPE=VARENUM for this) stored as BYTE
Definition: cVariantType.h:19
UNITTEST2_PREDEF(cQuadtree)
DECLARE_INTERFACE(IScriptableSetter)
int COMPARE_t
result of compare. 0=same, 1=a>b, -1=a<b
Definition: cValT.h:17
char ATOMCHAR_t
the char form (UNICODE or not) for an atom. (for symbolic names)
Definition: StrConst.h:15