7 typedef unsigned int size_t;
12 static const size_t infinite = (size_t)-1;
22 static const int alloc_new = 0;
30 wchar_t*
to_widestr(
const char* src ,
wchar_t* dst = (
wchar_t*)alloc_new );
38 char*
to_charstr(
const wchar_t* src ,
char* dst = (
char*)alloc_new );
41 template<
class T>
inline size_t get_len(
const T* aString )
47 for (len = 0; aString[len] != 0; len++);
60 template <
class T>
inline size_t str_copy( T* aDestP ,
const T* aSrcP ,
size_t aNumChars = infinite )
66 for ( i = 0; aSrcP[i] != 0 && i < aNumChars; i++)
87 inline wchar_t*
to_widestr(
const char* aSrcP ,
wchar_t* aDstP )
94 wchar_t* dst_p = (aDstP != alloc_new) ? aDstP :
new wchar_t[len + 1];
96 for (
size_t i = 0; i <= len; i++)
98 dst_p[i] = *((
unsigned char*)aSrcP + i);
109 inline char*
to_charstr(
const wchar_t* aSrcP ,
char* aDstP )
116 char* dst_p = (aDstP != alloc_new) ? aDstP :
new char[len + 1];
118 for (
size_t i = 0; i <= len; i++)
120 dst_p[i] =
static_cast<char>(aSrcP[i] & 0xff);
142 template<
class T>
inline int str_compare(
const T* aS1 ,
const T* aS2 ,
bool aIsCaseSens =
true ,
size_t aNumChars = infinite )
144 if ( aS1 == NULL || *aS1 == 0 )
146 return ( aS2 == NULL || *aS2 == 0 )?0:-1;
148 else if ( aS2 == NULL || *aS2 == 0 )
156 for (i = 0; aS1[i] != 0 && aS2[i] != 0 && (size_t)i < aNumChars; i++)
170 else if (aS1[i] == aS2[i])
175 else if ( aS1[i]==0 )
195 template<
class T>
inline bool str_equal(
const T* aS1 ,
const T* aS2 ,
bool aIsCaseSens =
true ,
size_t aNumChars = infinite )
197 if ( ( aS1 == NULL && aS2 == NULL ) || ( aS1 == NULL && *aS2 == 0 ) || ( aS2 == NULL && *aS1 == 0 ) )
205 for (i = 0; aS1[i] != 0 && aS2[i] != 0 && (size_t)i < aNumChars; i++)
207 if (!car::chr_equal(aS1[i], aS2[i], aIsCaseSens))
221 return (aS1[i] == aS2[i]);
238 template<
class T>
inline size_t str_search(
const T* aS1 ,
const T* aS2 ,
bool aIsCaseSens =
true ,
size_t aNumChars = infinite )
242 for ( i = 0 ; aS1[i] != 0 && i < aNumChars ; i++ )
246 for (
size_t j = 0 ; aS2[j] != 0 ; j++ )
248 if ( !car::chr_equal(aS1[i+j], aS2[j], aIsCaseSens) )
275 inline size_t str_replace (
const T* aString ,
const T* aWhat ,
const T* aWith , T* aOutputBuffer ,
size_t aNumChars = infinite )
277 size_t num_read_chars = 0;
280 size_t remaining_buffer_chars = aNumChars;
284 return str_copy(aOutputBuffer,aString,aNumChars);
287 for ( ; *aString != 0 && remaining_buffer_chars > 0 ; )
289 size_t offset =
str_search ( aString , aWhat ,
true );
291 if ( aString[offset] != 0 )
293 size_t temp_copied =
str_copy(aOutputBuffer,aString,(remaining_buffer_chars>offset)?offset:remaining_buffer_chars);
295 remaining_buffer_chars -= temp_copied;
296 num_read_chars += temp_copied;
297 aString += temp_copied;
298 aOutputBuffer += temp_copied;
300 if ( remaining_buffer_chars >= with_len )
302 num_read_chars += what_len;
306 temp_copied =
str_copy(aOutputBuffer,aWith,(remaining_buffer_chars>with_len)?with_len:remaining_buffer_chars);
309 remaining_buffer_chars -= temp_copied;
310 aOutputBuffer += temp_copied;
320 size_t temp_copied =
str_copy(aOutputBuffer,aString,remaining_buffer_chars);
322 num_read_chars += temp_copied;
323 remaining_buffer_chars -= temp_copied;
324 aString += temp_copied;
325 aOutputBuffer += temp_copied;
331 return num_read_chars;
345 template <
class T ,
class R ,
size_t S >
inline R
str_replace (
const T* aInput ,
const T* aWhat ,
const T* aWith )
357 if ( aInput[how_many] == 0 )
int str_compare(const T *aS1, const T *aS2, bool aIsCaseSens=true, size_t aNumChars=infinite)
Compares two strings.
Definition: g_str_lib.h:142
size_t get_len(const T *aString)
Returns the string length.
Definition: g_str_lib.h:41
Definition: g.mthread.ThreadSimpleEvent.h:5
char * to_charstr(const wchar_t *src, char *dst=(char *) alloc_new)
converts a wide gstr ( const wchar_t* ) to a wide one ( char* )
Definition: g_str_lib.h:109
size_t str_copy(T *aDestP, const T *aSrcP, size_t aNumChars=infinite)
Copies from aSrc to aDest up to a maximum of aNumChars characters (excluding terminator) ...
Definition: g_str_lib.h:60
wchar_t * to_widestr(const char *src, wchar_t *dst=(wchar_t *) alloc_new)
converts a byte gstr ( const char* ) to a wide one ( wchar_t* ).
Definition: g_str_lib.h:87
int chr_compare(T aC1, T aC2, bool aIsCaseSensitive)
Compares two chars.
Definition: g_car_base.h:88
bool str_equal(const T *aS1, const T *aS2, bool aIsCaseSens=true, size_t aNumChars=infinite)
Check two strings for equality.
Definition: g_str_lib.h:195
size_t str_search(const T *aS1, const T *aS2, bool aIsCaseSens=true, size_t aNumChars=infinite)
Searches aS2 inside aS1.
Definition: g_str_lib.h:238
R str_replace(const T *aInput, const T *aWhat, const T *aWith)
Replace aWhat with aWith inside aInput and returns the result as a class string (a std::string ...
Definition: g_str_lib.h:345