SIBCNode.h

Go to the documentation of this file.
00001 //***************************************************************************************
00002 // File supervisor: Crosswalk team
00012 //***************************************************************************************
00013 
00014 //***************************************************************************************
00015 // Defines
00016 //***************************************************************************************
00017 #ifndef __CSIBCNode_H__
00018 #define __CSIBCNode_H__
00019 
00020 //***************************************************************************************
00021 // Includes
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 // CSIBCUserData | Base Class
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 // CSIBCNode | Base Class
00130 //***************************************************************************************
00131 
00138 class XSICOREEXPORT CSIBCNode
00139 {
00140 public:
00141 
00142     //***************************************************************************************
00143     // constructor/destructor
00144     //***************************************************************************************
00145 
00149     CSIBCNode();
00150 
00151     virtual ~CSIBCNode();
00152 
00153     //***************************************************************************************
00154     // debug and profiling functions
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     // properties
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     // methods
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