summaryrefslogtreecommitdiffstats
path: root/libraries/tllist/README
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/tllist/README')
-rw-r--r--libraries/tllist/README24
1 files changed, 24 insertions, 0 deletions
diff --git a/libraries/tllist/README b/libraries/tllist/README
new file mode 100644
index 0000000000..a0113f5afe
--- /dev/null
+++ b/libraries/tllist/README
@@ -0,0 +1,24 @@
+Most C implementations of linked list are untyped. That is, their data
+carriers are typically void *. This is error prone since your compiler
+will not be able to help you correct your mistakes.
+
+tllist addresses this by using pre-processor macros to implement
+dynamic types, where the data carrier is typed to whatever you want;
+both primitive data types are supported as well as aggregated ones
+such as structs, enums and unions.
+
+Being a double-linked list, most operations are constant in time
+(including pushing and popping both to/from front and back).
+
+The memory overhead is fairly small; each item carries, besides its
+data, a prev and next pointer (i.e. a constant 16 byte overhead per item
+on 64-bit architectures).
+
+The list itself has two head and tail pointers, plus a length variable
+(typically 8 bytes on 64-bit architectures) to make list length lookup
+constant in time.
+
+Thus, assuming 64-bit pointers (and a 64-bit size_t type), the total
+overhead is 3*8 + n*2*8 bytes.
+
+tllist is a needed dependency for fcft,foot,fuzzel,fnott,wbg