summaryrefslogtreecommitdiff
path: root/vmwgfx/wsbm_util.h
diff options
context:
space:
mode:
Diffstat (limited to 'vmwgfx/wsbm_util.h')
-rw-r--r--vmwgfx/wsbm_util.h79
1 files changed, 79 insertions, 0 deletions
diff --git a/vmwgfx/wsbm_util.h b/vmwgfx/wsbm_util.h
new file mode 100644
index 0000000..2a2613b
--- /dev/null
+++ b/vmwgfx/wsbm_util.h
@@ -0,0 +1,79 @@
1/*
2 * This file is not copyrighted.
3 */
4
5#ifndef _WSBM_UTIL_H_
6#define _WSBM_UTIL_H_
7
8#include <stddef.h>
9
10#ifndef containerOf
11#define containerOf(__item, __type, __field) \
12 ((__type *)(((char *) (__item)) - offsetof(__type, __field)))
13#endif
14
15struct _WsbmListHead
16{
17 struct _WsbmListHead *prev;
18 struct _WsbmListHead *next;
19};
20
21#define WSBMINITLISTHEAD(__item) \
22 do{ \
23 (__item)->prev = (__item); \
24 (__item)->next = (__item); \
25 } while (0)
26
27#define WSBMLISTADD(__item, __list) \
28 do { \
29 (__item)->prev = (__list); \
30 (__item)->next = (__list)->next; \
31 (__list)->next->prev = (__item); \
32 (__list)->next = (__item); \
33 } while (0)
34
35#define WSBMLISTADDTAIL(__item, __list) \
36 do { \
37 (__item)->next = (__list); \
38 (__item)->prev = (__list)->prev; \
39 (__list)->prev->next = (__item); \
40 (__list)->prev = (__item); \
41 } while(0)
42
43#define WSBMLISTDEL(__item) \
44 do { \
45 (__item)->prev->next = (__item)->next; \
46 (__item)->next->prev = (__item)->prev; \
47 } while(0)
48
49#define WSBMLISTDELINIT(__item) \
50 do { \
51 (__item)->prev->next = (__item)->next; \
52 (__item)->next->prev = (__item)->prev; \
53 (__item)->next = (__item); \
54 (__item)->prev = (__item); \
55 } while(0)
56
57#define WSBMLISTFOREACH(__item, __list) \
58 for((__item) = (__list)->next; (__item) != (__list); (__item) = (__item)->next)
59
60#define WSBMLISTFOREACHPREV(__item, __list) \
61 for((__item) = (__list)->prev; (__item) != (__list); (__item) = (__item)->prev)
62
63#define WSBMLISTFOREACHSAFE(__item, __next, __list) \
64 for((__item) = (__list)->next, (__next) = (__item)->next; \
65 (__item) != (__list); \
66 (__item) = (__next), (__next) = (__item)->next)
67
68#define WSBMLISTFOREACHPREVSAFE(__item, __prev, __list) \
69 for((__item) = (__list)->prev, (__prev) = (__item->prev); \
70 (__item) != (__list); \
71 (__item) = (__prev), (__prev) = (__item)->prev)
72
73#define WSBMLISTENTRY(__item, __type, __field) \
74 containerOf(__item, __type, __field)
75
76#define WSBMLISTEMPTY(__item) \
77 ((__item)->next == (__item))
78
79#endif