summaryrefslogtreecommitdiff
path: root/pkstr.h
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2024-10-11 22:37:13 -0400
committerJonathan Bradley <jcb@pikum.xyz>2024-10-11 22:37:13 -0400
commit7889de050105a9fba827c46eaae767490c75177c (patch)
treebd05d8ec6779e947e45c25887ef31890525b7f51 /pkstr.h
parentb70fe8a9a945b9822d437c09f157a3fd81781617 (diff)
pkstr: add
Diffstat (limited to 'pkstr.h')
-rw-r--r--pkstr.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/pkstr.h b/pkstr.h
new file mode 100644
index 0000000..fc53c49
--- /dev/null
+++ b/pkstr.h
@@ -0,0 +1,84 @@
+#ifndef PK_STR_H
+#define PK_STR_H
+
+#include <stdint.h>
+
+struct pk_str {
+ char *val;
+ uint32_t length;
+ uint32_t reserved;
+};
+struct pk_cstr {
+ const char *val;
+ uint32_t length;
+ uint32_t reserved;
+};
+
+struct pk_str cstring_to_pk_str(char *s);
+struct pk_cstr cstring_to_pk_cstr(const char *s);
+struct pk_str pk_cstr_to_pk_str(const struct pk_cstr *s);
+struct pk_cstr pk_str_to_pk_cstr(const struct pk_str *s);
+int pk_compare_str(const struct pk_str *lhs, const struct pk_str *rhs);
+int pk_compare_cstr(const struct pk_cstr *lhs, const struct pk_cstr *rhs);
+
+#endif /* PK_STR_H */
+
+#ifdef PK_IMPLEMENTATION
+
+#include "./pkmacros.h"
+
+#include <string.h>
+
+struct pk_str
+cstring_to_pk_str(char *s)
+{
+ return (struct pk_str) {
+ .val = s,
+ .length = (uint32_t)(strlen(s)),
+ .reserved = 0,
+ };
+}
+
+struct pk_cstr
+cstring_to_pk_cstr(const char *s)
+{
+ return (struct pk_cstr) {
+ .val = s,
+ .length = (uint32_t)(strlen(s)),
+ .reserved = 0,
+ };
+}
+
+struct pk_str
+pk_cstr_to_pk_str(const struct pk_cstr *s)
+{
+ return (struct pk_str) {
+ .val = (char *)(s->val),
+ .length = s->length,
+ .reserved = s->reserved,
+ };
+}
+
+struct pk_cstr
+pk_str_to_pk_cstr(const struct pk_str *s)
+{
+ return (struct pk_cstr) {
+ .val = (char *)(s->val),
+ .length = s->length,
+ .reserved = s->reserved,
+ };
+}
+
+int
+pk_compare_str(const struct pk_str *lhs, const struct pk_str *rhs)
+{
+ return strncmp(lhs->val, rhs->val, PK_MIN(lhs->length, rhs->length));
+}
+
+int
+pk_compare_cstr(const struct pk_cstr *lhs, const struct pk_cstr *rhs)
+{
+ return strncmp(lhs->val, rhs->val, PK_MIN(lhs->length, rhs->length));
+}
+
+#endif /* PK_IMPLEMENTATION */