ggs_string.cpp
#include "ggs_string.h"
namespace G
{
String::String() :
data()
{
c_str = "";
n = 1;
is_loaded = false;
}
String::String( const char* s ) :
String()
{
c_str = s;
n = 0;
while( s[n] ) ++n;
++n;
}
const char* get( String s )
{
if( !s.is_loaded ) return s.c_str;
const char* c = (const char*)s.data.ptr;
return c;
}
String operator+(const String& a, const String& b)
{
if( !a.n ) return b;
if( !b.n ) return a;
String c;
u32 n = a.n + b.n - 1;
if( add( &c.data, n ) )
{
s8* concat = c.data.ptr + a.n;
u32 i, j = a.n-1;
for( i=0; i<j; ++i )
c.data.ptr[i] = (s8)(a.c_str[i]);
for( i=0; i<b.n; ++i )
c.data.ptr[j+i] = (s8)(b.c_str[i]);
c.is_loaded = true;
c.n = n;
c.c_str = (const char*)c.data.ptr;
}
return c;
}
String& operator+=( String& a, const String& b)
{
return a = a + b;
}
}
#ifndef GGS_STRING_H_INCLUDED
#define GGS_STRING_H_INCLUDED
#include "../Memory/ggs_dynamic_list.h"
namespace G
{
struct String
{
const char* c_str;
List<s8> data;
b32 is_loaded;
u32 n;
String();
String( const char* s );
};
const char* get( String s );
String operator+(const String& a, const String& b);
String& operator+=( String& a, const String& b);
}
#endif // GGS_STRING_H_INCLUDED