commit cace3248f08c52886568830479cfb5b8338ab72c
parent 8d68770e56d3c08f646b59c0914f992064f02c70
Author: Louis Burda <quent.burda@gmail.com>
Date: Thu, 23 Mar 2023 20:26:51 +0100
Allow ignoring return code for _add_slot(s) and fix iter
Diffstat:
2 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/include/dvec.h b/include/dvec.h
@@ -5,7 +5,7 @@
#include <stdbool.h>
#include <stddef.h>
-#define DVEC_ITER(dvec, p) *p = dvec->data; dvec_iter_fwd(dvec, (void **)p);
+#define DVEC_ITER(dvec, p) *p = NULL; dvec_iter_fwd(dvec, (void **)(p));
#ifdef LIBDVEC_ASSERT_ARGS
#include "stdlib.h"
@@ -50,8 +50,8 @@ void dvec_remove(struct dvec *dvec, size_t index, size_t count);
void dvec_replace(struct dvec *dvec, size_t index,
const void *data, size_t count);
-bool dvec_iter_fwd(struct dvec *dvec, void **p);
-bool dvec_iter_bwd(struct dvec *dvec, void **p);
+bool dvec_iter_fwd(const struct dvec *dvec, void **p);
+bool dvec_iter_bwd(const struct dvec *dvec, void **p);
static inline void *
dvec_at(struct dvec *dvec, size_t index)
@@ -94,12 +94,15 @@ dvec_len(struct dvec *dvec)
}
static inline void *
-dvec_add_slots(struct dvec *dvec, int *rc, size_t count)
+dvec_add_slots(struct dvec *dvec, int *_rc, size_t count)
{
- LIBDVEC_ABORT_ON_ARGS(!dvec || !rc || !count);
+ int rc;
- *rc = dvec_add(dvec, dvec->len, count);
- if (*rc) return NULL;
+ LIBDVEC_ABORT_ON_ARGS(!dvec || !count);
+
+ rc = dvec_add(dvec, dvec->len, count);
+ if (_rc) *_rc = rc;
+ if (rc) return NULL;
return dvec->data + (dvec->len - count) * dvec->dsize;
}
@@ -107,7 +110,7 @@ dvec_add_slots(struct dvec *dvec, int *rc, size_t count)
static inline void *
dvec_add_slot(struct dvec *dvec, int *rc)
{
- LIBDVEC_ABORT_ON_ARGS(!dvec || !rc);
+ LIBDVEC_ABORT_ON_ARGS(!dvec);
return dvec_add_slots(dvec, rc, 1);
}
diff --git a/src/dvec.c b/src/dvec.c
@@ -138,7 +138,7 @@ dvec_reserve(struct dvec *dvec, size_t len)
rc = dvec->allocator->realloc(&dvec->data, dvec->cap * dvec->dsize);
LIBDVEC_ABORT_ON_ALLOC(rc);
- if (rc) return rc;
+ if (rc) return -rc;
return 0;
}
@@ -170,9 +170,12 @@ dvec_shrink(struct dvec *dvec)
int
dvec_add(struct dvec *dvec, size_t index, size_t len)
{
+ int rc;
+
LIBDVEC_ABORT_ON_ARGS(!dvec || index > dvec->len);
- dvec_reserve(dvec, dvec->len + len);
+ rc = dvec_reserve(dvec, dvec->len + len);
+ if (rc) return rc;
if (index < dvec->len) {
memmove(dvec->data + (index + len) * dvec->dsize,
@@ -208,7 +211,7 @@ dvec_replace(struct dvec *dvec, size_t index, const void *data, size_t count)
}
bool
-dvec_iter_fwd(struct dvec *dvec, void **p)
+dvec_iter_fwd(const struct dvec *dvec, void **p)
{
void **iter;
@@ -227,7 +230,7 @@ dvec_iter_fwd(struct dvec *dvec, void **p)
}
bool
-dvec_iter_bwd(struct dvec *dvec, void **p)
+dvec_iter_bwd(const struct dvec *dvec, void **p)
{
void **iter;