/////////////////////////////////////////////////////////////////////////////
-// 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__ */