make doc update
[io.git] / libs / garbagecollector / source / CollectorMarker.h
blobf265c9d7e192119cd855d7ea69ebcfc1727805a1
2 //metadoc CollectorMarker copyright Steve Dekorte 2002
3 //metadoc CollectorMarker license BSD revised
5 #ifndef COLLECTORMARKER_DEFINED
6 #define COLLECTORMARKER_DEFINED 1
8 #include "Common.h"
9 #include "List.h"
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
15 #if !defined(__MINGW32__) && defined(WIN32)
16 #if defined(BUILDING_COLLECTOR_DLL) || defined(BUILDING_IOVMALL_DLL)
17 #define COLLECTOR_API __declspec(dllexport)
18 #else
19 #define COLLECTOR_API __declspec(dllimport)
20 #endif
22 #else
23 #define COLLECTOR_API
24 #endif
26 typedef void (CollectorDoFunc)(void *);
28 typedef struct CollectorMarker CollectorMarker;
30 #define CollectorMarkerSansPointer \
31 CollectorMarker *prev; \
32 CollectorMarker *next; \
33 unsigned int color : 2;
36 #if !defined(COLLECTOROBJECTTYPE)
37 #define COLLECTOROBJECTTYPE void
38 #endif
41 typedef struct IoObjectData IoObjectData;
42 #define IoObjectDataDefined 1
44 struct CollectorMarker
46 CollectorMarkerSansPointer
47 IoObjectData *object;
50 #define COLLECTOR_REF_TYPE(Type) \
51 typedef struct \
52 { \
53 CollectorMarkerSansPointer; \
54 Type *object; \
55 } Type ## Ref;
57 #define CollectorMarker_setObject_(self, v) ((CollectorMarker *)self)->object = v;
58 #define CollectorMarker_object(self) (((CollectorMarker *)self)->object)
60 COLLECTOR_API CollectorMarker *CollectorMarker_new(void);
62 CollectorMarker *CollectorMarker_newWithColor_(unsigned int color);
63 COLLECTOR_API void CollectorMarker_free(CollectorMarker *self);
65 void CollectorMarker_loop(CollectorMarker *self);
66 void CollectorMarker_check(CollectorMarker *self);
68 void CollectorMarker_removeAndInsertAfter_(CollectorMarker *self, CollectorMarker *other);
69 void CollectorMarker_removeAndInsertBefore_(CollectorMarker *self, CollectorMarker *other);
70 void CollectorMarker_removeIfNeededAndInsertAfter_(CollectorMarker *self, CollectorMarker *other);
72 void CollectorMarker_remove(CollectorMarker *self);
73 int CollectorMarker_count(CollectorMarker *self);
74 int CollectorMarker_colorSetIsEmpty(CollectorMarker *self);
76 #define CollectorMarker_setColor_(self, c) ((CollectorMarker *)self)->color = c;
77 #define CollectorMarker_color(self) ((CollectorMarker *)self)->color;
79 #define CollectorMarker_num(self) (((CollectorMarker *)self)->num);
80 #define CollectorMarker_setNext_(self, v) ((CollectorMarker *)self)->next = v;
81 #define CollectorMarker_setPrev_(self, v) ((CollectorMarker *)self)->prev = v;
83 #define MARKER(v) ((CollectorMarker *)v)
85 #define COLLECTMARKER_FOREACH(self, v, code) \
86 { \
87 CollectorMarker *v = self->next; \
88 CollectorMarker *_next; \
89 unsigned int c = self->color; \
91 while (v->color == c) \
92 { \
93 _next = v->next; \
94 code; \
95 v = _next; \
96 } \
99 #include "CollectorMarker_inline.h"
101 #ifdef __cplusplus
103 #endif
104 #endif