FS2_Open
Open source remastering of the Freespace 2 engine
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
linklist.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) Volition, Inc. 1999. All rights reserved.
3
*
4
* All source code herein is the property of Volition, Inc. You may not sell
5
* or otherwise commercially exploit the source or things you created based on the
6
* source.
7
*
8
*/
9
10
11
12
#ifndef _LINKLIST_H
13
#define _LINKLIST_H
14
15
// Initializes a list of zero elements
16
#define list_init( head ) \
17
do { \
18
(head)->next = (head); \
19
(head)->prev = (head); \
20
} while (0)
21
22
// Inserts element onto the front of the list
23
#define list_insert( head, elem ) \
24
do { \
25
(elem)->next = (head)->next; \
26
(head)->next->prev = (elem); \
27
(head)->next = (elem); \
28
(elem)->prev = (head); \
29
} while (0)
30
31
// Inserts new_elem before elem
32
#define list_insert_before(elem, new_elem) \
33
do { \
34
(elem)->prev->next = (new_elem); \
35
(new_elem)->prev = (elem)->prev; \
36
(elem)->prev = (new_elem); \
37
(new_elem)->next = (elem); \
38
} while (0)
39
40
// Appends an element on to the tail of the list
41
#define list_append( head, elem ) \
42
do { \
43
(elem)->prev = (head)->prev; \
44
(elem)->next = (head); \
45
(head)->prev->next = (elem); \
46
(head)->prev = (elem); \
47
} while (0)
48
49
// Adds list b onto the end of list a
50
#define list_merge( a, b ) \
51
do { \
52
(a)->prev->next = (b)->next; \
53
(b)->next->prev = (a)->prev; \
54
(a)->prev = (b)->prev; \
55
(b)->prev->next = (a); \
56
} while (0)
57
58
// Removes an element from the list
59
#define list_remove( head, elem ) \
60
do { \
61
(elem)->prev->next = (elem)->next; \
62
(elem)->next->prev = (elem)->prev; \
63
(elem)->next = NULL; \
64
(elem)->prev = NULL; \
65
} while(0)
66
67
// Moves elem to be after head
68
#define list_move_append(head, elem) \
69
do { \
70
(elem)->prev->next = (elem)->next; \
71
(elem)->next->prev = (elem)->prev; \
72
(elem)->prev = (head)->prev; \
73
(elem)->next = (head); \
74
(head)->prev->next = (elem); \
75
(head)->prev = (elem); \
76
} while (0)
77
78
#define GET_FIRST(head) ((head)->next)
79
#define GET_LAST(head) ((head)->prev)
80
#define GET_NEXT(elem) ((elem)->next)
81
#define GET_PREV(elem) ((elem)->prev)
82
#define END_OF_LIST(head) (head)
83
#define NOT_EMPTY(head) ((head)->next != (head))
84
#define EMPTY(head) ((head)->next == (head))
85
86
#endif
code
globalincs
linklist.h
Generated on Sun May 1 2016 16:22:27 for FS2_Open by
1.8.10