diff options
author | saravanank <saravanank@vmware.com> | 2019-05-03 15:57:57 +0200 |
---|---|---|
committer | saravanank <saravanank@vmware.com> | 2019-05-15 06:40:50 +0200 |
commit | 9b68e496042b7fc8bf2f27671fbfbc6f02541a17 (patch) | |
tree | 699ce1e408e8b6cb6e6b49298f1bdfc176bb415f /lib/linklist.h | |
parent | pimd: PIM BSM Processing g2rp timer start and expiry routine(dummy) (diff) | |
download | frr-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.h | 33 |
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. |