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:
| M | jrk.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;
}