1 #define COLLECTORMARKER_C
2 #include "CollectorMarker.h"
3 #undef COLLECTORMARKER_C
4 
5 #include <assert.h>
6 
CollectorMarker_check(CollectorMarker * self)7 void CollectorMarker_check(CollectorMarker *self)
8 {
9 	CollectorMarker *v = self;
10 
11 	while (v != self)
12 	{
13 		assert(v->next->prev == v);
14 		assert(v->prev->next == v);
15 		v = v->next;
16 	}
17 }
18 
CollectorMarker_new(void)19 CollectorMarker *CollectorMarker_new(void)
20 {
21 	CollectorMarker *self = io_calloc(1, sizeof(CollectorMarker));
22 	return self;
23 }
24 
CollectorMarker_newWithColor_(unsigned int color)25 CollectorMarker *CollectorMarker_newWithColor_(unsigned int color)
26 {
27 	CollectorMarker *self = CollectorMarker_new();
28 	self->color = color;
29 	return self;
30 }
31 
CollectorMarker_free(CollectorMarker * self)32 void CollectorMarker_free(CollectorMarker *self)
33 {
34 	io_free(self);
35 }
36 
CollectorMarker_loop(CollectorMarker * self)37 void CollectorMarker_loop(CollectorMarker *self)
38 {
39 	self->prev = self;
40 	self->next = self;
41 }
42 
CollectorMarker_count(CollectorMarker * self)43 int CollectorMarker_count(CollectorMarker *self)
44 {
45 	int count = 0;
46 	CollectorMarker *v = self->next;
47 	unsigned int c = self->color;
48 
49 	while (v->color == c)
50 	{
51 		CollectorMarker *next = v->next;
52 		v = next;
53 		count ++;
54 	}
55 
56 	return count;
57 }
58 
CollectorMarker_colorSetIsEmpty(CollectorMarker * self)59 int CollectorMarker_colorSetIsEmpty(CollectorMarker *self)
60 {
61 	return self->color != self->next->color;
62 }
63 
64