src/cx/linked_list.h

changeset 438
cd3069757010
parent 415
067aa769796a
child 453
bb144d08cd44
--- a/src/cx/linked_list.h	Mon Sep 27 17:49:23 2021 +0200
+++ b/src/cx/linked_list.h	Mon Sep 27 18:33:30 2021 +0200
@@ -36,6 +36,25 @@
 extern "C" {
 #endif
 
+/**
+ * Finds the node at a certain index.
+ *
+ * This function can be used to start at an arbitrary position within the list.
+ * If the search index is large than the start index, \p loc_advance must denote
+ * the location of some sort of \c next pointer (i.e. a pointer to the next node).
+ * But it is also possible that the search index is smaller than the start index
+ * (e.g. in cases where traversing a list backwards is faster) in which case
+ * \p loc_advance must denote the location of some sort of \c prev pointer
+ * (i.e. a pointer to the previous node).
+ *
+ * @param start a pointer to the start node
+ * @param start_index the start index
+ * @param loc_advance the location of the pointer to advance
+ * @param index the search index
+ * @return the node found at the specified index
+ */
+void *cx_linked_list_at(void *start, size_t start_index, ptrdiff_t loc_advance, size_t index);
+
 void *cx_linked_list_last(void **begin, void **end, ptrdiff_t loc_next);
 
 int cx_linked_list_add(void **begin, void **end, ptrdiff_t loc_prev, ptrdiff_t loc_next, void *new_node);

mercurial