00001
00002
00012
00013
00014
00015
00016
00017 #ifndef __CSIBCNode_H__
00018 #define __CSIBCNode_H__
00019
00020
00021
00022
00023
00024 #include <SIBCUtil.h>
00025 #include <SIBCArray.h>
00026 #include <SIBCString.h>
00027 #include <SIBCMatrix.h>
00028
00033 typedef void (*SI_ReleaseMethod) (void *in_pObjectToDelete);
00034
00035
00036
00037
00038
00039
00048 class XSICOREEXPORT CSIBCUserData
00049 {
00050 public:
00051
00055 CSIBCUserData()
00056 {
00057 m_pData = NULL;
00058 m_pReleaseMethod = (SI_ReleaseMethod)NULL;
00059 m_pUnused = NULL;
00060 };
00061
00070 CSIBCUserData
00071 (
00072 SI_Char *in_pName,
00073 SI_Void *in_pData,
00074 SI_ReleaseMethod in_pReleaseMethod
00075 )
00076 {
00077 m_Name.SetText(in_pName);
00078 m_pData = in_pData;
00079 m_pReleaseMethod = in_pReleaseMethod;
00080 m_pUnused = NULL;
00081 };
00082
00083 ~CSIBCUserData()
00084 {
00085 if(m_pReleaseMethod != NULL)
00086 m_pReleaseMethod(m_pData);
00087 };
00088
00092 CSIBCString &Name() { return m_Name; };
00093
00097 virtual void *GetData() { return m_pData; };
00098
00102 virtual void SetData(void *in_pData)
00103 {m_pData = in_pData;};
00104
00109 virtual SI_ReleaseMethod GetReleaseMethod()
00110 { return m_pReleaseMethod; };
00111
00116 virtual SI_Void SetReleaseMethod(SI_ReleaseMethod in_pReleaseMethod)
00117 { m_pReleaseMethod = in_pReleaseMethod; };
00118
00119 private:
00120 CSIBCString m_Name;
00121 SI_Void *m_pData;
00122 SI_ReleaseMethod m_pReleaseMethod;
00123 SI_Void *m_pUnused;
00124 };
00125
00126
00127
00128
00129
00130
00131
00138 class XSICOREEXPORT CSIBCNode
00139 {
00140 public:
00141
00142
00143
00144
00145
00149 CSIBCNode();
00150
00151 virtual ~CSIBCNode();
00152
00153
00154
00155
00156
00161 virtual void Dump();
00162
00170 virtual SI_UInt UsedMemory();
00171
00179 virtual SI_UInt AllocatedMemory();
00180
00184 virtual SI_UInt LocalSize();
00185
00186
00187
00188
00189
00193 CSIBCString &Name() { return m_Name; }
00194
00198 SI_UInt GetFlags() { return m_Flags; }
00199
00206 SI_Void SetFlags(SI_UInt in_lFlags)
00207 { m_Flags = in_lFlags; }
00208
00212 CSIBCArray < CSIBCUserData* > &UserDataList()
00213 { return m_UserDataArray;}
00214
00221 CSIBCUserData *FindUserData(SI_Char *in_pTag);
00222
00227 CSIBCUserData *GetUserData(SI_Int in_iIndex);
00228
00234 SI_Error AttachUserData(SI_Char *in_pTag, SI_Void *in_pData);
00235
00241 SI_Error RemoveUserData(SI_Char *in_pTag);
00242
00243
00244
00245
00246
00256 virtual CSIBCNode *Duplicate(CSIBCNode * i_pNode);
00257
00258
00259 protected:
00260
00261
00262 private:
00263 CSIBCString m_Name;
00264 CSIBCArray < CSIBCUserData* > m_UserDataArray;
00265 SI_UInt m_Flags;
00266 SI_Void *m_pUnused;
00267 };
00268
00269 #endif // CSIBCNode