From 3a3b537f3a730dd2eac044ad99f5b04e132937f7 Mon Sep 17 00:00:00 2001 From: ForeverZer0 Date: Thu, 19 Nov 2020 02:13:46 -0500 Subject: [PATCH 1/3] Added custom memory allocator macros --- src/vec.c | 8 ++++---- src/vec.h | 12 +++++++++++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/vec.c b/src/vec.c index 399104e..4ef9b9d 100644 --- a/src/vec.c +++ b/src/vec.c @@ -12,7 +12,7 @@ int vec_expand_(char **data, int *length, int *capacity, int memsz) { if (*length + 1 > *capacity) { void *ptr; int n = (*capacity == 0) ? 1 : *capacity << 1; - ptr = realloc(*data, n * memsz); + ptr = VEC_REALLOC(*data, n * memsz); if (ptr == NULL) return -1; *data = ptr; *capacity = n; @@ -24,7 +24,7 @@ int vec_expand_(char **data, int *length, int *capacity, int memsz) { int vec_reserve_(char **data, int *length, int *capacity, int memsz, int n) { (void) length; if (n > *capacity) { - void *ptr = realloc(*data, n * memsz); + void *ptr = VEC_REALLOC(*data, n * memsz); if (ptr == NULL) return -1; *data = ptr; *capacity = n; @@ -45,14 +45,14 @@ int vec_reserve_po2_( int vec_compact_(char **data, int *length, int *capacity, int memsz) { if (*length == 0) { - free(*data); + VEC_FREE(*data); *data = NULL; *capacity = 0; return 0; } else { void *ptr; int n = *length; - ptr = realloc(*data, n * memsz); + ptr = VEC_REALLOC(*data, n * memsz); if (ptr == NULL) return -1; *capacity = n; *data = ptr; diff --git a/src/vec.h b/src/vec.h index 2430611..a29c55c 100644 --- a/src/vec.h +++ b/src/vec.h @@ -27,7 +27,7 @@ #define vec_deinit(v)\ - ( free((v)->data),\ + ( VEC_FREE((v)->data),\ vec_init(v) ) @@ -155,6 +155,16 @@ --(iter)) +#if defined(VEC_FREE) && (defined(VEC_REALLOC) +// Both defined, no error +#elif !defined(VEC_REALLOC) && !defined(VEC_FREE) +// Neither defined, use stdlib +#define VEC_FREE(x) free +#define VEC_REALLOC(x) realloc +#else +#error "Must define all or none of VEC_FREE and VEC_REALLOC." +#endif + int vec_expand_(char **data, int *length, int *capacity, int memsz); int vec_reserve_(char **data, int *length, int *capacity, int memsz, int n); From d020629d6a1910770f20513f3b23a4ab8098a6e3 Mon Sep 17 00:00:00 2001 From: ForeverZer0 Date: Thu, 19 Nov 2020 02:18:42 -0500 Subject: [PATCH 2/3] Updated README.md --- README.md | 3 +++ src/vec.h | 1 + 2 files changed, 4 insertions(+) diff --git a/README.md b/README.md index 8ba3e8b..7156c7b 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,9 @@ on it. This will free any memory the vector allocated during use. vec_deinit(&v); ``` +To use your own custom memory allocator, define both `VEC_FREE` and `VEC_REALLOC` +before including `vec.h`, and they will be used instead of the standard library's +`free` and `realloc`. ## Types vec.h provides the following predefined vector types: diff --git a/src/vec.h b/src/vec.h index a29c55c..e1d7e59 100644 --- a/src/vec.h +++ b/src/vec.h @@ -155,6 +155,7 @@ --(iter)) + #if defined(VEC_FREE) && (defined(VEC_REALLOC) // Both defined, no error #elif !defined(VEC_REALLOC) && !defined(VEC_FREE) From 90b9be681553a5d4ac8843bca9f57fdaa6aae8c3 Mon Sep 17 00:00:00 2001 From: Eric Freed Date: Tue, 29 Dec 2020 00:19:12 +0000 Subject: [PATCH 3/3] Update vec.h Fixed macro --- src/vec.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/vec.h b/src/vec.h index e1d7e59..d07fb05 100644 --- a/src/vec.h +++ b/src/vec.h @@ -156,12 +156,12 @@ -#if defined(VEC_FREE) && (defined(VEC_REALLOC) +#if defined(VEC_FREE) && defined(VEC_REALLOC) // Both defined, no error #elif !defined(VEC_REALLOC) && !defined(VEC_FREE) // Neither defined, use stdlib -#define VEC_FREE(x) free -#define VEC_REALLOC(x) realloc +#define VEC_FREE free +#define VEC_REALLOC realloc #else #error "Must define all or none of VEC_FREE and VEC_REALLOC." #endif