#ifndef _FSSH_LIST_H
#define _FSSH_LIST_H
#include "fssh_types.h"
namespace FSShell {
typedef struct list_link list_link;
struct list_link {
list_link *next;
list_link *prev;
};
struct list {
list_link link;
int32_t offset;
};
extern void list_init(struct list *list);
extern void list_init_etc(struct list *list, int32_t offset);
extern void list_add_link_to_head(struct list *list, void *_link);
extern void list_add_link_to_tail(struct list *list, void *_link);
extern void list_remove_link(void *_link);
extern void *list_get_next_item(struct list *list, void *item);
extern void *list_get_prev_item(struct list *list, void *item);
extern void *list_get_last_item(struct list *list);
extern void list_add_item(struct list *list, void *item);
extern void list_remove_item(struct list *list, void *item);
extern void list_insert_item_before(struct list *list, void *before, void *item);
extern void *list_remove_head_item(struct list *list);
extern void *list_remove_tail_item(struct list *list);
extern void list_move_to_list(struct list *sourceList, struct list *targetList);
static inline bool
list_is_empty(struct list *list)
{
return list->link.next == (list_link *)list;
}
static inline void *
list_get_first_item(struct list *list)
{
return list_get_next_item(list, NULL);
}
}
#endif