summaryrefslogtreecommitdiff
path: root/libs/pwyazh/strings.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/pwyazh/strings.h')
-rw-r--r--libs/pwyazh/strings.h103
1 files changed, 103 insertions, 0 deletions
diff --git a/libs/pwyazh/strings.h b/libs/pwyazh/strings.h
new file mode 100644
index 0000000..43ee7c8
--- /dev/null
+++ b/libs/pwyazh/strings.h
@@ -0,0 +1,103 @@
+#ifndef STRINGS_H
+#define STRINGS_H
+
+#define str8_lit(s) str8((U8 *)(s), sizeof(s)-1)
+
+String8
+str8(U8 *str, U64 size)
+{
+ String8 result = { str, size };
+ return(result);
+}
+
+B32
+str8_char_is_slash(U8 c)
+{
+ return((c == '/') || (c == '\\'));
+}
+
+U8
+str8_char_uppercase(U8 c)
+{
+ if (c >= 'a' && c <= 'z') {
+ c += 'A'-'a';
+ }
+ return(c);
+}
+
+U8
+str8_char_lowercase(U8 c)
+{
+ if (c >= 'A' && c <= 'Z') {
+ c -= 'A'-'a';
+ }
+ return(c);
+}
+
+String8
+str8_range(U8 *first, U8 *second)
+{
+ String8 result = { first, (U64)(second-first) };
+ return(result);
+}
+
+String8
+str8_cstring(U8 *cstr)
+{
+ U8 *ptr = cstr;
+ for (; *ptr != 0; ++ptr);
+ String8 result = str8_range(cstr, ptr);
+ return(result);
+}
+
+String8
+str8_prefix(String8 str, U64 size)
+{
+ U64 clamped = ClampTop(size, str.size);
+ String8 result = { str.str, clamped };
+ return(result);
+}
+
+String8
+str8_chop(String8 str, U64 amount)
+{
+ U64 clamped = ClampTop(amount, str.size);
+ U64 remaining = str.size-clamped;
+ String8 result = { str.str, remaining };
+ return(result);
+}
+
+String8
+str8_posfix(String8 str, U64 size)
+{
+ U64 clamped = ClampTop(size, str.size);
+ U64 skip = str.size-clamped;
+ String8 result = { str.str+skip, clamped };
+ return(result);
+}
+
+String8
+str8_skip(String8 str, U64 amount)
+{
+ U64 clamped = ClampTop(amount, str.size);
+ String8 result = { str.str+clamped, str.size-clamped };
+ return(result);
+}
+
+String8
+str8_substr_pos(String8 str, U64 start, U64 end)
+{
+ U64 start_clamped = ClampTop(start, str.size);
+ U64 end_clamped = ClampTop(end, str.size);
+ String8 result = { str.str+start_clamped, end_clamped-start_clamped };
+ return(result);
+}
+
+String8
+str8_substr_size(String8 str, U64 start, U64 size)
+{
+ String8 result = str8_substr_pos(str, start, start+size);
+ return(result);
+}
+
+#endif /* STRINGS_H */