#ifndef UNDAR_LIST_H #define UNDAR_LIST_H #include "libc.h" typedef struct node_s Node; struct node_s { u32 size; struct node_s *next; }; typedef struct list_s List; struct list_s { Node *head; Node *tail; u32 count; }; typedef bool (*compare_fn)(void *data, void *target); typedef bool (*list_iter_fn)(void *data); List *List_init(Arena *arena); void *node_value(Node *n); void *List_push(Arena *arena, List *list, void *data, u32 data_size); void List_map(List *list, list_iter_fn func); void *List_find(List *list, compare_fn compare, void *target); void *List_get(List *list, u32 index); void List_set(List *list, u32 index, void *data, u32 size); #endif