SIBCNode.h

00001 //***************************************************************************************
00002 //
00003 // File supervisor: Softimage 3D Games & 3D Bridge team
00004 //
00005 // (c) Copyright 1999-2002 Avid Technology, Inc. . All rights reserved.
00006 //
00007 // SIBCNode.h | Main header file for SIBCNode implementation
00008 //***************************************************************************************
00009 
00010 /****************************************************************************************
00011 THIS CODE IS PUBLISHED AS A SAMPLE ONLY AND IS PROVIDED "AS IS".
00012 IN NO EVENT SHALL SOFTIMAGE, AVID TECHNOLOGY, INC. AND/OR THEIR RESPECTIVE
00013 SUPPLIERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
00014 DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
00015 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
00016 CONNECTION WITH THE USE OR PERFORMANCE OF THIS CODE .
00017 
00018 COPYRIGHT NOTICE. Copyright © 1999-2002 Avid Technology Inc. . All rights reserved. 
00019 
00020 SOFTIMAGE is a registered trademark of Avid Technology Inc. or its subsidiaries 
00021 or divisions. Windows NT is a registered trademark of Microsoft Corp. All other
00022 trademarks contained herein are the property of their respective owners. 
00023 ****************************************************************************************/
00024 
00025 //***************************************************************************************
00026 // Defines
00027 //***************************************************************************************
00028 #ifndef __CSIBCNode_H__
00029 #define __CSIBCNode_H__
00030 
00031 //***************************************************************************************
00032 // Includes
00033 //***************************************************************************************
00034 
00035 #include <SIBCUtil.h>
00036 #include <SIBCArray.h>
00037 #include <SIBCString.h>
00038 #include <SIBCMatrix.h>
00039 
00044 typedef void (*SI_ReleaseMethod) (void *in_pObjectToDelete);
00045 
00046 
00047 //***************************************************************************************
00048 // CSIBCUserData | Base Class
00049 //***************************************************************************************
00050 
00052 
00058 class XSICOREEXPORT CSIBCUserData
00059 {
00060 public:
00061         
00065     CSIBCUserData() 
00066     {
00067         m_pData = NULL;
00068         m_pReleaseMethod = (SI_ReleaseMethod)NULL;
00069         m_pUnused = NULL;
00070     };
00071 
00080     CSIBCUserData
00081     (
00082         SI_Char             *in_pName,
00083         SI_Void             *in_pData,      
00084         SI_ReleaseMethod    in_pReleaseMethod
00085     )
00086     {
00087         m_Name.SetText(in_pName);
00088         m_pData = in_pData;
00089         m_pReleaseMethod = in_pReleaseMethod;
00090         m_pUnused = NULL;
00091     };
00092 
00093     ~CSIBCUserData() 
00094     {
00095         if(m_pReleaseMethod != NULL)
00096             m_pReleaseMethod(m_pData);
00097     };
00098 
00102     CSIBCString     &Name() { return m_Name; };
00103 
00107     virtual void    *GetData() { return m_pData; }; 
00108 
00112     virtual void    SetData(void *in_pData)
00113                     {m_pData = in_pData;};
00114 
00119     virtual SI_ReleaseMethod    GetReleaseMethod() 
00120                     { return m_pReleaseMethod; };
00121 
00126     virtual SI_Void SetReleaseMethod(SI_ReleaseMethod in_pReleaseMethod) 
00127                     { m_pReleaseMethod = in_pReleaseMethod; };
00128 
00129 private:        
00130     CSIBCString         m_Name;
00131     SI_Void             *m_pData;       
00132     SI_ReleaseMethod    m_pReleaseMethod;
00133     SI_Void             *m_pUnused;
00134 };
00135 
00136 
00137 
00138 //***************************************************************************************
00139 // CSIBCNode | Base Class
00140 //***************************************************************************************
00141 
00143 
00147 class XSICOREEXPORT CSIBCNode
00148 {
00149 public:
00150 
00151     //***************************************************************************************
00152     // constructor/destructor
00153     //***************************************************************************************
00154 
00158     CSIBCNode();
00159 
00160     virtual ~CSIBCNode();
00161 
00162     //***************************************************************************************
00163     // debug and profiling functions
00164     //***************************************************************************************
00165 
00170     virtual void Dump();
00171 
00179     virtual SI_UInt UsedMemory();
00180 
00188     virtual SI_UInt AllocatedMemory();
00189 
00193     virtual SI_UInt LocalSize();
00194 
00195     //***************************************************************************************
00196     // properties
00197     //***************************************************************************************   
00198 
00202     CSIBCString &Name() { return m_Name; }
00203 
00207     SI_UInt GetFlags() { return m_Flags; }
00208 
00215     SI_Void SetFlags(SI_UInt in_lFlags)
00216         { m_Flags = in_lFlags; }
00217 
00221     CSIBCArray < CSIBCUserData* > &UserDataList()
00222         { return m_UserDataArray;}
00223 
00230     CSIBCUserData *FindUserData(SI_Char *in_pTag);
00231 
00236     CSIBCUserData *GetUserData(SI_Int in_iIndex);
00237 
00247     SI_Error       AttachUserData(SI_Char *in_pTag, SI_Void *in_pData);
00248 
00254     SI_Error    RemoveUserData(SI_Char *in_pTag);
00255     
00256     //***************************************************************************************
00257     // methods
00258     //***************************************************************************************   
00259 
00269     virtual CSIBCNode *Duplicate(CSIBCNode * i_pNode);
00270         
00271     
00272 protected:
00273 
00274 
00275 private:
00276     CSIBCString                     m_Name;
00277     CSIBCArray < CSIBCUserData* >   m_UserDataArray;
00278     SI_UInt                         m_Flags;
00279     SI_Void                         *m_pUnused;
00280 };
00281 
00282 #endif // CSIBCNode