Cleanup: comment line length (blenlib)
[blender.git] / source / blender / blenlib / BLI_link_utils.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * ***** END GPL LICENSE BLOCK *****
19  */
20
21 #ifndef __BLI_LINK_UTILS_H__
22 #define __BLI_LINK_UTILS_H__
23
24 /** \file BLI_link_utils.h
25  *  \ingroup bli
26  *  \brief Single link-list utility macros. (header only api).
27  *
28  * Use this api when the structure defines its own ``next`` pointer
29  * and a double linked list such as #ListBase isnt needed.
30  */
31
32 #define BLI_LINKS_PREPEND(list, link)  { \
33         CHECK_TYPE_PAIR(list, link); \
34         (link)->next = list; \
35         list = link; \
36 } (void)0
37
38 /* Use for append (single linked list, storing the last element). */
39 #define BLI_LINKS_APPEND(list, link)  { \
40         (link)->next = NULL; \
41         if ((list)->first) { \
42                 (list)->last->next = link; \
43         } \
44         else { \
45                 (list)->first = link; \
46         } \
47         (list)->last = link; \
48 } (void)0
49
50 /* Use for inserting after a certain element. */
51 #define BLI_LINKS_INSERT_AFTER(list, node, link)  { \
52         if ((node)->next == NULL) { \
53                 (list)->last = link; \
54         } \
55         (link)->next = (node)->next; \
56         (node)->next = link; \
57 } (void)0
58
59 #define BLI_LINKS_FREE(list)  { \
60         while (list) { \
61                 void *next = list->next; \
62                 MEM_freeN(list); \
63                 list = next; \
64         } \
65 } (void)0
66
67 #endif  /* __BLI_LINK_UTILS_H__ */