Collector *Collector_new(void) { Collector *self = (Collector *)io_calloc(1, sizeof(Collector)); self->retainedValues = List_new(); self->whites = CollectorMarker_new(); self->grays = CollectorMarker_new(); self->blacks = CollectorMarker_new(); self->freed = CollectorMarker_new(); CollectorMarker_loop(self->whites); CollectorMarker_removeIfNeededAndInsertAfter_(self->grays, self->whites); CollectorMarker_removeIfNeededAndInsertAfter_(self->blacks, self->grays); CollectorMarker_removeIfNeededAndInsertAfter_(self->freed, self->blacks); // important to set colors *after* inserts, since inserts set colors CollectorMarker_setColor_(self->whites, COLLECTOR_INITIAL_WHITE); CollectorMarker_setColor_(self->blacks, COLLECTOR_INITIAL_BLACK); CollectorMarker_setColor_(self->grays, COLLECTOR_GRAY); CollectorMarker_setColor_(self->freed, COLLECTOR_FREE); Collector_setSafeModeOn_(self, 1); self->allocated = 0; self->allocatedSweepLevel = 3000; self->allocatedStep = 1.1f; self->marksPerAlloc = 2; self->clocksUsed = 0; Collector_check(self); return self; }
CollectorMarker *CollectorMarker_newWithColor_(unsigned int color) { CollectorMarker *self = CollectorMarker_new(); self->color = color; return self; }