From b7e1b35ff18a759a54e4033d04a3550499dd9fc1 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sun, 15 Jan 2012 19:25:03 +0100 Subject: add a simplified vlist type --- utils.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'utils.c') diff --git a/utils.c b/utils.c index ba31b64..0b80064 100644 --- a/utils.c +++ b/utils.c @@ -1,4 +1,5 @@ #include +#include #include "utils.h" int @@ -70,3 +71,42 @@ vlist_flush_all(struct vlist_tree *tree) tree->version++; vlist_flush(tree); } + + +void +__vlist_simple_init(struct vlist_simple_tree *tree, int offset) +{ + INIT_LIST_HEAD(&tree->list); + tree->version = 1; + tree->head_offset = offset; +} + +void +vlist_simple_delete(struct vlist_simple_tree *tree, struct vlist_simple_node *node) +{ + char *ptr; + + list_del(&node->list); + ptr = (char *) node - tree->head_offset; + free(ptr); +} + +void +vlist_simple_flush(struct vlist_simple_tree *tree) +{ + struct vlist_simple_node *n, *tmp; + + list_for_each_entry_safe(n, tmp, &tree->list, list) { + if (n->version == tree->version) + continue; + + vlist_simple_delete(tree, n); + } +} + +void +vlist_simple_flush_all(struct vlist_simple_tree *tree) +{ + tree->version++; + vlist_simple_flush(tree); +} -- cgit v1.2.3