jrk

my own c stdlib to keep myself sane
git clone git://git.jakekoroman.com/jrk
Log | Files | Refs

commit f4b9941e7f71686cb59f4aaa8e4f1cbd2b8bfb67
parent 65df062e8ad1eacf7ebb1b957aa533eee335c59e
Author: Jake Koroman <jake@jakekoroman.com>
Date:   Sat,  3 Jan 2026 12:55:49 -0500

add jrk_sv_equals functions.

Diffstat:
Mjrk.h | 31++++++++++++++++++++++++++++---
1 file changed, 28 insertions(+), 3 deletions(-)

diff --git a/jrk.h b/jrk.h @@ -4,11 +4,12 @@ * that i like. * * TODO: - * - add jrk_StringView compare function. - * * - remove strnlen/strncmp from hm impl. should probably be using * jrk_StringView's * + * - add a log interface to give user control of logging. + * disable completely, log to file, log format, etc. + * * - look at at the jrk_sv_chop_delim_loop stuff. there must * must be a better way of handling things. */ @@ -31,6 +32,8 @@ typedef double f64; #define JRK_UNUSED(x) (void)x #define JRK_ARRLENGTH(arr) (sizeof(arr) / sizeof(arr[0])) +#define JRK_MIN(a, b) ((a) < (b) ? (a) : (b)) +#define JRK_MAX(a, b) ((a) > (b) ? (a) : (b)) #define jrk_return_defer(value) \ do { result = value; goto defer; } while(0) @@ -82,6 +85,8 @@ jrk_StringView jrk_sv_trim_left(jrk_StringView); jrk_StringView jrk_sv_trim(jrk_StringView); jrk_StringView jrk_sv_from_cstr(char*); jrk_StringView jrk_sv_chop_delim(jrk_StringView*, char delim); +bool jrk_sv_equals(jrk_StringView*, jrk_StringView*); // takes the lowest size and matches up to that size +bool jrk_sv_equals_exact(jrk_StringView*, jrk_StringView*); // must be same size to be equals char *jrk_tmpstrings_push(char*); char *jrk_tmpstrings_pushf(char*, ...); @@ -794,10 +799,30 @@ jrk_sv_chop_delim(jrk_StringView *sv, char delim) return result; } +bool +jrk_sv_equals(jrk_StringView *a, jrk_StringView *b) +{ + for (u64 i = 0; i < JRK_MIN(a->size, b->size); ++i) + if (a->data[i] != b->data[i]) return false; + + return true; +} + +bool +jrk_sv_equals_exact(jrk_StringView *a, jrk_StringView *b) +{ + if (a->size != b->size) return false; + + for (u64 i = 0; i < a->size; ++i) + if (a->data[i] != b->data[i]) return false; + + return true; +} + uint64_t jrk_fnv1a_64(uint8_t *data, uint64_t size) { uint64_t result = FNV1A_64_OFFSET_BASIS; - for (uint64_t i = 0; i < size; ++i) { + for (u64 i = 0; i < size; ++i) { result ^= data[i]; result *= FNV1A_64_PRIME; }