>From 0c8186bfedc2dfa6d1bd083dafc3ec9a7c46828d Mon Sep 17 00:00:00 2001 From: Olivier Brunel Date: Thu, 12 Apr 2018 18:51:40 +0200 Subject: [PATCH] Add genalloc_delete Signed-off-by: Olivier Brunel --- src/include/skalibs/genalloc.h | 2 ++ src/libstddjb/genalloc_delete_size.c | 12 ++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 src/libstddjb/genalloc_delete_size.c diff --git a/src/include/skalibs/genalloc.h b/src/include/skalibs/genalloc.h index da83c2f..acf2bec 100644 --- a/src/include/skalibs/genalloc.h +++ b/src/include/skalibs/genalloc.h @@ -28,6 +28,8 @@ typedef stralloc genalloc, *genalloc_ref ; #define genalloc_reverse(type, g) stralloc_reverse_blocks((g), sizeof(type)) #define genalloc_insertb(type, g, offset, s, n) stralloc_insertb((g), (offset)*sizeof(type), (char const *)(s), (n)*sizeof(type)) #define genalloc_insert(type, g1, offset, g2) stralloc_insert((g1), (offset)*sizeof(type), (g2)) +#define genalloc_delete(type,g,i) genalloc_delete_size((g),sizeof(type),i) +extern void genalloc_delete_size (genalloc *, size_t, size_t) ; #define genalloc_deepfree(type, g, f) genalloc_deepfree_size(g, (freefunc_t_ref)(f), sizeof(type)) extern void genalloc_deepfree_size (genalloc *, freefunc_t_ref, size_t) ; diff --git a/src/libstddjb/genalloc_delete_size.c b/src/libstddjb/genalloc_delete_size.c new file mode 100644 index 0000000..a289000 --- /dev/null +++ b/src/libstddjb/genalloc_delete_size.c @@ -0,0 +1,12 @@ +/* ISC license. */ + +#include +#include +#include + +void genalloc_delete_size (genalloc *g, size_t s, size_t i) +{ + size_t len = g->len / s; + if (len > i + 1) memmove (g->s + i * s, g->s + (i + 1) * s, (len - i - 1) * s) ; + g->len -= s ; +} -- 2.15.1