diff options
| author | saravanank <saravanank@vmware.com> | 2019-05-03 06:57:57 -0700 | 
|---|---|---|
| committer | saravanank <saravanank@vmware.com> | 2019-05-14 21:40:50 -0700 | 
| commit | 9b68e496042b7fc8bf2f27671fbfbc6f02541a17 (patch) | |
| tree | 699ce1e408e8b6cb6e6b49298f1bdfc176bb415f /lib/linklist.h | |
| parent | a5164e9790c55b6534670a60e27813da9262a3b6 (diff) | |
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 c30d8d314a..8761bc3d16 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.  | 
