bond/include/lib/linked_list.h

56 lines
1.7 KiB
C
Raw Normal View History

2018-01-26 08:43:22 +00:00
#ifndef _LIB_LINKED_LIST_H_
#define _LIB_LINKED_LIST_H_
2017-02-01 03:26:08 +00:00
2018-01-26 08:43:22 +00:00
#include "type.h"
2017-02-01 03:26:08 +00:00
typedef struct _linked_list_node_t
{
2018-02-18 04:06:57 +00:00
struct _linked_list_node_t *prev;
struct _linked_list_node_t *next;
2017-02-01 03:26:08 +00:00
} linked_list_node_t;
typedef struct _linked_list_t
{
2018-02-18 04:06:57 +00:00
linked_list_node_t *head;
linked_list_node_t *tail;
2017-02-01 03:26:08 +00:00
} linked_list_t;
/*
* Returns true if current list node == your node
* false otherwise
*/
void KABI lb_linked_list_init(linked_list_t *list);
int32_t KABI lb_linked_list_size(linked_list_t *list);
void KABI lb_linked_list_push_front(linked_list_t *list, linked_list_node_t *node);
void KABI lb_linked_list_push_back(linked_list_t *list, linked_list_node_t *node);
linked_list_node_t *KABI lb_linked_list_pop_front(linked_list_t *list);
linked_list_node_t *KABI lb_linked_list_pop_back(linked_list_t *list);
void KABI lb_linked_list_insert(linked_list_t *list, int32_t index, linked_list_node_t *node);
void KABI lb_linked_list_insert_ref(linked_list_t *list, linked_list_node_t *prev_node, linked_list_node_t *node);
linked_list_node_t *KABI lb_linked_list_remove(linked_list_t *list, int32_t index);
linked_list_node_t *KABI lb_linked_list_remove_ref(linked_list_t *list, linked_list_node_t *node);
linked_list_node_t *KABI lb_linked_list_get(linked_list_t *list, int32_t index);
linked_list_node_t *KABI lb_linked_list_next(linked_list_node_t *node);
linked_list_node_t *KABI lb_linked_list_prev(linked_list_node_t *node);
linked_list_node_t *KABI lb_linked_list_first(linked_list_t *list);
linked_list_node_t *KABI lb_linked_list_last(linked_list_t *list);
int32_t KABI lb_linked_list_search(linked_list_t *list, linked_list_node_t *target,
callback_func_t equals);
#endif