libdvec-c

C memory vector library
git clone https://git.sinitax.com/sinitax/libdvec-c
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

commit d9bc4e34e3a880e31118af3b7f623d644af70253
parent 9a1cb594781574a53c2ceadee1b1cfb27267102e
Author: Louis Burda <quent.burda@gmail.com>
Date:   Sun, 12 Nov 2023 21:02:15 +0100

Change data type since sizeof(char) not necessarily 1

Diffstat:
Minclude/dvec.h | 6+++---
Msrc/dvec.c | 36++++++++++++++++++------------------
Msrc/test.c | 2+-
3 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/include/dvec.h b/include/dvec.h @@ -12,7 +12,7 @@ #define DVEC_STRERR_INIT \ [DVEC_OK] = "Success", \ - [DVEC_LOCKED] = "Dvec locked" + [DVEC_LOCKED] = "Data vector locked" #ifdef LIBDVEC_ASSERT_ARGS #include "stdlib.h" @@ -36,7 +36,7 @@ enum { struct dvec { size_t dsize; size_t len, cap; - char *data; + uint8_t *data; uint8_t locked : 1; /* prevents resizes */ uint8_t fused : 1; /* single allocation w/ data */ const struct allocator *allocator; @@ -169,5 +169,5 @@ dvec_idx(struct dvec *dvec, const void *p) LIBDVEC_ABORT_ON_ARGS(!dvec || p < dvec->data || p >= dvec->data + dvec->dsize * dvec->len); - return (size_t) ((char *)p - dvec->data) / dvec->dsize; + return (size_t) ((uint8_t *)p - dvec->data) / dvec->dsize; } diff --git a/src/dvec.c b/src/dvec.c @@ -98,7 +98,7 @@ dvec_alloc_fused(size_t dsize, size_t cap, dvec->dsize = dsize; dvec->cap = cap; dvec->len = 0; - dvec->data = (char *) dvec + off; + dvec->data = (uint8_t *) dvec + off; dvec->locked = false; dvec->fused = true; @@ -197,7 +197,7 @@ dvec_reserve(struct dvec *dvec, size_t len) LIBDVEC_ABORT_ON_ALLOC(!data); if (!data) return -rc; dvec = data; - dvec->data = (char *) dvec + off; + dvec->data = (uint8_t *) dvec + off; } else { data = dvec->allocator->realloc(dvec->allocator, dvec->data, cap * dvec->dsize, &rc); @@ -231,7 +231,7 @@ dvec_shrink(struct dvec *dvec) LIBDVEC_ABORT_ON_ALLOC(!data); if (!data) return -rc; dvec = data; - dvec->data = (char *) dvec + off; + dvec->data = (uint8_t *) dvec + off; } else if (!dvec->len) { rc = dvec->allocator->free(dvec->allocator, dvec->data); LIBDVEC_ABORT_ON_ALLOC(rc); @@ -305,8 +305,8 @@ dvec_iter_fwd(const struct dvec *dvec, const void *p) return dvec->data; else return NULL; - } else if ((char *) p < dvec->data + dvec->dsize * (dvec->len - 1)) { - return (char *) p + dvec->dsize; + } else if ((uint8_t *) p < dvec->data + dvec->dsize * (dvec->len - 1)) { + return (uint8_t *) p + dvec->dsize; } else { return NULL; } @@ -325,8 +325,8 @@ dvec_iter_bwd(const struct dvec *dvec, const void *p) return dvec->data + (dvec->len - 1) * dvec->dsize; else return NULL; - } else if ((char *) p > dvec->data) { - return (char *) p - dvec->dsize; + } else if ((uint8_t *) p > dvec->data) { + return (uint8_t *) p - dvec->dsize; } else { return NULL; } @@ -345,24 +345,24 @@ dvec_quick_sort(struct dvec *dvec, const struct allocator *allocator, void *tmp, bool reverse, dvec_sort_order_fn in_order, void *user) { struct dvec stack; - char *pivot, *lo, *hi; - char *start, *end; + uint8_t *pivot, *lo, *hi; + uint8_t *start, *end; size_t dsize; bool lo_order, hi_order; int rc; if (!dvec->len) return DVEC_OK; - rc = dvec_init(&stack, sizeof(char *), 32, allocator); + rc = dvec_init(&stack, sizeof(uint8_t *), 32, allocator); if (rc) return rc; dsize = dvec->dsize; - *(char **)dvec_push(&stack) = dvec_front(dvec); - *(char **)dvec_push(&stack) = dvec_back(dvec); + *(uint8_t **)dvec_push(&stack) = dvec_front(dvec); + *(uint8_t **)dvec_push(&stack) = dvec_back(dvec); while (!dvec_empty(&stack)) { - end = *(char **)dvec_pop(&stack); - start = *(char **)dvec_pop(&stack); + end = *(uint8_t **)dvec_pop(&stack); + start = *(uint8_t **)dvec_pop(&stack); if (start == end) continue; @@ -387,13 +387,13 @@ dvec_quick_sort(struct dvec *dvec, const struct allocator *allocator, } if (start != pivot) { - *(char **)dvec_push(&stack) = start; - *(char **)dvec_push(&stack) = pivot - dsize; + *(uint8_t **)dvec_push(&stack) = start; + *(uint8_t **)dvec_push(&stack) = pivot - dsize; } if (end != pivot) { - *(char **)dvec_push(&stack) = pivot + dsize; - *(char **)dvec_push(&stack) = end; + *(uint8_t **)dvec_push(&stack) = pivot + dsize; + *(uint8_t **)dvec_push(&stack) = end; } } diff --git a/src/test.c b/src/test.c @@ -71,7 +71,7 @@ main(int argc, const char **argv) if (!fused) LIBDVEC_ERR(rc); printf("fused: %p %p (+%li)\n", (void *) fused, - fused->data, fused->data - (char *) fused); + fused->data, fused->data - (uint8_t *) fused); rc = dvec_free(fused); if (rc) LIBDVEC_ERR(rc);