diff options
Diffstat (limited to 'src/lisiblestd')
| -rw-r--r-- | src/lisiblestd/string.c | 32 | ||||
| -rw-r--r-- | src/lisiblestd/string.h | 13 |
2 files changed, 34 insertions, 11 deletions
diff --git a/src/lisiblestd/string.c b/src/lisiblestd/string.c index 3de3272..2b191b2 100644 --- a/src/lisiblestd/string.c +++ b/src/lisiblestd/string.c @@ -4,21 +4,18 @@ #include <string.h> -bool String_from_str(Allocator *allocator, String *string, const char *str) { +String String_new(Allocator *allocator, const char *str) { LSTD_ASSERT(allocator != NULL); - LSTD_ASSERT(string != NULL); LSTD_ASSERT(str != NULL); usize length = strlen(str); - char *value = Allocator_allocate_array(allocator, length + 1, sizeof(char)); - if (!value) { - return false; - } + char *value = Allocator_allocate(allocator, length + 1); + LSTD_ASSERT(value != NULL); + + strncpy(value, str, length); value[length] = '\0'; - string->value = value; - string->length = length; - return true; + return (String){.value = value, .length = length}; } void String_destroy(Allocator *allocator, String *string) { @@ -27,7 +24,24 @@ void String_destroy(Allocator *allocator, String *string) { Allocator_free(allocator, string->value); } +bool String_eq(const String *lhs, const String *rhs) { + if (lhs == NULL || rhs == NULL || lhs->length != rhs->length) { + return false; + } + + return strncmp(lhs->value, rhs->value, lhs->length) == 0; +} + +StringView String_view(const String *str) { + return (StringView){.value = str->value, .length = str->length}; +} + usize String_length(const String *string) { LSTD_ASSERT(string != NULL); return string->length; } + +StringView StringView_from_str(const char *data) { + LSTD_ASSERT(data != NULL); + return (StringView){.value = data, .length = strlen(data)}; +} diff --git a/src/lisiblestd/string.h b/src/lisiblestd/string.h index 79ee6b8..cc7f3f4 100644 --- a/src/lisiblestd/string.h +++ b/src/lisiblestd/string.h @@ -9,11 +9,20 @@ struct String { char *value; usize length; }; - typedef struct String String; +typedef struct StringView StringView; -bool String_from_str(Allocator *allocator, String *string, const char *str); +String String_new(Allocator *allocator, const char *str); void String_destroy(Allocator *allocator, String *string); +bool String_eq(const String *lhs, const String *rhs); +StringView String_view(const String *str); usize String_length(const String *string); +struct StringView { + const char *value; + usize length; +}; + +StringView StringView_from_str(const char *data); + #endif // LSTD_STRING_H |
