Add replacer

This commit is contained in:
Alex D. 2021-08-14 18:26:07 +00:00
parent b435f5cc55
commit 5ed1818d96
Signed by: caskd
GPG Key ID: F92BA85F61F4C173
3 changed files with 23 additions and 2 deletions

View File

@ -1,3 +1,3 @@
VERSION = 1.4.0
VERSION = 1.5.0
PREFIX = /usr/local
CC = clang

22
llist.c
View File

@ -24,7 +24,8 @@
static llist_err corelibs_llist_create(void*, void (*)(void*), llist_t**);
static llist_err corelibs_llist_link(uintmax_t cnt, ...);
static llist_err corelibs_llist_link(uintmax_t, ...);
static llist_err corelibs_llist_rep(llist_t*, llist_t*);
static llist_err corelibs_llist_free_list(llist_t*);
static llist_err corelibs_llist_free_elem(llist_t*);
@ -56,6 +57,7 @@ enum { // Avoid collision in error numbers
struct corelibs_llist_interface const llist = {
.create = corelibs_llist_create,
.link = corelibs_llist_link,
.rep = corelibs_llist_rep,
.free = {
.list = corelibs_llist_free_list,
.elem = corelibs_llist_free_elem,
@ -179,6 +181,24 @@ ret:
return err;
}
static llist_err
corelibs_llist_rep(llist_t* dest, llist_t* src)
{
llist_err err = CORELIBS_LLIST_ERR_OK;
if (src == NULL || dest == NULL) {
err = CORELIBS_LLIST_ERR_NULL;
goto ret;
}
if (dest->prev != NULL) dest->prev->next = src;
if (dest->next != NULL) dest->next->prev = src;
corelibs_llist_free_elem(dest);
ret:
return err;
}
static llist_err
corelibs_llist_get_next(const llist_t* e, llist_t** save)
{

View File

@ -27,6 +27,7 @@ typedef signed short int llist_err;
struct corelibs_llist_interface {
llist_err (*const create)(void* content, void (*const free_function)(void*), llist_t** save);
llist_err (*const link)(uintmax_t elements, ...);
llist_err (*const rep)(llist_t* dest, llist_t* src);
const struct {
llist_err (*const list)(llist_t* element);
llist_err (*const elem)(llist_t* element);