diff options
Diffstat (limited to 'libraries/tllist/README')
-rw-r--r-- | libraries/tllist/README | 24 |
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 |