#pragma once #include #include "typedef.h" constexpr U32 strlen_ct( const char* str ) { U32 len = 0; for( ; !!str[len]; ++len ); return len; } template struct STR { char data[N]{ 0 }; enum { size = N }; STR() { memset( data, 0, N ); } STR( const char* str ) { memcpy( data, str, strlen_ct( str ) ); } STR( const STR& str ) { memcpy( data, str.data, N ); } template auto operator+( const STR& rhs ) { constexpr U32 l1 = strlen_ct( data ); constexpr U32 l2 = strlen_ct( rhs.data ); constexpr U32 high = N > other ? N : other; constexpr U32 max = (l1 + l2 > high) ? l1 + l2 + 1 : high; STR result; memcpy( result.data, data, l1 ); memcpy( result.data + l1, rhs.data, l2 ); result.data[l1 + l2] = '\0'; return result; } template auto concat( const STR& str ) { return *this + str; } operator char*() { return data; } };