Mercurial > MadButterfly
comparison src/tools.h @ 12:79e9edf4c00a
Add redraw manager
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Mon, 28 Jul 2008 17:45:36 +0800 |
parents | |
children | ed55009d96d3 |
comparison
equal
deleted
inserted
replaced
11:128af06c876c | 12:79e9edf4c00a |
---|---|
1 #ifndef __TOOLS_H_ | |
2 #define __TOOLS_H_ | |
3 | |
4 | |
5 typedef struct _elmpool elmpool_t; | |
6 | |
7 extern elmpool_t *elmpool_new(int elm_sz, int inc_num); | |
8 extern void *elmpool_elm_alloc(elmpool_t *pool); | |
9 extern void elmpool_elm_free(elmpool_t *pool, void *elm); | |
10 extern void elmpool_free(elmpool_t *pool); | |
11 | |
12 | |
13 #define STAILQ(type) \ | |
14 struct { \ | |
15 type *head; \ | |
16 type *tail; \ | |
17 } | |
18 #define STAILQ_INIT(q) \ | |
19 do { \ | |
20 (q).head = (q).tail = NULL; \ | |
21 } while(0) | |
22 #define STAILQ_HEAD(q) ((q).head) | |
23 #define STAILQ_TAIL(q) ((q).tail) | |
24 #define STAILQ_NEXT(type, field, elm) ((elm)->field) | |
25 #define STAILQ_INS(q, type, field, elm) \ | |
26 do { \ | |
27 (elm)->field = (q).head; \ | |
28 (q).head = elm; \ | |
29 if((q).tail == NULL) \ | |
30 (q).tail = elm; \ | |
31 } while(0) | |
32 #define STAILQ_INS_TAIL(q, type, field, elm) \ | |
33 do { \ | |
34 (elm)->field = NULL; \ | |
35 if((q).tail != NULL) \ | |
36 (q).tail->field = elm; \ | |
37 (q).tail = elm; \ | |
38 if((q).head == NULL) \ | |
39 (q).head = elm; \ | |
40 } while(0) | |
41 #define STAILQ_REMOVE(q, type, field, elm) \ | |
42 do { \ | |
43 if((elm) == (q).head) { \ | |
44 (q).head = (elm)->field; \ | |
45 if((q).head == NULL) \ | |
46 (q).tail = NULL; \ | |
47 } else { \ | |
48 type *_stailq_cur = (q).head; \ | |
49 while(_stailq_cur != NULL && \ | |
50 _stailq_cur->field != (elm)) \ | |
51 _stailq_cur = _stailq_cur->field; \ | |
52 if(_stailq_cur != NULL) { \ | |
53 _stailq_cur->field = elm; \ | |
54 if((q).tail == (elm)) \ | |
55 (q).tail = _stailq_cur; \ | |
56 } \ | |
57 } \ | |
58 } while(0) | |
59 | |
60 #endif /* __TOOLS_H_ */ |