summaryrefslogtreecommitdiff
path: root/doc/inline_clist.rst
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2023-02-10 15:27:06 +0100
committerJörg Frings-Fürst <debian@jff-webhosting.net>2023-02-10 15:27:06 +0100
commit7501bff8432444b7ae8e7f3d9289c0d61f3f0b64 (patch)
treebd53603f464c3747e897a8996158a0fef7b41bc3 /doc/inline_clist.rst
parent0f124df68d87c9073f76efeff1a901a69b1f3e13 (diff)
parent9e9336185f86bd97ff22f54e4d561c2cccccecf5 (diff)
Merge branch 'release/debian/4.10-1'debian/4.10-1
Diffstat (limited to 'doc/inline_clist.rst')
-rw-r--r--doc/inline_clist.rst59
1 files changed, 59 insertions, 0 deletions
diff --git a/doc/inline_clist.rst b/doc/inline_clist.rst
new file mode 100644
index 0000000..f7bf138
--- /dev/null
+++ b/doc/inline_clist.rst
@@ -0,0 +1,59 @@
+=================================
+Counted inline doubly-linked list
+=================================
+
+clist is the inline doubly-linked list cousin of the inline doubly-linked list,
+extended by a counter to retrieve the number of elements in the list in O(1)
+time. This is also why all operations always require the list head. For
+traversal of clists, use the corresponding HXlist macros.
+
+Synopsis
+========
+
+.. code-block:: c
+
+ #include <libHX/list.h>
+
+ struct HXclist_head {
+ /* public readonly: */
+ unsigned int items;
+ /* Undocumented fields are considered “private” */
+ };
+
+ HXCLIST_HEAD_INIT(name);
+ HXCLIST_HEAD(name);
+ void HXclist_init(struct HXclist_head *head);
+ void HXclist_unshift(struct HXclist_head *head, struct HXlist_head *new_node);
+ void HXclist_push(struct HXclist_head *head, struct HXlist_head *new_node);
+ type HXclist_pop(struct HXclist_head *head, type, member);
+ type HXclist_shift(struct HXclist_head *head, type, member);
+ void HXclist_del(struct HXclist_head *head, struct HXlist_chead *node);
+
+``HXCLIST_HEAD_INIT``
+ Macro that expands to the static initializer for a clist.
+
+``HXCLIST_HEAD``
+ Macro that expands to the definition of a clist head, with
+ initialization.
+
+``HXclist_init``
+ Initializes a clist. This function is generally used when the head has
+ been allocated from the heap.
+
+``HXclist_unshift``
+ Adds the node to the front of the list.
+
+``HXclist_push``
+ Adds the node to the end of the list.
+
+``HXclist_pop``
+ Removes the last node in the list and returns it.
+
+``HXclist_shift``
+ Removes the first node in the list and returns it.
+
+``HXclist_del``
+ Deletes the node from the list.
+
+The list count in the clist head is updated whenever a modification is done on
+the clist through these functions.