From 3e5e15a4923c752be703d7afb1214d5e5a767fad Mon Sep 17 00:00:00 2001 From: aura Date: Wed, 25 Feb 2026 08:58:39 +0100 Subject: finish wall collisions (clipvelocity), some utils --- src/util/string.h | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'src/util/string.h') diff --git a/src/util/string.h b/src/util/string.h index b261e76..47da1a0 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -3,9 +3,15 @@ #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]; + char data[N]{ 0 }; enum { size = N }; @@ -13,11 +19,31 @@ struct STR { memset( data, 0, N ); } STR( const char* str ) { - memcpy( data, str, N ); + 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; } }; -- cgit v1.2.3