2 * Copyright 2003-2006, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
3 * Distributed under the terms of the MIT License.
9 #include "fssh_types.h"
12 /* This header defines a doubly-linked list. It differentiates between a link
14 * A link is what is put into and removed from a list, an item is the whole
15 * object that contains the link. The item doesn't have to be begin with a
16 * link; the offset to the link structure is given to init_list_etc(), so that
17 * list_get_next/prev_item() will work correctly.
18 * Note, the offset value is only needed for the *_item() functions. If the
19 * offset is 0, list_link and item are identical - if you use init_list(),
20 * you don't have to care about the difference between a link and an item.
27 typedef struct list_link list_link
;
29 /* The object that is put into the list must begin with these
30 * fields, but it doesn't have to be this structure.
44 extern void list_init(struct list
*list
);
45 extern void list_init_etc(struct list
*list
, int32_t offset
);
46 extern void list_add_link_to_head(struct list
*list
, void *_link
);
47 extern void list_add_link_to_tail(struct list
*list
, void *_link
);
48 extern void list_remove_link(void *_link
);
49 extern void *list_get_next_item(struct list
*list
, void *item
);
50 extern void *list_get_prev_item(struct list
*list
, void *item
);
51 extern void *list_get_last_item(struct list
*list
);
52 extern void list_add_item(struct list
*list
, void *item
);
53 extern void list_remove_item(struct list
*list
, void *item
);
54 extern void list_insert_item_before(struct list
*list
, void *before
, void *item
);
55 extern void *list_remove_head_item(struct list
*list
);
56 extern void *list_remove_tail_item(struct list
*list
);
57 extern void list_move_to_list(struct list
*sourceList
, struct list
*targetList
);
60 list_is_empty(struct list
*list
)
62 return list
->link
.next
== (list_link
*)list
;
66 list_get_first_item(struct list
*list
)
68 return list_get_next_item(list
, NULL
);
72 } // namespace FSShell
74 #endif /* _FSSH_LIST_H */