#ifndef UNDAR_LIST_H #define UNDAR_LIST_H #include "libc.h" typedef struct node_s Node; struct node_s { struct node_s *next; }; typedef struct list_s List; struct list_s { Node *head; Node *tail; u32 count; }; typedef bool (*compare_fn)(const void *data, const void *target); typedef void (*list_iter_fn)(void *data); List *new_list(Arena *arena); void *node_value(Node *n); void *list_push(Arena *arena, List *list, void *data, u32 data_size); void list_foreach(List *list, list_iter_fn func); void *list_find(List *list, compare_fn compare, const void *target); void *list_get(List *list, u32 index); void list_set(List *list, u32 index, const void *data, u32 size); #endif