diff options
| author | Jake Koroman <jake@jakekoroman.com> | 2026-01-03 12:55:49 -0500 |
|---|---|---|
| committer | Jake Koroman <jake@jakekoroman.com> | 2026-01-03 12:55:49 -0500 |
| commit | f4b9941e7f71686cb59f4aaa8e4f1cbd2b8bfb67 (patch) | |
| tree | d6a264b509ab33260cce5b502f114aa58c4a0ca6 /jrk.h | |
| parent | 65df062e8ad1eacf7ebb1b957aa533eee335c59e (diff) | |
add jrk_sv_equals functions.
Diffstat (limited to 'jrk.h')
| -rw-r--r-- | jrk.h | 31 |
1 files changed, 28 insertions, 3 deletions
@@ -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; } |
