XenevaOS
Loading...
Searching...
No Matches
XenevaOS
BaseHdr
linux
list.h
Go to the documentation of this file.
1
2
#ifndef __LIST_H__
3
#define __LIST_H__
4
5
#include <
_null.h
>
6
7
struct
list_head
{
8
struct
list_head
*
next
, *
prev
;
9
};
10
11
#define LIST_HEAD_INIT(name) {&(name), &(name) }
12
#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name)
13
14
static
inline
void
INIT_LIST_HEAD(
struct
list_head
* list) {
15
list->
next
= list;
16
list->
prev
= list;
17
}
18
19
static
inline
int
list_empty(
const
struct
list_head
* head) {
20
return
head->
next
== head;
21
}
22
23
static
inline
void
__list_add(
struct
list_head
* new_,
struct
list_head
*
prev
,
struct
list_head
*
next
) {
24
next
->
prev
= new_;
25
new_->
next
=
next
;
26
new_->
prev
=
prev
;
27
prev
->
next
= new_;
28
}
29
30
static
inline
void
list_add(
struct
list_head
* new_,
struct
list_head
* head) {
31
__list_add(new_, head, head->
next
);
32
}
33
static
inline
void
list_add_tail(
struct
list_head
* new_,
struct
list_head
* head_) {
34
__list_add(new_, head_->
prev
, head_);
35
}
36
37
static
inline
void
__list_del(
struct
list_head
*
prev
,
struct
list_head
*
next
) {
38
next
->
prev
=
prev
;
39
prev
->
next
=
next
;
40
}
41
42
static
inline
void
list_del(
struct
list_head
*
entry
) {
43
__list_del(
entry
->prev,
entry
->next);
44
entry
->next =
NULL
;
45
entry
->prev =
NULL
;
46
}
47
48
static
inline
void
list_del_init(
struct
list_head
*
entry
) {
49
__list_del(
entry
->prev,
entry
->next);
50
INIT_LIST_HEAD(
entry
);
51
}
52
53
static
inline
void
list_move(
struct
list_head
* list,
struct
list_head
* head) {
54
__list_del(list->
prev
, list->
next
);
55
list_add(list, head);
56
}
57
58
static
inline
void
list_move_tail(
struct
list_head
* list,
struct
list_head
* head) {
59
__list_del(list->
prev
, list->
next
);
60
list_add_tail(list, head);
61
}
62
63
/* Iteration macros */
64
#define list_entry(ptr, type, member) \
65
container_of(ptr, type, member)
66
67
#define list_first_entry(ptr, type, member) \
68
list_entry((ptr)->next, type, member)
69
70
#define list_last_entry(ptr, type, member) \
71
list_entry((ptr)->prev, type, member)
72
73
#define list_next_entry(pos, member) \
74
list_entry((pos)->member.next, typeof(*(pos)), member)
75
76
#define list_for_each(pos, head) \
77
for (pos = (head)->next; pos != (head); pos = pos->next)
78
79
#define list_for_each_safe(pos, n, head) \
80
for (pos = (head)->next, n = pos->next; pos != (head); \
81
pos = n, n = pos->next)
82
83
#define list_for_each_entry(pos, head, member) \
84
for (pos = list_entry((head)->next, typeof(*pos), member); \
85
&pos->member != (head); \
86
pos = list_entry(pos->member.next, typeof(*pos), member))
87
88
#define list_for_each_entry_safe(pos, n, head, member) \
89
for (pos = list_entry((head)->next, typeof(*pos), member), \
90
n = list_entry(pos->member.next, typeof(*pos), member); \
91
&pos->member != (head); \
92
pos = n, n = list_entry(n->member.next, typeof(*pos), member))
93
94
#define list_for_each_entry_reverse(pos, head, member) \
95
for (pos = list_entry((head)->prev, typeof(*pos), member); \
96
&pos->member != (head); \
97
pos = list_entry(pos->member.prev, typeof(*pos), member))
98
99
#endif
_null.h
NULL
#define NULL
Definition
actypes.h:561
entry
void(* entry)(void *)
Definition
process.h:93
list_head
Definition
list.h:7
list_head::prev
struct list_head * prev
Definition
list.h:8
list_head::next
struct list_head * next
Definition
list.h:8
Generated by
1.9.8