]> git.ipfire.org Git - thirdparty/gcc.git/blame_incremental - libobjc/objc-private/objc-list.h
Update copyright years.
[thirdparty/gcc.git] / libobjc / objc-private / objc-list.h
... / ...
CommitLineData
1/* Generic single linked list to keep various information
2 Copyright (C) 1993-2020 Free Software Foundation, Inc.
3 Contributed by Kresten Krab Thorup.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 3, or (at your option)
10any later version.
11
12GCC is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17Under Section 7 of GPL version 3, you are granted additional
18permissions described in the GCC Runtime Library Exception, version
193.1, as published by the Free Software Foundation.
20
21You should have received a copy of the GNU General Public License and
22a copy of the GCC Runtime Library Exception along with this program;
23see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
24<http://www.gnu.org/licenses/>. */
25
26#ifndef __GNU_OBJC_LIST_H
27#define __GNU_OBJC_LIST_H
28
29struct objc_list
30{
31 void *head;
32 struct objc_list *tail;
33};
34
35/* Return a cons cell produced from (head . tail). */
36static inline struct objc_list*
37list_cons (void* head, struct objc_list* tail)
38{
39 struct objc_list* cell;
40
41 cell = (struct objc_list*)objc_malloc (sizeof (struct objc_list));
42 cell->head = head;
43 cell->tail = tail;
44 return cell;
45}
46
47/* Remove the element at the head by replacing it by its
48 successor. */
49static inline void
50list_remove_head (struct objc_list** list)
51{
52 if ((*list)->tail)
53 {
54 /* Fetch next. */
55 struct objc_list* tail = (*list)->tail;
56
57 /* Copy next to list head. */
58 *(*list) = *tail;
59
60 /* Free next. */
61 objc_free (tail);
62 }
63 else
64 {
65 /* Inly one element in list. */
66 objc_free (*list);
67 (*list) = 0;
68 }
69}
70
71
72/* Map FUNCTION over all elements in LIST. */
73static inline void
74list_mapcar (struct objc_list* list, void(*function)(void*))
75{
76 while (list)
77 {
78 (*function) (list->head);
79 list = list->tail;
80 }
81}
82
83/* Free list (backwards recursive). */
84static inline void
85list_free (struct objc_list* list)
86{
87 if(list)
88 {
89 list_free (list->tail);
90 objc_free (list);
91 }
92}
93
94#endif /* not __GNU_OBJC_LIST_H */