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
170172void * 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 );
172173void * v__arr_trim (void * a );
173174void * v__arr_copy (const void * const a );
174175void 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-
655653void * 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-
682671void * v__arr_trim (void * a ) {
683672 struct v_arr * arr = v__arr_head (a );
684673 if (arr -> n == arr -> cap )
0 commit comments