1 #define COLLECTORMARKER_C 2 #include "CollectorMarker.h" 3 #undef COLLECTORMARKER_C 4 5 #include <assert.h> 6 CollectorMarker_check(CollectorMarker * self)7void 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)19CollectorMarker *CollectorMarker_new(void) 20 { 21 CollectorMarker *self = io_calloc(1, sizeof(CollectorMarker)); 22 return self; 23 } 24 CollectorMarker_newWithColor_(unsigned int color)25CollectorMarker *CollectorMarker_newWithColor_(unsigned int color) 26 { 27 CollectorMarker *self = CollectorMarker_new(); 28 self->color = color; 29 return self; 30 } 31 CollectorMarker_free(CollectorMarker * self)32void CollectorMarker_free(CollectorMarker *self) 33 { 34 io_free(self); 35 } 36 CollectorMarker_loop(CollectorMarker * self)37void CollectorMarker_loop(CollectorMarker *self) 38 { 39 self->prev = self; 40 self->next = self; 41 } 42 CollectorMarker_count(CollectorMarker * self)43int 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)59int CollectorMarker_colorSetIsEmpty(CollectorMarker *self) 60 { 61 return self->color != self->next->color; 62 } 63 64