diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-05-09 02:48:06 +0200 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-05-09 02:48:06 +0200 |
commit | 085b77730a553ce9769fcc76b68772dbde564004 (patch) | |
tree | 328ae4f715300cb5c028ad0e7ffc2e13a5c9c72a /include | |
parent | 20fa17a5f2a286f44bdafff6dc4bb58e7667fe46 (diff) |
Add custom allocator support to u8upper()
Diffstat (limited to 'include')
-rw-r--r-- | include/_alloc_fn.h | 3 | ||||
-rw-r--r-- | include/alloc.h | 5 | ||||
-rw-r--r-- | include/unicode/string.h | 17 |
3 files changed, 15 insertions, 10 deletions
diff --git a/include/_alloc_fn.h b/include/_alloc_fn.h index 0ff6b58..09a792d 100644 --- a/include/_alloc_fn.h +++ b/include/_alloc_fn.h @@ -1,6 +1,7 @@ #ifndef MLIB__ALLOC_FN_H #define MLIB__ALLOC_FN_H -typedef void *(*alloc_fn)(void *ctx, void *ptr, size_t old, size_t new); +typedef void *(*alloc_fn)(void *ctx, void *ptr, size_t old, size_t new, + size_t align); #endif /* !MLIB__ALLOC_FN_H */ diff --git a/include/alloc.h b/include/alloc.h index 57e7f59..966361e 100644 --- a/include/alloc.h +++ b/include/alloc.h @@ -20,9 +20,9 @@ typedef struct { size_t _init; } arena; +/* Heap allocation functions */ [[nodiscard, gnu::returns_nonnull]] void *bufalloc(void *, size_t, size_t); [[nodiscard]] void *bufalloc_noterm(void *, size_t, size_t); -[[nodiscard]] void *heapalloc(void *, void *, size_t, size_t); [[_mlib_pure, _mlib_inline]] static inline arena @@ -44,4 +44,7 @@ void arena_free(arena *); #define arena_resz(a, T, p, n) \ ((T *)arena_realloc((a), (p), (n), sizeof(T), alignof(T))) +[[nodiscard]] void *alloc_arena(void *, void *, size_t, size_t, size_t); +[[nodiscard]] void *alloc_heap(void *, void *, size_t, size_t, size_t); + #endif /* !MLIB_ALLOC_H */ diff --git a/include/unicode/string.h b/include/unicode/string.h index 60eb972..7da4385 100644 --- a/include/unicode/string.h +++ b/include/unicode/string.h @@ -3,6 +3,7 @@ #include <stddef.h> +#include "_alloc_fn.h" #include "_charN_t.h" #include "_u8view.h" @@ -29,14 +30,14 @@ size_t u8gnext(struct u8view *, struct u8view *); size_t u8wnext(struct u8view *, struct u8view *); size_t u8wnext_human(struct u8view *, struct u8view *); -[[mlib_warn_trunc]] size_t u8casefold(char8_t *restrict, size_t, struct u8view, - enum caseflags); -[[mlib_warn_trunc]] size_t u8lower(char8_t *restrict, size_t, struct u8view, - enum caseflags); -[[mlib_warn_trunc]] size_t u8title(char8_t *restrict, size_t, struct u8view, - enum caseflags); -[[mlib_warn_trunc]] size_t u8upper(char8_t *restrict, size_t, struct u8view, - enum caseflags); +[[mlib_warn_trunc]] +size_t u8casefold(char8_t *restrict, size_t, struct u8view, enum caseflags); +[[mlib_warn_trunc]] +size_t u8lower(char8_t *restrict, size_t, struct u8view, enum caseflags); +[[mlib_warn_trunc]] +size_t u8title(char8_t *restrict, size_t, struct u8view, enum caseflags); +[[nodiscard]] +char8_t *u8upper(size_t *, struct u8view, enum caseflags, alloc_fn, void *); constexpr double U8LOWER_SCALE = 1.5; constexpr double U8LOWER_SCALE_LT = 3; |