From 8aeb7f59e1da79411c02d1c502d4e7331733e2a0 Mon Sep 17 00:00:00 2001 From: Teddy Date: Thu, 15 Aug 2013 13:53:59 +0800 Subject: ... --- gc.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'gc.h') diff --git a/gc.h b/gc.h index 2d1c179..9f1aca6 100644 --- a/gc.h +++ b/gc.h @@ -44,6 +44,13 @@ extern GarbageCollector gc; gc.collect(); \ } while (0) +struct ObjEntry { + EvalObj *obj; + size_t gc_cnt; + ObjEntry *prev, *next; + ObjEntry(ObjEntry *prev, ObjEntry *next); +}; + class GarbageCollector { struct PendingEntry { @@ -52,18 +59,20 @@ class GarbageCollector { PendingEntry(EvalObj *obj, PendingEntry *next); }; - EvalObjSet joined; + ObjEntry *joined; PendingEntry *pending_list; size_t resolve_threshold; + size_t joined_size; public: + GarbageCollector(); void collect(); void cycle_resolve(); void force(); void expose(EvalObj *ptr); void set_resolve_threshold(size_t new_thres); - void join(EvalObj *ptr); + ObjEntry *join(EvalObj *ptr); void quit(EvalObj *ptr); size_t get_remaining(); EvalObj *attach(EvalObj *ptr); -- cgit v1.2.3