X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8e08b761b0c5ecb6df295785b78f1f3637331887..9838b284443a889c6c629568011c8ce76cfbacd4:/contrib/include/wx/fl/garbagec.h diff --git a/contrib/include/wx/fl/garbagec.h b/contrib/include/wx/fl/garbagec.h index d710e9f7a3..5e3da01ef7 100644 --- a/contrib/include/wx/fl/garbagec.h +++ b/contrib/include/wx/fl/garbagec.h @@ -1,73 +1,92 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: No names yet. -// Purpose: Contrib. demo +// Name: garbagec.h +// Purpose: GarbageCollector class. // Author: Aleksandras Gluchovas (@Lithuania) // Modified by: // Created: ??/10/98 // RCS-ID: $Id$ // Copyright: (c) Aleksandras Gluchovas -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef __GARBAGEC_G__ #define __GARBAGEC_G__ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(__APPLE__) #pragma interface "garbagec.h" #endif #include "wx/list.h" +#include "wx/fl/fldefs.h" struct GCItem { - void* mpObj; - wxList mRefs; // references to other nodes + void* mpObj; + wxList mRefs; // references to other nodes }; -inline void* gc_node_to_obj( wxNode* pGCNode ) +inline void* gc_node_to_obj( wxObjectList::compatibility_iterator pGCNode ) { - return ( (GCItem*) (pGCNode->Data()) )->mpObj; + return ( (GCItem*) (pGCNode->GetData()) )->mpObj; } -// class implements extremely slow, but probably one of the most simple GC algorithms +/* +This class implements an extremely slow but simple garbage collection algorithm. +*/ -class GarbageCollector +class WXDLLIMPEXP_FL GarbageCollector { protected: - wxList mAllNodes; - wxList mRegularLst; - wxList mCycledLst; + wxList mAllNodes; + wxList mRegularLst; + wxList mCycledLst; - wxNode* FindItemNode( void* pForObj ); - void ResolveReferences(); + // Internal method for finding a node. + wxNode* FindItemNode( void* pForObj ); - wxNode* FindReferenceFreeItemNode(); - void RemoveReferencesToNode( wxNode* pItemNode ); - void DestroyItemList( wxList& lst ); + // Internal method for resolving references. + void ResolveReferences(); + + // Internal method for findind and freeing a node. + wxNode* FindReferenceFreeItemNode(); + + // Remove references to this node. + void RemoveReferencesToNode( wxNode* pItemNode ); + + // Destroys a list of items. + void DestroyItemList( wxList& lst ); public: - GarbageCollector() {} + // Default constructor. + GarbageCollector() {} + + // Destructor. + virtual ~GarbageCollector(); + + // Prepare data for garbage collection. + + virtual void AddObject( void* pObj, int refCnt = 1 ); + + // Prepare data for garbage collection. - virtual ~GarbageCollector(); + virtual void AddDependency( void* pObj, void* pDependsOnObj ); - // prepare data for GC alg. + // Executes garbage collection algorithm. - virtual void AddObject( void* pObj, int refCnt = 1 ); - virtual void AddDependency( void* pObj, void* pDependsOnObj ); + virtual void ArrangeCollection(); - // executes GC alg. + // Accesses the results of the algorithm. - virtual void ArrangeCollection(); + wxList& GetRegularObjects(); - // access results of the alg. + // Get cycled objects. - wxList& GetRegularObjects(); - wxList& GetCycledObjects(); + wxList& GetCycledObjects(); - // removes all data from GC + // Removes all data from the garbage collector. - void Reset(); + void Reset(); }; #endif /* __GARBAGEC_G__ */