Skip to content

Commit 1bd4f71

Browse files
committed
v.h: Move memcpy in v_arr_add_n() back to macro
I tried to move it to the implementation so I wouldn't have to include string.h everywhere v.h is included, but I forgot that functions are not the same thing as macros, evidently.
1 parent 2bd1b4b commit 1bd4f71

File tree

1 file changed

+5
-16
lines changed

1 file changed

+5
-16
lines changed

include/v.h

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151

5252
#include <stddef.h>
5353
#include <stdint.h>
54+
#include <string.h> // for memcpy() in v_arr_add_n()
55+
#include <stdlib.h> // We depend on stdlib malloc/free/realloc for now
5456

5557
// --- decl common
5658

@@ -168,7 +170,6 @@ static inline size_t v_arr_grow_exponential(size_t capacity, size_t elem_size) {
168170
}
169171

170172
void *v__arr_do_grow(void *a, size_t elem_size, size_t n);
171-
void v__arr_add_n(void *a, void *elems, size_t elem_size, size_t n);
172173
void *v__arr_trim(void *a);
173174
void *v__arr_copy(const void *const a);
174175
void v__arr_free(void *a);
@@ -182,8 +183,9 @@ void v__arr_free(void *a);
182183
#define v_arr_len(A) ((A) ? v__arr_head(A)->n : 0)
183184
#define v_arr_add(A, ...) \
184185
(v__arr_ensure((A), 1), (A)[v__arr_head(A)->n] = (__VA_ARGS__), v__arr_head(A)->n++)
185-
#define v_arr_add_n(A, elems, N) \
186-
(v__arr_ensure((A), N), v__arr_add_n((A), elems, sizeof(elems[0]), (N)))
186+
#define v_arr_add_n(A, items, N) \
187+
(v__arr_ensure((A), N), memcpy((A) + v__arr_head((A))->n, items, N * sizeof(items[0])), v__arr_head((A))->n += N)
188+
187189
// TODO: It's quite easy to forget & when using v_arr_trim().
188190
// Use the v_arr_free() pattern and directly assign result of v__arr_trim() to A
189191
#define v_arr_trim(A) \
@@ -648,10 +650,6 @@ void v_timer_sleep_ms(int ms) {
648650
// --- impl v_cbuf (Circular buffers for running averages) (refmon)
649651
// --- impl v_arr (Dynamic arrays)
650652

651-
#include <stdlib.h>
652-
#include <string.h>
653-
#include <stdio.h>
654-
655653
void *v__arr_do_grow(void *a, size_t elem_size, size_t n) {
656654
if (!a) {
657655
n = n < V_ARR_START_SIZE ? V_ARR_START_SIZE : n;
@@ -670,15 +668,6 @@ void *v__arr_do_grow(void *a, size_t elem_size, size_t n) {
670668
return &arr[1];
671669
}
672670

673-
#define v_arr_add_n___(A, items, N) \
674-
(v__arr_ensure((A), N), memcpy(A + v__arr_head(A)->n, items, N * sizeof(items[0])), v__arr_head(A)->n += N)
675-
676-
void v__arr_add_n(void *a, void *elems, size_t elem_size, size_t n) {
677-
v__arr_ensure(a, n);
678-
memcpy(a + v__arr_head(a)->n * elem_size, elems, n * elem_size);
679-
v__arr_head(a)->n += n;
680-
}
681-
682671
void *v__arr_trim(void *a) {
683672
struct v_arr *arr = v__arr_head(a);
684673
if (arr->n == arr->cap)

0 commit comments

Comments
 (0)