Blender  V2.93
BLI_link_utils.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16 
17 #pragma once
18 
27 #define BLI_LINKS_PREPEND(list, link) \
28  { \
29  CHECK_TYPE_PAIR(list, link); \
30  (link)->next = list; \
31  list = link; \
32  } \
33  (void)0
34 
35 /* Use for append (single linked list, storing the last element). */
36 #define BLI_LINKS_APPEND(list, link) \
37  { \
38  (link)->next = NULL; \
39  if ((list)->first) { \
40  (list)->last->next = link; \
41  } \
42  else { \
43  (list)->first = link; \
44  } \
45  (list)->last = link; \
46  } \
47  (void)0
48 
49 /* Use for inserting after a certain element. */
50 #define BLI_LINKS_INSERT_AFTER(list, node, link) \
51  { \
52  if ((node)->next == NULL) { \
53  (list)->last = link; \
54  } \
55  (link)->next = (node)->next; \
56  (node)->next = link; \
57  } \
58  (void)0
59 
60 #define BLI_LINKS_FREE(list) \
61  { \
62  while (list) { \
63  void *next = (list)->next; \
64  MEM_freeN(list); \
65  list = next; \
66  } \
67  } \
68  (void)0