Blender  V3.3
BLI_linklist.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2001-2002 NaN Holding BV. All rights reserved. */
3 
4 #pragma once
5 
10 #include "BLI_compiler_attrs.h"
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 struct BLI_mempool;
17 struct MemArena;
18 
19 typedef void (*LinkNodeFreeFP)(void *link);
20 typedef void (*LinkNodeApplyFP)(void *link, void *userdata);
21 
22 typedef struct LinkNode {
23  struct LinkNode *next;
24  void *link;
26 
33 typedef struct LinkNodePair {
36 
39 
42 
44 
49 void BLI_linklist_move_item(LinkNode **listp, int curr_index, int new_index) ATTR_NONNULL(1);
50 
54 void BLI_linklist_prepend_nlink(LinkNode **listp, void *ptr, LinkNode *nlink) ATTR_NONNULL(1, 3);
55 void BLI_linklist_prepend(LinkNode **listp, void *ptr) ATTR_NONNULL(1);
56 void BLI_linklist_prepend_arena(LinkNode **listp, void *ptr, struct MemArena *ma)
57  ATTR_NONNULL(1, 3);
58 void BLI_linklist_prepend_pool(LinkNode **listp, void *ptr, struct BLI_mempool *mempool)
59  ATTR_NONNULL(1, 3);
60 
61 /* Use #LinkNodePair to avoid full search. */
62 
66 void BLI_linklist_append_nlink(LinkNodePair *list_pair, void *ptr, LinkNode *nlink)
67  ATTR_NONNULL(1, 3);
68 void BLI_linklist_append(LinkNodePair *list_pair, void *ptr) ATTR_NONNULL(1);
69 void BLI_linklist_append_arena(LinkNodePair *list_pair, void *ptr, struct MemArena *ma)
70  ATTR_NONNULL(1, 3);
71 void BLI_linklist_append_pool(LinkNodePair *list_pair, void *ptr, struct BLI_mempool *mempool)
72  ATTR_NONNULL(1, 3);
73 
76  ATTR_NONNULL(1, 2);
77 void BLI_linklist_insert_after(LinkNode **listp, void *ptr) ATTR_NONNULL(1);
78 
79 void BLI_linklist_free(LinkNode *list, LinkNodeFreeFP freefunc);
80 void BLI_linklist_freeN(LinkNode *list);
81 void BLI_linklist_free_pool(LinkNode *list, LinkNodeFreeFP freefunc, struct BLI_mempool *mempool);
82 void BLI_linklist_apply(LinkNode *list, LinkNodeApplyFP applyfunc, void *userdata);
84  int (*cmp)(const void *, const void *)) ATTR_WARN_UNUSED_RESULT
85  ATTR_NONNULL(2);
87  int (*cmp)(void *, const void *, const void *),
88  void *thunk) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2);
89 
90 #define BLI_linklist_prepend_alloca(listp, ptr) \
91  BLI_linklist_prepend_nlink(listp, ptr, alloca(sizeof(LinkNode)))
92 #define BLI_linklist_append_alloca(list_pair, ptr) \
93  BLI_linklist_append_nlink(list_pair, ptr, alloca(sizeof(LinkNode)))
94 
95 #ifdef __cplusplus
96 }
97 #endif
#define ATTR_WARN_UNUSED_RESULT
#define ATTR_NONNULL(...)
SyclQueue void void size_t num_bytes void
LinkNode * last_node
Definition: BLI_linklist.h:34
LinkNode * list
Definition: BLI_linklist.h:34
void * link
Definition: BLI_linklist.h:24
struct LinkNode * next
Definition: BLI_linklist.h:23
PointerRNA * ptr
Definition: wm_files.c:3480