First bad bad pass.
[cascardo/kernel/notes/.git] / 03.types / 4.list / text
1 #include <linux/list.h>
2
3 Lista duplamente encadeada: next e prev.
4 Apontando sempre pra uma list_head.
5 Uso de container_of. Evita o uso de um ponteiro. Facilita a alocação.
6 Uma lista vazia tem um head apontando pra si mesmo.
7
8 Declaração de head:
9 LIST_HEAD(head);
10
11 struct data {
12         ...
13         struct list_head l;
14         ...
15 };
16
17 INIT_LIST_HEAD(&data->l);
18
19 list_add(&data->l, &head);
20 list_add_tail(&data->l, &head);
21 list_del(&data->l);
22
23 list_empty(&head);
24
25 struct list_head *e;
26 list_entry(entry, struct data, l);
27 list_first_entry(&head, struct data, l);
28
29 Macros para iteração:
30
31 struct list_head *e;
32 list_for_each(e, &head) {
33         struct data *data = list_entry(e, struct data, l);
34 }
35
36 struct data *data;
37 list_for_each_entry(data, &head, l) {
38 }
39
40 list_for_each_safe (uso de list_delete)
41 construção while (list_empty) list_delete