c-list
- Repository:
- @GitHub
- Issue-Tracker:
- @GitHub
- Documentation:
- c-list.h
- Licenses:
-
- Apache Software License 2.0
- Lesser General Public License 2.1+
The c-list project implements an intrusive collection based on circular double linked lists in ISO-C11.
Example
A typical use-case for c-list is a single collection of objects of a custom data-structure. This example shows how you could insert, remove, and iterate custom objects in a list based on c-list:
typedef struct {
int ..some-fields..;
CList link;
int ..more-fields..;
} MyData;
int main(int argc, char **argv) {
CList *iter, list = C_LIST_INIT(list);
MyData *node, node1, node2;
c_list_link_tail(&list, &node1->link);
c_list_link_tail(&list, &node2->link);
/* open-coded iterator */
for (iter = list.first; iter != &list; iter = iter->next) {
/* ..visitor.. */
}
c_list_unlink(&node1->link);
/* alternative iterator */
c_list_for_each_entry(node, &list, link) {
/* ..visitor.. */
}
c_list_unlink(&node2->link);
assert(c_list_is_empty(&list));
return 0;
}