2
* Copyright © 2012 Keith Packard <keithp@keithp.com>
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; version 2 of the License.
8
* This program is distributed in the hope that it will be useful, but
9
* WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
* General Public License for more details.
13
* You should have received a copy of the GNU General Public License along
14
* with this program; if not, write to the Free Software Foundation, Inc.,
15
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
19
public typedef list_t;
21
public typedef struct {
26
public void init(*list_t l) {
31
void add(*list_t entry, *list_t prev, *list_t next) {
38
void del(*list_t prev, *list_t next) {
43
public bool is_empty(*list_t head) {
44
return head->next == head;
47
public *list_t first(*list_t head) {
48
assert(!is_empty(head), "empty list");
52
public *list_t last(*list_t head) {
53
assert(!is_empty(head), "empty list");
57
public void insert(*list_t entry, *list_t head) {
58
add(entry, head, head->next);
61
public void append(*list_t entry, *list_t head) {
62
add(entry, head->prev, head);
65
public void remove(*list_t entry) {
66
del(entry->prev, entry->next);
70
public iterate(*list_t head, bool (*list_t) f) {
72
for (*list_t pos = head->next; pos != head; pos = next) {