mirror of
https://github.com/Ed94/gencpp.git
synced 2025-06-15 03:01:47 -07:00
String member definitions not longer used in the base project
This commit is contained in:
@ -1099,10 +1099,10 @@ String csv_write_string_delimiter( AllocatorInfo a, CSV_Object* obj, char delimi
|
||||
FileInfo tmp;
|
||||
file_stream_new( &tmp, a );
|
||||
csv_write_delimiter( &tmp, obj, delimiter );
|
||||
|
||||
|
||||
ssize fsize;
|
||||
u8* buf = file_stream_buf( &tmp, &fsize );
|
||||
String output = String::make_length( a, ( char* )buf, fsize );
|
||||
String output = string_make_length( a, ( char* )buf, fsize );
|
||||
file_close( &tmp );
|
||||
return output;
|
||||
}
|
||||
|
@ -1,5 +1,3 @@
|
||||
#define GEN_SUPPORT_CPP_MEMBER_FEATURES 0
|
||||
|
||||
#ifdef GEN_INTELLISENSE_DIRECTIVES
|
||||
# pragma once
|
||||
#endif
|
||||
|
@ -422,7 +422,7 @@ neverinline ssize str_fmt_va( char* text, ssize max_len, char const* fmt, va_lis
|
||||
{
|
||||
String gen_str = String { va_arg( va, char*) };
|
||||
|
||||
info.precision = gen_str.length();
|
||||
info.precision = length(gen_str);
|
||||
len = _print_string( text, remaining, &info, gen_str );
|
||||
}
|
||||
break;
|
||||
|
@ -8,7 +8,7 @@
|
||||
// Constant string with length.
|
||||
struct StrC
|
||||
{
|
||||
ssize Len;
|
||||
ssize Len;
|
||||
char const* Ptr;
|
||||
|
||||
operator char const* () const { return Ptr; }
|
||||
@ -28,10 +28,14 @@ StrC to_str( char const* str ) {
|
||||
// They used a header pattern
|
||||
// I kept it for simplicty of porting but its not necessary to keep it that way.
|
||||
#pragma region String
|
||||
struct String;
|
||||
struct StringHeader;
|
||||
|
||||
// Forward declarations for all file-scope functions
|
||||
#if GEN_COMPILER_C
|
||||
typedef char* String;
|
||||
#else
|
||||
struct String;
|
||||
#endif
|
||||
|
||||
String string_make(AllocatorInfo allocator, char const* str);
|
||||
String string_make(AllocatorInfo allocator, StrC str);
|
||||
String string_make_reserve(AllocatorInfo allocator, ssize capacity);
|
||||
@ -73,11 +77,33 @@ struct StringHeader {
|
||||
ssize Length;
|
||||
};
|
||||
|
||||
#if ! GEN_COMPILER_C
|
||||
struct String
|
||||
{
|
||||
char* Data;
|
||||
|
||||
#if 1
|
||||
forceinline operator bool() { return Data != nullptr; }
|
||||
forceinline operator char*() { return Data; }
|
||||
forceinline operator char const*() const { return Data; }
|
||||
forceinline operator StrC() const { return { length(* this), Data }; }
|
||||
|
||||
String const& operator=(String const& other) const {
|
||||
if (this == &other)
|
||||
return *this;
|
||||
|
||||
String* this_ = ccast(String*, this);
|
||||
this_->Data = other.Data;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
forceinline char& operator[](ssize index) { return Data[index]; }
|
||||
forceinline char const& operator[](ssize index) const { return Data[index]; }
|
||||
|
||||
forceinline char* begin() const { return Data; }
|
||||
forceinline char* end() const { return Data + length(* this); }
|
||||
|
||||
#if GEN_SUPPORT_CPP_MEMBER_FEATURES
|
||||
#pragma region Member Mapping
|
||||
forceinline static String make(AllocatorInfo allocator, char const* str) { return GEN_NS string_make(allocator, str); }
|
||||
forceinline static String make(AllocatorInfo allocator, StrC str) { return GEN_NS string_make(allocator, str); }
|
||||
@ -143,30 +169,14 @@ struct String
|
||||
|
||||
return GEN_NS append(*this, buf, res);
|
||||
}
|
||||
|
||||
forceinline operator bool() { return Data != nullptr; }
|
||||
forceinline operator char*() { return Data; }
|
||||
forceinline operator char const*() const { return Data; }
|
||||
forceinline operator StrC() const { return { length(), Data }; }
|
||||
|
||||
String const& operator=(String const& other) const {
|
||||
if (this == &other)
|
||||
return *this;
|
||||
|
||||
String* this_ = ccast(String*, this);
|
||||
this_->Data = other.Data;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
forceinline char& operator[](ssize index) { return Data[index]; }
|
||||
forceinline char const& operator[](ssize index) const { return Data[index]; }
|
||||
|
||||
forceinline char* begin() const { return Data; }
|
||||
forceinline char* end() const { return Data + length(); }
|
||||
#pragma endregion Member Mapping
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
|
||||
inline char* begin(String& str) { return str; }
|
||||
inline char* end(String& str) { return scast(char*, str) + length(str); }
|
||||
inline char* next(String& str) { return scast(char*, str) + 1; }
|
||||
|
||||
inline
|
||||
usize string_grow_formula(usize value) {
|
||||
@ -247,9 +257,9 @@ bool append(String& str, char const* str_to_append, ssize append_length)
|
||||
|
||||
StringHeader& header = get_header(str);
|
||||
|
||||
mem_copy(str.Data + curr_len, str_to_append, append_length);
|
||||
mem_copy( scast(char*, str) + curr_len, str_to_append, append_length);
|
||||
|
||||
str.Data[curr_len + append_length] = '\0';
|
||||
str[curr_len + append_length] = '\0';
|
||||
|
||||
header.Length = curr_len + append_length;
|
||||
}
|
||||
@ -263,7 +273,19 @@ bool append(String& str, StrC str_to_append) {
|
||||
|
||||
inline
|
||||
bool append(String& str, const String other) {
|
||||
return append(str, other.Data, length(other));
|
||||
return append(str, other, length(other));
|
||||
}
|
||||
|
||||
bool append_fmt(String& str, char const* fmt, ...) {
|
||||
ssize res;
|
||||
char buf[GEN_PRINTF_MAXLEN] = { 0 };
|
||||
|
||||
va_list va;
|
||||
va_start(va, fmt);
|
||||
res = str_fmt_va(buf, count_of(buf) - 1, fmt, va) - 1;
|
||||
va_end(va);
|
||||
|
||||
return append(str, buf, res);
|
||||
}
|
||||
|
||||
inline
|
||||
@ -294,7 +316,7 @@ bool are_equal(String lhs, StrC rhs)
|
||||
|
||||
inline
|
||||
ssize avail_space(String const& str) {
|
||||
StringHeader const& header = *rcast(StringHeader const*, str.Data - sizeof(StringHeader));
|
||||
StringHeader const& header = *rcast(StringHeader const*, scast(char const*, str) - sizeof(StringHeader));
|
||||
return header.Capacity - header.Length;
|
||||
}
|
||||
|
||||
@ -306,7 +328,7 @@ char& back(String& str) {
|
||||
inline
|
||||
bool contains(String const& str, StrC substring)
|
||||
{
|
||||
StringHeader const& header = *rcast(StringHeader const*, str.Data - sizeof(StringHeader));
|
||||
StringHeader const& header = *rcast(StringHeader const*, scast(char const*, str) - sizeof(StringHeader));
|
||||
|
||||
if (substring.Len > header.Length)
|
||||
return false;
|
||||
@ -326,7 +348,7 @@ bool contains(String const& str, StrC substring)
|
||||
inline
|
||||
bool contains(String const& str, String const& substring)
|
||||
{
|
||||
StringHeader const& header = *rcast(StringHeader const*, str.Data - sizeof(StringHeader));
|
||||
StringHeader const& header = *rcast(StringHeader const*, scast(char const*, str) - sizeof(StringHeader));
|
||||
|
||||
if (length(substring) > header.Length)
|
||||
return false;
|
||||
@ -345,7 +367,7 @@ bool contains(String const& str, String const& substring)
|
||||
|
||||
inline
|
||||
ssize capacity(String const& str) {
|
||||
StringHeader const& header = *rcast(StringHeader const*, str.Data - sizeof(StringHeader));
|
||||
StringHeader const& header = *rcast(StringHeader const*, scast(char const*, str) - sizeof(StringHeader));
|
||||
return header.Capacity;
|
||||
}
|
||||
|
||||
@ -356,7 +378,7 @@ void clear(String& str) {
|
||||
|
||||
inline
|
||||
String duplicate(String const& str, AllocatorInfo allocator) {
|
||||
return string_make_length(allocator, str.Data, length(str));
|
||||
return string_make_length(allocator, str, length(str));
|
||||
}
|
||||
|
||||
inline
|
||||
@ -376,7 +398,7 @@ StringHeader& get_header(String& str) {
|
||||
inline
|
||||
ssize length(String const& str)
|
||||
{
|
||||
StringHeader const& header = *rcast(StringHeader const*, str.Data - sizeof(StringHeader));
|
||||
StringHeader const& header = *rcast(StringHeader const*, scast(char const*, str) - sizeof(StringHeader));
|
||||
return header.Length;
|
||||
}
|
||||
|
||||
@ -511,10 +533,10 @@ void trim_space(String& str) {
|
||||
inline
|
||||
String visualize_whitespace(String const& str)
|
||||
{
|
||||
StringHeader* header = (StringHeader*)(str.Data - sizeof(StringHeader));
|
||||
StringHeader* header = (StringHeader*)(scast(char const*, str) - sizeof(StringHeader));
|
||||
String result = string_make_reserve(header->Allocator, length(str) * 2); // Assume worst case for space requirements.
|
||||
|
||||
for (char c : str) switch (c)
|
||||
for (auto c : str) switch (c)
|
||||
{
|
||||
case ' ':
|
||||
append(result, txt("·"));
|
||||
@ -549,10 +571,10 @@ struct String_POD {
|
||||
static_assert( sizeof( String_POD ) == sizeof( String ), "String is not a POD" );
|
||||
|
||||
// Implements basic string interning. Data structure is based off the ZPL Hashtable.
|
||||
using StringTable = HashTable<String const>;
|
||||
typedef HashTable<String const> StringTable;
|
||||
|
||||
// Represents strings cached with the string table.
|
||||
// Should never be modified, if changed string is desired, cache_string( str ) another.
|
||||
using StringCached = String const;
|
||||
typedef String const StringCached;
|
||||
|
||||
#pragma endregion Strings
|
||||
|
Reference in New Issue
Block a user