summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jrk.h55
1 files changed, 29 insertions, 26 deletions
diff --git a/jrk.h b/jrk.h
index c2f841b..b5365d3 100644
--- a/jrk.h
+++ b/jrk.h
@@ -193,7 +193,7 @@ typedef void *(*jrk_array_realloc_function_t) (void*, u64, u64, void*);
#define __jrk_array_alloc(arr, count, len) (arr)->allocfn ? (arr)->allocfn((count), (len), (arr)->allocfn_user) : JRK_ARRAY_DEFAULT_ALLOC_FN((count), (len))
#define __jrk_array_realloc(arr, _len) (arr)->reallocfn ? (arr)->reallocfn((arr)->items, (arr)->len * sizeof((arr)->items[0]), (_len), (arr)->allocfn_user) : JRK_ARRAY_DEFAULT_REALLOC_FN((arr)->items, (_len))
-#define jrk_array_prototype(type) \
+#define jrk_array_prototype(type, fnname, typename) \
typedef struct { \
type *items; \
u64 len; \
@@ -201,17 +201,17 @@ typedef void *(*jrk_array_realloc_function_t) (void*, u64, u64, void*);
jrk_array_alloc_function_t allocfn; \
jrk_array_realloc_function_t reallocfn; \
void *allocfn_user; \
- } jrk_Array_##type; \
+ } jrk_Array_##typename; \
\
- bool jrk_array_##type##_init_ex(jrk_Array_##type*, u64, jrk_array_alloc_function_t, jrk_array_realloc_function_t, void*); \
- bool jrk_array_##type##_init(jrk_Array_##type*, u64); \
- void jrk_array_##type##_deinit(jrk_Array_##type*); \
- bool jrk_array_##type##_setcap(jrk_Array_##type*, u64); \
- bool jrk_array_##type##_push(jrk_Array_##type*, type); \
- bool jrk_array_##type##_pushn(jrk_Array_##type*, const type*, u64)
-
-#define jrk_array_impl(type) \
- bool jrk_array_##type##_init_ex(jrk_Array_##type *arr, u64 capacity, jrk_array_alloc_function_t allocfn, jrk_array_realloc_function_t reallocfn, void *allocfn_user) \
+ bool jrk_array_##fnname##_init_ex(jrk_Array_##typename*, u64, jrk_array_alloc_function_t, jrk_array_realloc_function_t, void*); \
+ bool jrk_array_##fnname##_init(jrk_Array_##typename*, u64); \
+ void jrk_array_##fnname##_destroy(jrk_Array_##typename*); \
+ bool jrk_array_##fnname##_setcap(jrk_Array_##typename*, u64); \
+ bool jrk_array_##fnname##_push(jrk_Array_##typename*, type); \
+ bool jrk_array_##fnname##_pushn(jrk_Array_##typename*, const type*, u64);
+
+#define jrk_array_impl(type, fnname, typename) \
+ bool jrk_array_##fnname##_init_ex(jrk_Array_##typename *arr, u64 capacity, jrk_array_alloc_function_t allocfn, jrk_array_realloc_function_t reallocfn, void *allocfn_user) \
{ \
(arr)->allocfn = (allocfn) ? (allocfn) : NULL; \
(arr)->reallocfn = (reallocfn) ? (reallocfn) : NULL; \
@@ -224,18 +224,18 @@ typedef void *(*jrk_array_realloc_function_t) (void*, u64, u64, void*);
return true; \
} \
\
- bool jrk_array_##type##_init(jrk_Array_##type *arr, u64 capacity) \
+ bool jrk_array_##fnname##_init(jrk_Array_##typename *arr, u64 capacity) \
{ \
- return jrk_array_##type##_init_ex(arr, capacity, NULL, NULL, NULL); \
+ return jrk_array_##fnname##_init_ex(arr, capacity, NULL, NULL, NULL); \
} \
\
- void jrk_array_##type##_deinit(jrk_Array_##type *arr) \
+ void jrk_array_##fnname##_destroy(jrk_Array_##typename *arr) \
{ \
if ((arr)->items && !(arr)->allocfn) \
JRK_ARRAY_DEFAULT_FREE_FN((arr)->items); \
} \
\
- bool jrk_array_##type##_setcap(jrk_Array_##type *arr, u64 new_capacity) \
+ bool jrk_array_##fnname##_setcap(jrk_Array_##typename *arr, u64 new_capacity) \
{ \
if (new_capacity < (arr)->capacity) return false; \
(arr)->items = __jrk_array_realloc((arr), new_capacity * sizeof(type)); \
@@ -245,7 +245,7 @@ typedef void *(*jrk_array_realloc_function_t) (void*, u64, u64, void*);
return true; \
} \
\
- bool jrk_array_##type##_push(jrk_Array_##type *arr, type val) \
+ bool jrk_array_##fnname##_push(jrk_Array_##typename *arr, type val) \
{ \
if ((arr)->len+ 1 > (arr)->capacity) { \
while ((arr)->len + 1 > ((arr)->capacity)) \
@@ -257,7 +257,7 @@ typedef void *(*jrk_array_realloc_function_t) (void*, u64, u64, void*);
return true; \
} \
\
- bool jrk_array_##type##_pushn(jrk_Array_##type *arr, const type *vals, u64 count) \
+ bool jrk_array_##fnname##_pushn(jrk_Array_##typename *arr, const type *vals, u64 count) \
{ \
if ((arr)->len+ count > (arr)->capacity) { \
while ((arr)->len+ count > ((arr)->capacity)) \
@@ -271,19 +271,23 @@ typedef void *(*jrk_array_realloc_function_t) (void*, u64, u64, void*);
return true; \
}
+#define jrk_array_prototype_and_impl(type, fnname, typename) \
+ jrk_array_prototype(type, fnname, typename); \
+ jrk_array_impl(type, fnname, typename)
+
#define jrk_array_foreach(type, it, arr) for (type *it = (arr)->items; it < (arr)->items + (arr)->len; ++it)
-jrk_array_prototype(char);
-typedef jrk_Array_char jrk_String_Builder;
+jrk_array_prototype(char, string_builder, String_Builder)
+typedef jrk_Array_String_Builder jrk_String_Builder;
-#define jrk_sb_append_null(sb) jrk_array_char_push((sb), 0)
+#define jrk_sb_append_null(sb) jrk_array_string_builder_push((sb), 0)
#define jrk_sb_append_cstr(sb, str) jrk_sb_appendf((sb), (str))
-#define jrk_sb_append_buf(sb, buf, bufsz) jrk_array_char_pushn((sb), (buf), (bufsz))
+#define jrk_sb_append_buf(sb, buf, bufsz) jrk_array_string_builder_pushn((sb), (buf), (bufsz))
#define jrk_sb_append_string(sb, string) jrk_sb_append_buf((sb), (string).data, (string).len)
#define jrk_sb_append_lit(sb, str_lit) jrk_sb_append_buf((sb), (str_lit), sizeof((str_lit)) - 1)
-#define jrk_sb_init_ex(sb, size, allocfn, reallocfn, userarg) jrk_array_char_init_ex((sb), (size), (allocfn), (reallocfn), (userarg))
+#define jrk_sb_init_ex(sb, size, allocfn, reallocfn, userarg) jrk_array_string_builder_init_ex((sb), (size), (allocfn), (reallocfn), (userarg))
#define jrk_sb_init_arena(sb, size, arena) jrk_sb_init_ex((sb), (size), jrk_array_alloc_function_arena, jrk_array_realloc_function_arena, (void *)(arena))
-#define jrk_sb_deinit(sb) jrk_array_char_deinit((sb))
+#define jrk_sb_destroy(sb) jrk_array_string_builder_destroy((sb))
#define jrk_sb_to_string(sb) jrk_string_from_parts((sb).items, (sb).len)
bool jrk_sb_appendf(jrk_String_Builder*, const char*, ...);
@@ -506,8 +510,7 @@ jrk_align_forward(uintptr_t ptr, u64 alignment)
return result;
}
-/* NOTE: for jrk_String_Builder */
-jrk_array_impl(char)
+jrk_array_impl(char, string_builder, String_Builder)
void *
jrk_array_alloc_function_arena(u64 size, u64 count, void *user)
@@ -551,7 +554,7 @@ jrk_sb_appendf(jrk_String_Builder *sb, const char *fmt, ...)
actual_sz = buf_sz;
}
- if (!jrk_array_char_pushn(sb, buf, actual_sz)) {
+ if (!jrk_array_string_builder_pushn(sb, buf, actual_sz)) {
jrk_errorv("jrk_sb_appendf(%p, %s): failed to push '%s' into sb", (void *) sb, fmt, fmt);
return false;
}