From 2aaef48c5c362bb3e04d0c9cd1e722e21b3755e5 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 5 Aug 2016 00:54:05 +0100 Subject: String support --- src/common.cpp | 80 ++++------------------------------------------------------ 1 file changed, 5 insertions(+), 75 deletions(-) (limited to 'src/common.cpp') diff --git a/src/common.cpp b/src/common.cpp index fa99247c3..d1905f1e8 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -2,78 +2,7 @@ #define GB_IMPLEMENTATION #include "gb/gb.h" -// NOTE(bill): Used for UTF-8 strings -typedef struct String { - u8 *text; - isize len; -} String; -// NOTE(bill): used for printf style arguments -#define LIT(x) (x).len, (x).text - - - - -gb_inline String make_string(u8 *text, isize len) { - String s; - s.text = text; - if (len < 0) - len = gb_strlen(cast(char *)text); - s.len = len; - return s; -} - -gb_inline String make_string(char *text) { - return make_string(cast(u8 *)cast(void *)text, gb_strlen(text)); -} - -gb_inline b32 are_strings_equal(String a, String b) { - if (a.len == b.len) { - return gb_memcompare(a.text, b.text, a.len) == 0; - } - return false; -} - -gb_inline b32 are_strings_equal_ignore_case(String a, String b) { - if (a.len == b.len) { - for (isize i = 0; i < a.len; i++) { - char x = cast(char)a.text[i]; - char y = cast(char)b.text[i]; - if (gb_char_to_lower(x) != gb_char_to_lower(y)) - return false; - } - return true; - } - return false; -} - - -gb_inline isize string_extension_position(String str) { - isize dot_pos = -1; - isize i = str.len; - b32 seen_dot = false; - while (i --> 0) { - if (str.text[i] == GB_PATH_SEPARATOR) - break; - if (str.text[i] == '.') { - dot_pos = i; - break; - } - } - - return dot_pos; -} - -gb_inline b32 string_has_extension(String str, String ext) { - if (str.len > ext.len+1) { - u8 *s = str.text+str.len - ext.len-1; - if (s[0] == '.') { - s++; - return gb_memcompare(s, ext.text, ext.len) == 0; - } - return false; - } - return false; -} +#include "string.cpp" // Hasing @@ -86,7 +15,8 @@ gb_inline u64 hash_string(String s) { } gb_inline u64 hash_pointer(void *ptr) { - u64 p = cast(u64)cast(uintptr)ptr; + uintptr u = cast(uintptr)ptr; + u64 p = cast(u64)u; return p; } @@ -125,9 +55,9 @@ typedef struct MapFindResult { template struct MapEntry { - u64 key; + u64 key; isize next; - T value; + T value; }; template -- cgit v1.2.3