Crazy Star
Crazy Star
Posts

143

Following

66

Followers

72

Exploding infinitely

Joined on August 7, 2005, 1:09 AM Visited on March 20, 2019, 8:15 PM
Badges

String blog

by Crazy Star


Posted on February 21, 2019 at 9:07 PM


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;
  }
}



ggs_string.h
#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