freebsd-ports/devel/tllist/pkg-descr
Lorenzo Salvadore 5d065c843b 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 (oh, was it a pointer-to-a-pointer... I
thought it was just a pointer...).

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 a head and a tail pointer, 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.

WWW: https://codeberg.org/dnkl/tllist

PR:		245410
Submitted by:	ports@xanderio.de
2020-05-21 21:46:56 +00:00

24 lines
1.1 KiB
Text

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 (oh, was it a pointer-to-a-pointer... I
thought it was just a pointer...).
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 a head and a tail pointer, 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.
WWW: https://codeberg.org/dnkl/tllist