Beispiel #1
0
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;
}
Beispiel #2
0
CollectorMarker *CollectorMarker_newWithColor_(unsigned int color)
{
	CollectorMarker *self = CollectorMarker_new();
	self->color = color;
	return self;
}