#include #include void ordinary_list_new(struct ordinary_list *list, uint32_t limit) { list->head = NULL; list->tail = NULL; list->count = 0; list->limit = limit; } void ordinary_list_del(struct ordinary_list *list) { struct ordinary_node *at = list->head; while(at) { struct ordinary_node *next = at->next; free(at); at = next; } } static void ordinary_list_insert(struct ordinary_list *list, struct ordinary_node *node) { if(!list->head) { list->head = node; list->tail = node; } else if(list->head == list->tail) { list->tail = node; list->head->next = list->tail; list->tail->prev = list->head; } else { list->tail->next = node; node->prev = list->tail; list->tail = node; } if(list->limit) { list->count += 1; } } struct ordinary_node *ordinary_list_add(struct ordinary_list *list, void *val) { if(list->limit && list->count == list->limit) { return NULL; } struct ordinary_node *node = malloc(sizeof(struct ordinary_node)); if(!node) { return NULL; } node->prev = NULL; node->next = NULL; node->val = val; ordinary_list_insert(list, node); return node; }