summaryrefslogtreecommitdiffstats
path: root/lib/linklist.h
diff options
context:
space:
mode:
authorsaravanank <saravanank@vmware.com>2019-05-03 15:57:57 +0200
committersaravanank <saravanank@vmware.com>2019-05-15 06:40:50 +0200
commit9b68e496042b7fc8bf2f27671fbfbc6f02541a17 (patch)
tree699ce1e408e8b6cb6e6b49298f1bdfc176bb415f /lib/linklist.h
parentpimd: PIM BSM Processing g2rp timer start and expiry routine(dummy) (diff)
downloadfrr-9b68e496042b7fc8bf2f27671fbfbc6f02541a17.tar.xz
frr-9b68e496042b7fc8bf2f27671fbfbc6f02541a17.zip
lib: implement utility function API which does the following
1. listnode_add_sort_nodup - This API adds to list only if no duplicate element available in the list. returns true/false 2. list_filter_out_nodes - This API deletes the nodes which satisfy the given condition. condition is passed as a func ptr in API. This function takes in node data(void ptr). Signed-off-by: Saravanan K <saravanank@vmware.com>
Diffstat (limited to 'lib/linklist.h')
-rw-r--r--lib/linklist.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/linklist.h b/lib/linklist.h
index c30d8d314..8761bc3d1 100644
--- a/lib/linklist.h
+++ b/lib/linklist.h
@@ -288,6 +288,39 @@ extern void list_delete_node(struct list *list, struct listnode *node);
*/
extern void list_add_list(struct list *list, struct list *add);
+/*
+ * Delete all nodes which satisfy a condition from a list.
+ * Deletes the node if cond function returns true for the node.
+ * If function ptr passed is NULL, it deletes all nodes
+ *
+ * list
+ * list to operate on
+ * cond
+ * function pointer which takes node data as input and return TRUE or FALSE
+ */
+
+extern void list_filter_out_nodes(struct list *list, bool (*cond)(void *data));
+
+/*
+ * Insert a new element into a list with insertion sort if there is no
+ * duplicate element present in the list. This assumes the input list is
+ * sorted. If unsorted, it will check for duplicate until it finds out
+ * the position to do insertion sort with the unsorted list.
+ *
+ * If list->cmp is set, this function is used to determine the position to
+ * insert the new element. If it is not set, this function is equivalent to
+ * listnode_add. duplicate element is determined by cmp function returning 0.
+ *
+ * Runtime is O(N).
+ *
+ * list
+ * list to operate on
+ *
+ * val
+ * element to add
+ */
+
+extern bool listnode_add_sort_nodup(struct list *list, void *val);
/* List iteration macro.
* Usage: for (ALL_LIST_ELEMENTS (...) { ... }
* It is safe to delete the listnode using this macro.