home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / contrib / include / wx / fl / garbagec.h < prev    next >
C/C++ Source or Header  |  2002-10-24  |  2KB  |  94 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        garbagec.h
  3. // Purpose:     GarbageCollector class.
  4. // Author:      Aleksandras Gluchovas (@Lithuania)
  5. // Modified by:
  6. // Created:     ??/10/98
  7. // RCS-ID:      $Id: garbagec.h,v 1.3.2.1 2002/10/24 11:21:34 JS Exp $
  8. // Copyright:   (c) Aleksandras Gluchovas
  9. // Licence:     wxWindows licence
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. #ifndef __GARBAGEC_G__
  13. #define __GARBAGEC_G__
  14.  
  15. #if defined(__GNUG__) && !defined(__APPLE__)
  16.     #pragma interface "garbagec.h"
  17. #endif
  18.  
  19. #include "wx/list.h"
  20. #include "wx/fl/fldefs.h"
  21.  
  22. struct GCItem
  23. {
  24.     void*      mpObj;
  25.     wxList    mRefs;   // references to other nodes
  26. };
  27.  
  28. inline void* gc_node_to_obj( wxNode* pGCNode )
  29. {
  30.     return ( (GCItem*) (pGCNode->Data()) )->mpObj;
  31. }
  32.  
  33. /*
  34. This class implements an extremely slow but simple garbage collection algorithm.
  35. */
  36.  
  37. class WXFL_DECLSPEC GarbageCollector
  38. {
  39. protected:
  40.     wxList mAllNodes;
  41.     wxList mRegularLst;
  42.     wxList mCycledLst;
  43.  
  44.         // Internal method for finding a node.
  45.     wxNode* FindItemNode( void* pForObj );
  46.  
  47.         // Internal method for resolving references.
  48.     void    ResolveReferences();
  49.  
  50.         // Internal method for findind and freeing a node.
  51.     wxNode* FindReferenceFreeItemNode();
  52.  
  53.         // Remove references to this node.
  54.     void    RemoveReferencesToNode( wxNode* pItemNode );
  55.  
  56.         // Destroys a list of items.
  57.     void    DestroyItemList( wxList& lst );
  58.  
  59. public:
  60.  
  61.         // Default constructor.
  62.     GarbageCollector() {}
  63.  
  64.         // Destructor.
  65.     virtual ~GarbageCollector();
  66.  
  67.         // Prepare data for garbage collection.
  68.  
  69.     virtual void AddObject( void* pObj, int refCnt = 1 );
  70.  
  71.         // Prepare data for garbage collection.
  72.  
  73.     virtual void AddDependency( void* pObj, void* pDependsOnObj );
  74.  
  75.         // Executes garbage collection algorithm.
  76.  
  77.     virtual void ArrangeCollection();
  78.  
  79.         // Accesses the results of the algorithm.
  80.  
  81.     wxList& GetRegularObjects();
  82.  
  83.         // Get cycled objects.
  84.  
  85.     wxList& GetCycledObjects();
  86.  
  87.         // Removes all data from the garbage collector.
  88.  
  89.     void Reset();
  90. };
  91.  
  92. #endif /* __GARBAGEC_G__ */
  93.  
  94.