diff -r 54565fd74e74 -r 49d8cff6f0ee src/cx/linked_list.h --- a/src/cx/linked_list.h Sat Sep 28 15:47:28 2024 +0200 +++ b/src/cx/linked_list.h Sat Sep 28 15:55:14 2024 +0200 @@ -104,12 +104,13 @@ * @param index the search index * @return the node found at the specified index */ +__attribute__((__nonnull__)) void *cx_linked_list_at( const void *start, size_t start_index, ptrdiff_t loc_advance, size_t index -) __attribute__((__nonnull__)); +); /** * Finds the index of an element within a linked list. @@ -121,13 +122,14 @@ * @param elem a pointer to the element to find * @return the index of the element or a negative value if it could not be found */ +__attribute__((__nonnull__)) ssize_t cx_linked_list_find( const void *start, ptrdiff_t loc_advance, ptrdiff_t loc_data, cx_compare_func cmp_func, const void *elem -) __attribute__((__nonnull__)); +); /** * Finds the node containing an element within a linked list. @@ -141,6 +143,7 @@ * @param elem a pointer to the element to find * @return the index of the element or a negative value if it could not be found */ +__attribute__((__nonnull__)) ssize_t cx_linked_list_find_node( void **result, const void *start, @@ -148,7 +151,7 @@ ptrdiff_t loc_data, cx_compare_func cmp_func, const void *elem -) __attribute__((__nonnull__)); +); /** * Finds the first node in a linked list. @@ -161,10 +164,11 @@ * @param loc_prev the location of the \c prev pointer * @return a pointer to the first node */ +__attribute__((__nonnull__)) void *cx_linked_list_first( const void *node, ptrdiff_t loc_prev -) __attribute__((__nonnull__)); +); /** * Finds the last node in a linked list. @@ -177,10 +181,11 @@ * @param loc_next the location of the \c next pointer * @return a pointer to the last node */ +__attribute__((__nonnull__)) void *cx_linked_list_last( const void *node, ptrdiff_t loc_next -) __attribute__((__nonnull__)); +); /** * Finds the predecessor of a node in case it is not linked. @@ -192,11 +197,12 @@ * @param node the successor of the node to find * @return the node or \c NULL if \p node has no predecessor */ +__attribute__((__nonnull__)) void *cx_linked_list_prev( const void *begin, ptrdiff_t loc_next, const void *node -) __attribute__((__nonnull__)); +); /** * Adds a new node to a linked list. @@ -210,13 +216,14 @@ * @param loc_next the location of a \c next pointer within your node struct (required) * @param new_node a pointer to the node that shall be appended */ +__attribute__((__nonnull__(5))) void cx_linked_list_add( void **begin, void **end, ptrdiff_t loc_prev, ptrdiff_t loc_next, void *new_node -) __attribute__((__nonnull__(5))); +); /** * Prepends a new node to a linked list. @@ -230,13 +237,14 @@ * @param loc_next the location of a \c next pointer within your node struct (required) * @param new_node a pointer to the node that shall be prepended */ +__attribute__((__nonnull__(5))) void cx_linked_list_prepend( void **begin, void **end, ptrdiff_t loc_prev, ptrdiff_t loc_next, void *new_node -) __attribute__((__nonnull__(5))); +); /** * Links two nodes. @@ -246,12 +254,13 @@ * @param loc_prev the location of a \c prev pointer within your node struct (negative if your struct does not have one) * @param loc_next the location of a \c next pointer within your node struct (required) */ +__attribute__((__nonnull__)) void cx_linked_list_link( void *left, void *right, ptrdiff_t loc_prev, ptrdiff_t loc_next -) __attribute__((__nonnull__)); +); /** * Unlinks two nodes. @@ -263,12 +272,13 @@ * @param loc_prev the location of a \c prev pointer within your node struct (negative if your struct does not have one) * @param loc_next the location of a \c next pointer within your node struct (required) */ +__attribute__((__nonnull__)) void cx_linked_list_unlink( void *left, void *right, ptrdiff_t loc_prev, ptrdiff_t loc_next -) __attribute__((__nonnull__)); +); /** * Inserts a new node after a given node of a linked list. @@ -284,6 +294,7 @@ * @param node the node after which to insert (\c NULL if you want to prepend the node to the list) * @param new_node a pointer to the node that shall be inserted */ +__attribute__((__nonnull__(6))) void cx_linked_list_insert( void **begin, void **end, @@ -291,7 +302,7 @@ ptrdiff_t loc_next, void *node, void *new_node -) __attribute__((__nonnull__(6))); +); /** * Inserts a chain of nodes after a given node of a linked list. @@ -313,6 +324,7 @@ * @param insert_begin a pointer to the first node of the chain that shall be inserted * @param insert_end a pointer to the last node of the chain (or NULL if the last node shall be determined) */ +__attribute__((__nonnull__(6))) void cx_linked_list_insert_chain( void **begin, void **end, @@ -321,7 +333,7 @@ void *node, void *insert_begin, void *insert_end -) __attribute__((__nonnull__(6))); +); /** * Inserts a node into a sorted linked list. @@ -337,6 +349,7 @@ * @param new_node a pointer to the node that shall be inserted * @param cmp_func a compare function that will receive the node pointers */ +__attribute__((__nonnull__(1, 5, 6))) void cx_linked_list_insert_sorted( void **begin, void **end, @@ -344,7 +357,7 @@ ptrdiff_t loc_next, void *new_node, cx_compare_func cmp_func -) __attribute__((__nonnull__(1, 5, 6))); +); /** * Inserts a chain of nodes into a sorted linked list. @@ -365,6 +378,7 @@ * @param insert_begin a pointer to the first node of the chain that shall be inserted * @param cmp_func a compare function that will receive the node pointers */ +__attribute__((__nonnull__(1, 5, 6))) void cx_linked_list_insert_sorted_chain( void **begin, void **end, @@ -372,7 +386,7 @@ ptrdiff_t loc_next, void *insert_begin, cx_compare_func cmp_func -) __attribute__((__nonnull__(1, 5, 6))); +); /** * Removes a node from the linked list. @@ -393,13 +407,14 @@ * @param loc_next the location of a \c next pointer within your node struct (required) * @param node the node to remove */ +__attribute__((__nonnull__(5))) void cx_linked_list_remove( void **begin, void **end, ptrdiff_t loc_prev, ptrdiff_t loc_next, void *node -) __attribute__((__nonnull__(5))); +); /** @@ -435,6 +450,7 @@ * @param loc_data the location of the \c data pointer within your node struct * @param cmp_func the compare function defining the sort order */ +__attribute__((__nonnull__(1, 6))) void cx_linked_list_sort( void **begin, void **end, @@ -442,7 +458,7 @@ ptrdiff_t loc_next, ptrdiff_t loc_data, cx_compare_func cmp_func -) __attribute__((__nonnull__(1, 6))); +); /** @@ -458,13 +474,14 @@ * @return the first non-zero result of invoking \p cmp_func or: negative if the left list is smaller than the * right list, positive if the left list is larger than the right list, zero if both lists are equal. */ +__attribute__((__nonnull__(5))) int cx_linked_list_compare( const void *begin_left, const void *begin_right, ptrdiff_t loc_advance, ptrdiff_t loc_data, cx_compare_func cmp_func -) __attribute__((__nonnull__(5))); +); /** * Reverses the order of the nodes in a linked list. @@ -474,12 +491,13 @@ * @param loc_prev the location of a \c prev pointer within your node struct (negative if your struct does not have one) * @param loc_next the location of a \c next pointer within your node struct (required) */ +__attribute__((__nonnull__(1))) void cx_linked_list_reverse( void **begin, void **end, ptrdiff_t loc_prev, ptrdiff_t loc_next -) __attribute__((__nonnull__(1))); +); #ifdef __cplusplus } // extern "C"