DarkPlaces
Game engine based on the Quake 1 engine by id Software, developed by LadyHavoc
 
com_list.h File Reference
#include <stddef.h>
#include "qtypes.h"
#include "qdefs.h"
+ Include dependency graph for com_list.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  llist_t
 

Macros

#define List_Entry(ptr, type, member)
 
#define List_Entry_Is_Head(pos, head, member)
 
#define List_First_Entry(ptr, type, member)
 
#define List_First_Entry_Or_Null(ptr, type, member)
 
#define List_For_Each(pos, head)
 
#define List_For_Each_Continue(pos, head)
 
#define List_For_Each_Entry(pos, head, type, member)
 
#define List_For_Each_Entry_Continue(pos, head, type, member)
 
#define List_For_Each_Entry_From(pos, head, type, member)
 
#define List_For_Each_Entry_Safe(pos, n, head, type, member)
 
#define List_For_Each_Entry_Safe_Continue(pos, n, head, type, member)
 
#define List_For_Each_Entry_Safe_From(pos, n, head, type, member)
 
#define List_For_Each_Prev(pos, head)
 
#define List_For_Each_Prev_Entry(pos, head, type, member)
 
#define List_For_Each_Prev_Entry_Continue(pos, head, type, member)
 
#define List_For_Each_Prev_Entry_From(pos, head, type, member)
 
#define List_For_Each_Prev_Entry_Safe(pos, n, head, type, member)
 
#define List_For_Each_Prev_Safe(pos, n, head)
 
#define List_For_Each_Safe(pos, n, head)
 
#define LIST_HEAD(name)
 
#define LIST_HEAD_INIT(name)
 
#define List_Last_Entry(ptr, type, member)
 
#define List_Next_Entry(pos, type, member)
 
#define List_Prepare_Entry(pos, head, type, member)
 
#define List_Prev_Entry(pos, type, member)
 
#define List_Safe_Reset_Next(pos, n, type, member)
 

Functions

static void __List_Add (llist_t *node, llist_t *prev, llist_t *next)
 
static void __List_Delete (llist_t *prev, llist_t *next)
 
static void __List_Delete_Node (llist_t *node)
 
static void __List_Splice (const llist_t *list, llist_t *prev, llist_t *next)
 
static void List_Add (llist_t *node, llist_t *head)
 
static void List_Add_Tail (llist_t *node, llist_t *head)
 
static void List_Bulk_Move_Tail (llist_t *head, llist_t *first, llist_t *last)
 
static void List_Create (llist_t *list)
 
static void List_Delete (llist_t *node)
 
static void List_Delete_Init (llist_t *node)
 
static qbool List_Is_Empty (const llist_t *list)
 
static qbool List_Is_First (llist_t *list, llist_t *start)
 
static qbool List_Is_Last (llist_t *list, llist_t *start)
 
static void List_Move (llist_t *list, llist_t *head)
 
static void List_Move_Tail (llist_t *list, llist_t *head)
 
static void List_Replace (llist_t *old, llist_t *_new)
 
static void List_Replace_Init (llist_t *old, llist_t *_new)
 
static void List_Rotate_Left (llist_t *head)
 
static void List_Rotate_To_Front (llist_t *list, llist_t *head)
 
static void List_Splice (const llist_t *list, llist_t *head)
 
static void List_Splice_Tail (const llist_t *list, llist_t *head)
 
static void List_Swap (llist_t *node1, llist_t *node2)
 

Macro Definition Documentation

◆ List_Entry

#define List_Entry ( ptr,
type,
member )
Value:
ContainerOf(ptr, type, member)
#define ContainerOf(ptr, type, member)
MSVC has a different name for several standard functions.
Definition common.h:46
GLenum type
Definition glquake.h:656

Definition at line 44 of file com_list.h.

Referenced by Cbuf_AddText(), Cbuf_Execute(), Cbuf_Execute_Deferred(), Cbuf_InsertText(), Cbuf_NodeGet(), Cmd_Defer_f(), and World_UnlinkAll().

◆ List_Entry_Is_Head

#define List_Entry_Is_Head ( pos,
head,
member )
Value:
(&pos->member == (head))

Definition at line 115 of file com_list.h.

115#define List_Entry_Is_Head(pos, head, member) \
116 (&pos->member == (head))

◆ List_First_Entry

#define List_First_Entry ( ptr,
type,
member )
Value:
List_Entry((ptr)->next, type, member)
#define List_Entry(ptr, type, member)
Definition com_list.h:44

Definition at line 50 of file com_list.h.

Referenced by _Mem_EmptyPool(), _Mem_FreePool(), and Curl_CancelAll().

◆ List_First_Entry_Or_Null

#define List_First_Entry_Or_Null ( ptr,
type,
member )
Value:
({ \
struct llist_s *head__ = (ptr); \
struct llist_s *pos__ = head__->next; \
pos__ != head__ ? List_Entry(pos__, type, member) : NULL; \
})
#define NULL
Definition qtypes.h:12

Definition at line 61 of file com_list.h.

61#define List_First_Entry_Or_Null(ptr, type, member) ({ \
62 struct llist_s *head__ = (ptr); \
63 struct llist_s *pos__ = head__->next; \
64 pos__ != head__ ? List_Entry(pos__, type, member) : NULL; \
65})

◆ List_For_Each

#define List_For_Each ( pos,
head )
Value:
for (pos = (head)->next; pos != (head); pos = pos->next)

Definition at line 82 of file com_list.h.

82#define List_For_Each(pos, head) \
83 for (pos = (head)->next; pos != (head); pos = pos->next)

◆ List_For_Each_Continue

#define List_For_Each_Continue ( pos,
head )
Value:
for (pos = pos->next; pos != (head); pos = pos->next)

Definition at line 88 of file com_list.h.

88#define List_For_Each_Continue(pos, head) \
89 for (pos = pos->next; pos != (head); pos = pos->next)

◆ List_For_Each_Entry

#define List_For_Each_Entry ( pos,
head,
type,
member )
Value:
for (pos = List_First_Entry(head, type, member); \
!List_Entry_Is_Head(pos, head, member); \
pos = List_Next_Entry(pos, type, member))
#define List_Entry_Is_Head(pos, head, member)
Definition com_list.h:115
#define List_First_Entry(ptr, type, member)
Definition com_list.h:50
#define List_Next_Entry(pos, type, member)
Definition com_list.h:70

Definition at line 121 of file com_list.h.

121#define List_For_Each_Entry(pos, head, type, member) \
122 for (pos = List_First_Entry(head, type, member); \
123 !List_Entry_Is_Head(pos, head, member); \
124 pos = List_Next_Entry(pos, type, member))

Referenced by _Mem_CheckSentinelsGlobal(), CheckPendingDownloads(), Cmd_Defer_f(), Curl_Clear_forthismap(), Curl_Find(), Curl_Frame(), Curl_GetDownloadInfo(), Curl_Info_f(), LHNET_OpenSocket_Connectionless(), Mem_IsAllocated(), Mem_PrintList(), Mem_PrintStats(), Sys_Sleep(), and World_EntitiesInBox().

◆ List_For_Each_Entry_Continue

#define List_For_Each_Entry_Continue ( pos,
head,
type,
member )
Value:
for (pos = List_Next_Entry(pos, type, member); \
!List_Entry_Is_Head(pos, head, member); \
pos = List_Next_Entry(pos, type, member))

Definition at line 143 of file com_list.h.

143#define List_For_Each_Entry_Continue(pos, head, type, member) \
144 for (pos = List_Next_Entry(pos, type, member); \
145 !List_Entry_Is_Head(pos, head, member); \
146 pos = List_Next_Entry(pos, type, member))

◆ List_For_Each_Entry_From

#define List_For_Each_Entry_From ( pos,
head,
type,
member )
Value:
for (; !List_Entry_Is_Head(pos, head, member); \
pos = List_Next_Entry(pos, type, member))

Definition at line 159 of file com_list.h.

159#define List_For_Each_Entry_From(pos, head, type, member) \
160 for (; !List_Entry_Is_Head(pos, head, member); \
161 pos = List_Next_Entry(pos, type, member))

◆ List_For_Each_Entry_Safe

#define List_For_Each_Entry_Safe ( pos,
n,
head,
type,
member )
Value:
for (pos = List_First_Entry(head, type, member), \
n = List_Next_Entry(pos, type, member); \
!List_Entry_Is_Head(pos, head, member); \
pos = n, n = List_Next_Entry(n, type, member))
#define n(x, y)

Definition at line 173 of file com_list.h.

173#define List_For_Each_Entry_Safe(pos, n, head, type, member) \
174 for (pos = List_First_Entry(head, type, member), \
175 n = List_Next_Entry(pos, type, member); \
176 !List_Entry_Is_Head(pos, head, member); \
177 pos = n, n = List_Next_Entry(n, type, member))

Referenced by Cbuf_Execute_Deferred(), Curl_Cancel_ToMemory(), LHNET_Read(), and LHNET_Shutdown().

◆ List_For_Each_Entry_Safe_Continue

#define List_For_Each_Entry_Safe_Continue ( pos,
n,
head,
type,
member )
Value:
for (pos = List_Next_Entry(pos, type, member), \
n = List_Next_Entry(pos, type, member); \
!List_Entry_Is_Head(pos, head, member); \
pos = n, n = List_Next_Entry(n, type, member))

Definition at line 182 of file com_list.h.

182#define List_For_Each_Entry_Safe_Continue(pos, n, head, type, member) \
183 for (pos = List_Next_Entry(pos, type, member), \
184 n = List_Next_Entry(pos, type, member); \
185 !List_Entry_Is_Head(pos, head, member); \
186 pos = n, n = List_Next_Entry(n, type, member))

◆ List_For_Each_Entry_Safe_From

#define List_For_Each_Entry_Safe_From ( pos,
n,
head,
type,
member )
Value:
for (n = List_Next_Entry(pos, type, member); \
!List_Entry_Is_Head(pos, head, member); \
pos = n, n = List_Next_Entry(n, type, member))

Definition at line 191 of file com_list.h.

191#define List_For_Each_Entry_Safe_From(pos, n, head, type, member) \
192 for (n = List_Next_Entry(pos, type, member); \
193 !List_Entry_Is_Head(pos, head, member); \
194 pos = n, n = List_Next_Entry(n, type, member))

◆ List_For_Each_Prev

#define List_For_Each_Prev ( pos,
head )
Value:
for (pos = (head)->prev; pos != (head); pos = pos->prev)

Definition at line 94 of file com_list.h.

94#define List_For_Each_Prev(pos, head) \
95 for (pos = (head)->prev; pos != (head); pos = pos->prev)

◆ List_For_Each_Prev_Entry

#define List_For_Each_Prev_Entry ( pos,
head,
type,
member )
Value:
for (pos = List_Last_Entry(head, type, member); \
!List_Entry_Is_Head(pos, head, member); \
pos = List_Prev_Entry(pos, type, member))
#define List_Last_Entry(ptr, type, member)
Definition com_list.h:56
#define List_Prev_Entry(pos, type, member)
Definition com_list.h:76

Definition at line 129 of file com_list.h.

129#define List_For_Each_Prev_Entry(pos, head, type, member) \
130 for (pos = List_Last_Entry(head, type, member); \
131 !List_Entry_Is_Head(pos, head, member); \
132 pos = List_Prev_Entry(pos, type, member))

◆ List_For_Each_Prev_Entry_Continue

#define List_For_Each_Prev_Entry_Continue ( pos,
head,
type,
member )
Value:
for (pos = List_Prev_Entry(pos, type, member); \
!List_Entry_Is_Head(pos, head, member); \
pos = List_Prev_Entry(pos, type, member))

Definition at line 151 of file com_list.h.

151#define List_For_Each_Prev_Entry_Continue(pos, head, type, member) \
152 for (pos = List_Prev_Entry(pos, type, member); \
153 !List_Entry_Is_Head(pos, head, member); \
154 pos = List_Prev_Entry(pos, type, member))

◆ List_For_Each_Prev_Entry_From

#define List_For_Each_Prev_Entry_From ( pos,
head,
type,
member )
Value:
for (; !List_Entry_Is_Head(pos, head, member); \
pos = List_Prev_Entry(pos, type, member))

Definition at line 166 of file com_list.h.

166#define List_For_Each_Prev_Entry_From(pos, head, type, member) \
167 for (; !List_Entry_Is_Head(pos, head, member); \
168 pos = List_Prev_Entry(pos, type, member))

◆ List_For_Each_Prev_Entry_Safe

#define List_For_Each_Prev_Entry_Safe ( pos,
n,
head,
type,
member )
Value:
for (pos = List_Last_Entry(head, type, member), \
n = List_Prev_Entry(pos, type, member); \
!List_Entry_Is_Head(pos, head, member); \
pos = n, n = List_Prev_Entry(n, type, member))

Definition at line 199 of file com_list.h.

199#define List_For_Each_Prev_Entry_Safe(pos, n, head, type, member) \
200 for (pos = List_Last_Entry(head, type, member), \
201 n = List_Prev_Entry(pos, type, member); \
202 !List_Entry_Is_Head(pos, head, member); \
203 pos = n, n = List_Prev_Entry(n, type, member))

◆ List_For_Each_Prev_Safe

#define List_For_Each_Prev_Safe ( pos,
n,
head )
Value:
for (pos = (head)->prev, n = pos->prev; \
pos != (head); \
pos = n, n = pos->prev)

Definition at line 107 of file com_list.h.

107#define List_For_Each_Prev_Safe(pos, n, head) \
108 for (pos = (head)->prev, n = pos->prev; \
109 pos != (head); \
110 pos = n, n = pos->prev)

◆ List_For_Each_Safe

#define List_For_Each_Safe ( pos,
n,
head )
Value:
for (pos = (head)->next, n = pos->next; pos != (head); \
pos = n, n = pos->next)

Definition at line 100 of file com_list.h.

100#define List_For_Each_Safe(pos, n, head) \
101 for (pos = (head)->next, n = pos->next; pos != (head); \
102 pos = n, n = pos->next)

◆ LIST_HEAD

#define LIST_HEAD ( name)
Value:
struct llist_s name = LIST_HEAD_INIT(name)
#define LIST_HEAD_INIT(name)
Definition com_list.h:36
const GLchar * name
Definition glquake.h:601

Definition at line 38 of file com_list.h.

38#define LIST_HEAD(name) \
39 struct llist_s name = LIST_HEAD_INIT(name)

◆ LIST_HEAD_INIT

#define LIST_HEAD_INIT ( name)
Value:
{ &(name), &(name) }

Definition at line 36 of file com_list.h.

◆ List_Last_Entry

#define List_Last_Entry ( ptr,
type,
member )
Value:
List_Entry((ptr)->prev, type, member)

Definition at line 56 of file com_list.h.

◆ List_Next_Entry

#define List_Next_Entry ( pos,
type,
member )
Value:
List_Entry((pos)->member.next, type, member)

Definition at line 70 of file com_list.h.

70#define List_Next_Entry(pos, type, member) \
71 List_Entry((pos)->member.next, type, member)

◆ List_Prepare_Entry

#define List_Prepare_Entry ( pos,
head,
type,
member )
Value:
((pos) ? : List_Entry(head, type, member))

Definition at line 137 of file com_list.h.

137#define List_Prepare_Entry(pos, head, type, member) \
138 ((pos) ? : List_Entry(head, type, member))

◆ List_Prev_Entry

#define List_Prev_Entry ( pos,
type,
member )
Value:
List_Entry((pos)->member.prev, type, member)

Definition at line 76 of file com_list.h.

76#define List_Prev_Entry(pos, type, member) \
77 List_Entry((pos)->member.prev, type, member)

◆ List_Safe_Reset_Next

#define List_Safe_Reset_Next ( pos,
n,
type,
member )
Value:
n = List_Next_Entry(pos, type, member)

Definition at line 208 of file com_list.h.

208#define List_Safe_Reset_Next(pos, n, type, member) \
209 n = List_Next_Entry(pos, type, member)

Function Documentation

◆ __List_Add()

static void __List_Add ( llist_t * node,
llist_t * prev,
llist_t * next )
inlinestatic

Definition at line 230 of file com_list.h.

231{
232 next->prev = node;
233 node->next = next;
234 node->prev = prev;
235 prev->next = node;
236}
struct llist_s * prev
Definition com_list.h:32
struct llist_s * next
Definition com_list.h:33

References llist_t::next, and llist_t::prev.

Referenced by List_Add(), and List_Add_Tail().

◆ __List_Delete()

static void __List_Delete ( llist_t * prev,
llist_t * next )
inlinestatic

Definition at line 257 of file com_list.h.

258{
259 next->prev = prev;
260 prev->next = next;
261}

References llist_t::next, and llist_t::prev.

Referenced by __List_Delete_Node().

◆ __List_Delete_Node()

static void __List_Delete_Node ( llist_t * node)
inlinestatic

Definition at line 266 of file com_list.h.

267{
268 __List_Delete(node->prev, node->next);
269}
static void __List_Delete(llist_t *prev, llist_t *next)
Definition com_list.h:257

References __List_Delete(), llist_t::next, and llist_t::prev.

Referenced by List_Delete(), List_Delete_Init(), List_Move(), and List_Move_Tail().

◆ __List_Splice()

static void __List_Splice ( const llist_t * list,
llist_t * prev,
llist_t * next )
inlinestatic

Definition at line 385 of file com_list.h.

386{
387 llist_t *first = list->next;
388 llist_t *last = list->prev;
389
390 first->prev = prev;
391 prev->next = first;
392
393 last->next = next;
394 next->prev = last;
395}
GLint first
Definition glquake.h:671

References first, llist_t::next, and llist_t::prev.

Referenced by List_Splice(), and List_Splice_Tail().

◆ List_Add()

static void List_Add ( llist_t * node,
llist_t * head )
inlinestatic

Definition at line 241 of file com_list.h.

242{
243 __List_Add(node, head, head->next);
244}
static void __List_Add(llist_t *node, llist_t *prev, llist_t *next)
Definition com_list.h:230

References __List_Add(), and llist_t::next.

Referenced by _Mem_Alloc(), Curl_Begin(), List_Move(), and List_Swap().

◆ List_Add_Tail()

static void List_Add_Tail ( llist_t * node,
llist_t * head )
inlinestatic

Definition at line 249 of file com_list.h.

250{
251 __List_Add(node, head->prev, head);
252}

References __List_Add(), and llist_t::prev.

Referenced by LHNET_OpenSocket_Connectionless(), LHNET_Write(), List_Move_Tail(), and World_InsertLinkBefore().

◆ List_Bulk_Move_Tail()

static void List_Bulk_Move_Tail ( llist_t * head,
llist_t * first,
llist_t * last )
inlinestatic

Definition at line 347 of file com_list.h.

348{
349 first->prev->next = last->next;
350 last->next->prev = first->prev;
351
352 head->prev->next = first;
353 first->prev = head->prev;
354
355 last->next = head;
356 head->prev = last;
357}

References first, llist_t::next, and llist_t::prev.

◆ List_Create()

static void List_Create ( llist_t * list)
inlinestatic

Definition at line 220 of file com_list.h.

221{
222 list->next = list->prev = list;
223}

References llist_t::next, and llist_t::prev.

Referenced by _Mem_AllocPool(), LHNET_Init(), and List_Replace_Init().

◆ List_Delete()

static void List_Delete ( llist_t * node)
inlinestatic

Definition at line 274 of file com_list.h.

275{
276 __List_Delete_Node(node);
277 node->next = node->prev = NULL;
278}
static void __List_Delete_Node(llist_t *node)
Definition com_list.h:266

References __List_Delete_Node(), llist_t::next, NULL, and llist_t::prev.

Referenced by _Mem_FreeBlock(), Curl_EndDownload(), LHNET_CloseSocket(), LHNET_Read(), LHNET_Shutdown(), and World_RemoveLink().

◆ List_Delete_Init()

static void List_Delete_Init ( llist_t * node)
inlinestatic

Definition at line 283 of file com_list.h.

284{
285 __List_Delete_Node(node);
286 node->next = node->prev = node;
287}

References __List_Delete_Node(), llist_t::next, and llist_t::prev.

Referenced by List_Swap().

◆ List_Is_Empty()

◆ List_Is_First()

static qbool List_Is_First ( llist_t * list,
llist_t * start )
inlinestatic

Definition at line 415 of file com_list.h.

416{
417 return list->prev == start;
418}

References llist_t::prev.

◆ List_Is_Last()

static qbool List_Is_Last ( llist_t * list,
llist_t * start )
inlinestatic

Definition at line 420 of file com_list.h.

421{
422 return list->next == start;
423}

References llist_t::next.

◆ List_Move()

static void List_Move ( llist_t * list,
llist_t * head )
inlinestatic

Definition at line 327 of file com_list.h.

328{
329 __List_Delete_Node(list);
330 List_Add(list, head);
331}
static void List_Add(llist_t *node, llist_t *head)
Definition com_list.h:241

References __List_Delete_Node(), and List_Add().

◆ List_Move_Tail()

static void List_Move_Tail ( llist_t * list,
llist_t * head )
inlinestatic

Definition at line 336 of file com_list.h.

337{
338 __List_Delete_Node(list);
339 List_Add_Tail(list, head);
340}
static void List_Add_Tail(llist_t *node, llist_t *head)
Definition com_list.h:249

References __List_Delete_Node(), and List_Add_Tail().

Referenced by Cbuf_Clear(), Cbuf_Execute(), Cbuf_Execute_Deferred(), Cbuf_LinkString(), Cmd_Defer_f(), List_Rotate_Left(), and List_Rotate_To_Front().

◆ List_Replace()

static void List_Replace ( llist_t * old,
llist_t * _new )
inlinestatic

Definition at line 292 of file com_list.h.

293{
294 _new->next = old->next;
295 _new->next->prev = _new;
296 _new->prev = old->prev;
297 _new->prev->next = _new;
298 old->next = old->prev = old;
299}

References llist_t::next, and llist_t::prev.

Referenced by List_Replace_Init(), and List_Swap().

◆ List_Replace_Init()

static void List_Replace_Init ( llist_t * old,
llist_t * _new )
inlinestatic

Definition at line 305 of file com_list.h.

306{
307 List_Replace(old, _new);
308 List_Create(old);
309}
static void List_Create(llist_t *list)
Definition com_list.h:220
static void List_Replace(llist_t *old, llist_t *_new)
Definition com_list.h:292

References List_Create(), and List_Replace().

◆ List_Rotate_Left()

static void List_Rotate_Left ( llist_t * head)
inlinestatic

Definition at line 363 of file com_list.h.

364{
365 llist_t *first;
366
367 if (!List_Is_Empty(head))
368 {
369 first = head->next;
370 List_Move_Tail(first, head);
371 }
372}
static void List_Move_Tail(llist_t *list, llist_t *head)
Definition com_list.h:336
static qbool List_Is_Empty(const llist_t *list)
Definition com_list.h:211

References first, List_Is_Empty(), List_Move_Tail(), and llist_t::next.

◆ List_Rotate_To_Front()

static void List_Rotate_To_Front ( llist_t * list,
llist_t * head )
inlinestatic

Definition at line 377 of file com_list.h.

378{
379 List_Move_Tail(head, list);
380}

References List_Move_Tail().

◆ List_Splice()

static void List_Splice ( const llist_t * list,
llist_t * head )
inlinestatic

Definition at line 400 of file com_list.h.

401{
402 if(!List_Is_Empty(list))
403 __List_Splice(list, head, head->next);
404}
static void __List_Splice(const llist_t *list, llist_t *prev, llist_t *next)
Definition com_list.h:385

References __List_Splice(), List_Is_Empty(), and llist_t::next.

Referenced by Cbuf_InsertText().

◆ List_Splice_Tail()

static void List_Splice_Tail ( const llist_t * list,
llist_t * head )
inlinestatic

Definition at line 409 of file com_list.h.

410{
411 if (!List_Is_Empty(list))
412 __List_Splice(list, head->prev, head);
413}

References __List_Splice(), List_Is_Empty(), and llist_t::prev.

Referenced by Cbuf_AddText().

◆ List_Swap()

static void List_Swap ( llist_t * node1,
llist_t * node2 )
inlinestatic

Definition at line 314 of file com_list.h.

315{
316 llist_t *pos = node2->prev;
317 List_Delete_Init(node2);
318 List_Replace(node1, node2);
319 if(pos == node1)
320 pos = node2;
321 List_Add(node1, pos);
322}
static void List_Delete_Init(llist_t *node)
Definition com_list.h:283

References List_Add(), List_Delete_Init(), List_Replace(), and llist_t::prev.