Header-only library for work with Double Linked Lists(or Bidirectional Lists)
This is a simplest libdll implementation based on C++11 std::list methods and without errno codes, messages also without asserts.
If you need all of this, check this branch
Thanks and have fun =)
Simplest example with a few comments
#include"libdll.h"char*str="just a str";
size_tstr_len=sizeof(str);
voidprint_list_str_data(void*restrict obj_data) {
constchar*restrict obj_str_data= (constchar*restrict)obj_data;
printf("%s\n", obj_str_data);
}
voidprint_list_number_data(void*restrict obj_data) {
constsize_t*restrict obj_number_data= (constsize_t*restrict)obj_data;
printf("%zu\n", *obj_number_data);
}
intmain(void) {
dll_t*list=dll_init();
/** * equals to: * dll_push_back(list, dll_new_obj(str, str_len, LIBDLL_DESTRUCTOR_NULL)); */dll_emplace_back(list, str, str_len, LIBDLL_DESTRUCTOR_NULL);
dll_foreach(list, print_list_str_data);
// be ceraful with this method, it's erases all objects data in listdll_clear(list);
/* * Also by passing any data in the list object it's will not be duplicated. * If you need this behavior - made it by yourself, * by following this steps for all the data before it will be passed to the list: * 1. allocate memory and copy to it any data. * 2. pass it to dll_emplace\dll_push with specifying a desctructor function( * or use a LIBDLL_DESTRUCTOR_DEFAULT if you need to apply just * a free(3) to allocated data). */size_ti;
constsize_titerator_size=sizeof(i);
for (i=0; 10>i; ++i) {
size_t*iterator_mem_chunk=calloc(1, iterator_size);
memcpy(iterator_mem_chunk, &i, iterator_size);
dll_emplace_back(list, iterator_mem_chunk, iterator_size, LIBDLL_DESTRUCTOR_DEFAULT);
}
dll_foreach(list, print_list_number_data);
// For correct work without memory leaks - dll_free is required.dll_free(&list);
}theme on the screenshot: Twilight Pro for VSCode..
