bond/include/lib/linked_list.h
2018-03-23 20:58:24 -04:00

57 lines
1.8 KiB
C

#ifndef LIB_LINKED_LIST_H
#define LIB_LINKED_LIST_H
#include "type.h"
struct linked_list_node
{
struct linked_list_node *prev;
struct linked_list_node *next;
};
struct linked_list
{
struct linked_list_node *head;
struct linked_list_node *tail;
};
/*
* Returns true if current list node == your node
* false otherwise
*/
void SXAPI lb_linked_list_init(struct linked_list *list);
int32 SXAPI lb_linked_list_size(struct linked_list *list);
void SXAPI lb_linked_list_push_front(struct linked_list *list, struct linked_list_node *node);
void SXAPI lb_linked_list_push_back(struct linked_list *list, struct linked_list_node *node);
struct linked_list_node *SXAPI lb_linked_list_pop_front(struct linked_list *list);
struct linked_list_node *SXAPI lb_linked_list_pop_back(struct linked_list *list);
void SXAPI lb_linked_list_insert(struct linked_list *list, int32 index, struct linked_list_node *node);
void SXAPI lb_linked_list_insert_ref(struct linked_list *list, struct linked_list_node *prev_node, struct linked_list_node *node);
struct linked_list_node *SXAPI lb_linked_list_remove(struct linked_list *list, int32 index);
struct linked_list_node *SXAPI lb_linked_list_remove_ref(struct linked_list *list, struct linked_list_node *node);
struct linked_list_node *SXAPI lb_linked_list_get(struct linked_list *list, int32 index);
struct linked_list_node *SXAPI lb_linked_list_next(struct linked_list_node *node);
struct linked_list_node *SXAPI lb_linked_list_prev(struct linked_list_node *node);
struct linked_list_node *SXAPI lb_linked_list_first(struct linked_list *list);
struct linked_list_node *SXAPI lb_linked_list_last(struct linked_list *list);
int32 SXAPI lb_linked_list_search(struct linked_list *list, struct linked_list_node *target,
callback_func equals);
#endif