#if !defined( INCLUDED_STRING_STRING_H )
#define INCLUDED_STRING_STRING_H
+#include "globaldefs.h"
+
/// \file
/// C-style null-terminated-character-array string library.
/// Returns 0 if \p string is lexicographically equal to \p other after converting both to lower-case.
/// O(n)
inline int string_compare_nocase( const char* string, const char* other ){
-#ifdef WIN32
+#if GDEF_OS_WINDOWS
return _stricmp( string, other );
#else
return strcasecmp( string, other );
/// Treats all ascii characters as lower-case during comparisons.
/// O(n)
inline int string_compare_nocase_n( const char* string, const char* other, std::size_t n ){
-#ifdef WIN32
+#if GDEF_OS_WINDOWS
return _strnicmp( string, other, n );
#else
return strncasecmp( string, other, n );
return string_new( length, allocator );
}
+/// \brief Allocates a new buffer large enough to hold two concatenated strings and fills it with strings.
+inline char* string_new_concat( const char* a, const char* b ){
+ char* str = string_new( string_length( a ) + string_length( b ) );
+ strcpy( str, a );
+ strcat( str, b );
+ return str;
+}
+
/// \brief Deallocates the \p buffer large enough to hold \p length characters.
inline void string_release( char* string, std::size_t length ){
DefaultAllocator<char> allocator;