82 lines
1.8 KiB
C++
82 lines
1.8 KiB
C++
// #TODO: Integrate Allocator / context.allocator
|
|
|
|
#include "Base_String.h"
|
|
|
|
#include "General_Purpose_Allocator.h"
|
|
#include <stdio.h> // vsnprintf
|
|
#include <cstdarg> // va_list, ...
|
|
|
|
bool is_c_string(string n_string) {
|
|
return (n_string.data && n_string.data[n_string.count] == '\0');
|
|
}
|
|
|
|
bool is_valid(string n_string) {
|
|
return (n_string.data != nullptr && n_string.count > 0);
|
|
}
|
|
|
|
string format_string(char* format, ...) {
|
|
constexpr s64 BUFFER_SIZE = 1024;
|
|
|
|
string str = {0};
|
|
|
|
str.data = ALLOCATE_RAW_ARRAY(BUFFER_SIZE, u8);
|
|
|
|
va_list args;
|
|
va_start(args, format);
|
|
// Note that this *is* null-terminated for compatibility.
|
|
str.count = (s64)vsnprintf((char*)str.data, (size_t)BUFFER_SIZE, format, args);
|
|
va_end(args);
|
|
|
|
return str;
|
|
}
|
|
|
|
string copy_string(string original_string) {
|
|
string str = {0};
|
|
|
|
str.data = ALLOCATE_RAW_ARRAY(original_string.count + 1, u8);
|
|
memcpy(str.data, original_string.data, original_string.count);
|
|
str.count = original_string.count;
|
|
|
|
return str;
|
|
}
|
|
|
|
string copy_string(char* c_string) {
|
|
string str = {0};
|
|
s64 string_length = strlen(c_string);
|
|
|
|
str.data = ALLOCATE_RAW_ARRAY(string_length + 1, u8);
|
|
memcpy(str.data, c_string, string_length);
|
|
str.count = string_length;
|
|
|
|
return str;
|
|
}
|
|
|
|
bool strings_match(string first_string, string second_string) {
|
|
if (first_string.count != second_string.count) {
|
|
return false;
|
|
}
|
|
|
|
for (s64 i = 0; i < first_string.count; i += 1) {
|
|
if (first_string.data[i] != second_string.data[i]) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
string string_from_literal(char* literal) {
|
|
string new_string;
|
|
new_string.count = strlen(literal);
|
|
new_string.data = (u8*) literal;
|
|
|
|
return new_string;
|
|
}
|
|
|
|
void free(string& n_string) {
|
|
// #TODO: Get context allocator?
|
|
GPAllocator_Delete(n_string.data);
|
|
|
|
n_string.data = nullptr;
|
|
n_string.count = 0;
|
|
} |