vlist is now part of libubox
authorFelix Fietkau <nbd@openwrt.org>
Sat, 26 May 2012 15:56:41 +0000 (17:56 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Sat, 26 May 2012 15:56:41 +0000 (17:56 +0200)
utils.c
utils.h

diff --git a/utils.c b/utils.c
index 0894c65dff1130adbe3dcf2ea290cc2728c70b8d..65109d7b262ef82837dbfb2912922c4f036a3956 100644 (file)
--- a/utils.c
+++ b/utils.c
 #include <stdlib.h>
 #include "utils.h"
 
-void
-vlist_init(struct vlist_tree *tree, avl_tree_comp cmp, vlist_update_cb update)
-{
-       tree->update = update;
-       tree->version = 1;
-
-       avl_init(&tree->avl, cmp, 0, tree);
-}
-
-void
-vlist_delete(struct vlist_tree *tree, struct vlist_node *node)
-{
-       if (!tree->no_delete)
-               avl_delete(&tree->avl, &node->avl);
-       tree->update(tree, NULL, node);
-}
-
-void
-vlist_add(struct vlist_tree *tree, struct vlist_node *node, void *key)
-{
-       struct vlist_node *old_node = NULL;
-       struct avl_node *anode;
-
-       node->avl.key = key;
-       node->version = tree->version;
-
-       anode = avl_find(&tree->avl, key);
-       if (anode) {
-               old_node = container_of(anode, struct vlist_node, avl);
-               if (tree->keep_old || tree->no_delete) {
-                       old_node->version = tree->version;
-                       goto update_only;
-               }
-
-               avl_delete(&tree->avl, anode);
-       }
-
-       avl_insert(&tree->avl, &node->avl);
-
-update_only:
-       tree->update(tree, node, old_node);
-}
-
-void
-vlist_flush(struct vlist_tree *tree)
-{
-       struct vlist_node *node, *tmp;
-
-       avl_for_each_element_safe(&tree->avl, node, avl, tmp) {
-               if ((node->version == tree->version || node->version == -1) &&
-                   tree->version != -1)
-                       continue;
-
-               vlist_delete(tree, node);
-       }
-}
-
-void
-vlist_flush_all(struct vlist_tree *tree)
-{
-       tree->version = -1;
-       vlist_flush(tree);
-}
-
-
 void
 __vlist_simple_init(struct vlist_simple_tree *tree, int offset)
 {
diff --git a/utils.h b/utils.h
index f5ccfaaf3e8414af0c5084d72d21218f7f78f6b7..319e53058329af59c84d0fab992cfc016dd87336 100644 (file)
--- a/utils.h
+++ b/utils.h
@@ -18,6 +18,7 @@
 #include <libubox/avl.h>
 #include <libubox/avl-cmp.h>
 #include <libubox/blobmsg.h>
+#include <libubox/vlist.h>
 
 #ifndef __OPTIMIZE__
 #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
@@ -40,47 +41,6 @@ static inline bool blobmsg_get_bool_default(struct blob_attr *attr, bool val)
 
 #define __init __attribute__((constructor))
 
-struct vlist_tree;
-struct vlist_node;
-
-typedef void (*vlist_update_cb)(struct vlist_tree *tree,
-                               struct vlist_node *node_new,
-                               struct vlist_node *node_old);
-
-struct vlist_tree {
-       struct avl_tree avl;
-
-       vlist_update_cb update;
-       bool keep_old;
-       bool no_delete;
-
-       int version;
-};
-
-struct vlist_node {
-       struct avl_node avl;
-       int version;
-};
-
-void vlist_init(struct vlist_tree *tree, avl_tree_comp cmp, vlist_update_cb update);
-
-#define vlist_find(tree, name, element, node_member) \
-       avl_find_element(&(tree)->avl, name, element, node_member.avl)
-
-static inline void vlist_update(struct vlist_tree *tree)
-{
-       tree->version++;
-}
-
-void vlist_add(struct vlist_tree *tree, struct vlist_node *node, void *key);
-void vlist_delete(struct vlist_tree *tree, struct vlist_node *node);
-void vlist_flush(struct vlist_tree *tree);
-void vlist_flush_all(struct vlist_tree *tree);
-
-#define vlist_for_each_element(tree, element, node_member) \
-       avl_for_each_element(&(tree)->avl, element, node_member.avl)
-
-
 struct vlist_simple_tree {
        struct list_head list;
        int head_offset;