22 PFC_ASSERT( base <= m_len );
23 return make(m_ptr + base, m_len - base);
26 PFC_ASSERT( base <= m_len && base + len <= m_len );
27 return make(m_ptr + base, len);
38 virtual void add_string(
const char * p_string,
t_size p_string_size = ~0) = 0;
60 template<
typename char_t>
inline char_t
ascii_tolower(char_t c) {
if (c >=
'A' && c <=
'Z') c +=
'a' -
'A';
return c;}
61 template<
typename char_t>
inline char_t
ascii_toupper(char_t c) {
if (c >=
'a' && c <=
'z') c +=
'A' -
'a';
return c;}
83 template<
typename t_
char>
85 PFC_ASSERT( ptr != NULL || max == 0 );
87 while(n<max && ptr[n] != 0) n++;
99 template<
typename char_t>
inline bool char_is_numeric(char_t p_char)
throw() {
return p_char >=
'0' && p_char <=
'9';}
118 for(
t_size walk = 0; walk < inLen; ++walk) {
119 if (ret & guard)
throw exception_overflow();
126 for(
t_size walk = 0; walk < inLen; ++walk) {
129 if ((ret / 10) != prev)
throw exception_overflow();
141 template<
typename char_t>
void strcpy_t( char_t * out,
const char_t * in ) {
142 for(;;) { char_t c = *in++; *out++ = c;
if (c == 0)
break; }
174 int strcmp_nc(
const char* p1,
size_t n1,
const char * p2,
size_t n2)
throw();
195 virtual const char * get_ptr()
const = 0;
196 const char *
c_str()
const {
return get_ptr(); }
197 virtual void add_string(
const char * p_string,
t_size p_length = ~0) = 0;
198 virtual void set_string(
const char * p_string,
t_size p_length = ~0) {reset();add_string(p_string,p_length);}
199 virtual void truncate(
t_size len)=0;
201 virtual char * lock_buffer(
t_size p_requested_length) = 0;
202 virtual void unlock_buffer() = 0;
206 inline const char *
toString()
const {
return get_ptr();}
213 inline bool is_empty()
const {
return *get_ptr()==0;}
215 void skip_trailing_char(
unsigned c =
' ');
221 inline const string_base & operator= (
const char * src) {set_string_(src);
return *
this;}
222 inline const string_base & operator+= (
const char * src) {add_string_(src);
return *
this;}
233 inline operator const char * ()
const {
return get_ptr();}
242 void fix_dir_separator(
char c =
'\\');
243 void end_with(
char c);
244 void end_with_slash();
245 bool ends_with(
char c)
const;
246 void delimit(
const char* c) {
if (length()>0) add_string(c);}
247 char last_char()
const;
248 void truncate_last_char();
249 void truncate_number_suffix();
251 bool truncate_eol(
t_size start = 0);
252 bool fix_eol(
const char * append =
" (...)",
t_size start = 0);
253 bool limit_length(
t_size length_in_chars,
const char * append =
" (...)");
256 void truncate_to_parent_path();
259 t_size replace_string (
const char * replace,
const char * replaceWith,
t_size start = 0);
272 template<t_size max_length>
283 if (p_requested_length >= max_length)
return NULL;
284 memset(m_data,0,
sizeof(m_data));
288 m_length = strlen(m_data);
291 inline operator const char * ()
const {
return m_data;}
297 if (m_length + len < m_length || m_length + len > max_length)
throw pfc::exception_overflow();
298 for(
t_size n=0;n<len;n++) {
299 m_data[m_length++] = ptr[n];
301 m_data[m_length] = 0;
304 if (len > max_length) len = max_length;
305 if (m_length > len) {
313 PFC_STATIC_ASSERT(max_length>1);
314 m_length = 0; m_data[0] = 0;
317 char m_data[max_length+1];
320 template<
template<
typename>
class t_alloc>
329 if (t_alloc<char>::alloc_prioritizes_speed) {
335 else if (old_size > s + 32)
340 inline const char *
_get_ptr()
const throw() {
return used > 0 ? m_data.
get_ptr() :
"";}
343 inline void set_string_(
const char * str) {set_string_nc(str, strlen(str));}
344 inline void add_string_(
const char * str) {add_string_nc(str, strlen(str));}
346 PFC_ASSERT(! m_data.
is_owned(ptr) );
354 PFC_ASSERT(! m_data.
is_owned(ptr) );
356 makespace(used+len+1);
361 inline const t_self & operator= (
const char * src) {set_string_(src);
return *
this;}
362 inline const t_self & operator+= (
const char * src) {add_string_(src);
return *
this;}
363 inline const t_self & operator= (
const string_base & src) {set_string(src);
return *
this;}
364 inline const t_self & operator+= (
const string_base & src) {add_string(src);
return *
this;}
365 inline const t_self & operator= (
const t_self & src) {set_string(src);
return *
this;}
366 inline const t_self & operator+= (
const t_self & src) {add_string(src);
return *
this;}
369 inline const t_self & operator+= (
string_part_ref src) {add_string(src);
return *
this;}
371 inline operator const char * ()
const throw() {
return _get_ptr();}
374 string8_t(
const char * p_string) : used(0) {set_string_(p_string);}
375 string8_t(
const char * p_string,
t_size p_length) : used(0) {set_string(p_string,p_length);}
376 string8_t(
const t_self & p_string) : used(0) {set_string(p_string);}
382 const char *
get_ptr()
const throw() {
return _get_ptr();}
384 void add_string(
const char * p_string,
t_size p_length = ~0);
385 void set_string(
const char * p_string,
t_size p_length = ~0);
392 if (used>len) {used=len;m_data[len]=0;makespace(used+1);}
398 void set_char(
unsigned offset,
char c);
400 t_size replace_nontext_chars(
char p_replace =
'_');
401 t_size replace_char(
unsigned c1,
unsigned c2,
t_size start = 0);
403 void fix_filename_chars(
char def =
'_',
char leave=0);
405 void insert_chars(
t_size first,
const char * src,
t_size count);
406 void insert_chars(
t_size first,
const char * src);
411 if (n + 1 == 0)
throw exception_overflow();
426 inline static void g_swap(t_self & p_item1,t_self & p_item2) {
442 needs_constructor =
true,
451 #define PFC_DEPRECATE_PRINTF PFC_DEPRECATE("Use string8/string_fixed_t with operator<< overloads instead.") 463 operator char* () {
return m_buffer;}
468 static void g_run(
string_base & out,
const char * fmt,va_list list);
469 void run(
const char * fmt,va_list list);
482 const char *
get_ptr()
const {
return m_buffer;}
483 operator const char * ()
const {
return m_buffer;}
492 const char *
get_ptr()
const {
return m_buffer;}
493 operator const char * ()
const {
return m_buffer;}
515 inline const char *
get_ptr()
const {
return buffer;}
517 inline operator const char * ()
const {
return buffer;}
518 inline const char *
toString()
const {
return buffer;}
527 inline operator const char*()
const {
return m_data;}
536 inline operator const char*()
const {
return m_data;}
541 void float_to_string(
char * out,
t_size out_max,
double val,
unsigned precision,
bool force_sign =
false);
553 format_float(
double p_val,
unsigned p_width = 0,
unsigned p_prec = 7);
556 inline const char *
get_ptr()
const {
return m_buffer.get_ptr();}
557 inline const char *
toString()
const {
return m_buffer.get_ptr();}
558 inline operator const char*()
const {
return m_buffer.get_ptr();}
568 inline const char *
get_ptr()
const {
return m_buffer;}
569 inline const char *
toString()
const {
return m_buffer;}
570 inline operator const char*()
const {
return m_buffer;}
580 inline const char *
get_ptr()
const {
return m_buffer;}
581 inline const char *
toString()
const {
return m_buffer;}
582 inline operator const char*()
const {
return m_buffer;}
592 inline const char *
get_ptr()
const {
return m_buffer;}
593 inline const char *
toString()
const {
return m_buffer;}
594 inline operator const char*()
const {
return m_buffer;}
604 inline const char *
get_ptr()
const {
return m_buffer;}
605 inline operator const char*()
const {
return m_buffer;}
606 inline const char *
toString()
const {
return m_buffer;}
616 #define PFC_string_formatter() ::pfc::string_formatter()._formatter() 623 inline const char *
get_ptr()
const {
return m_formatter;}
624 inline operator const char * ()
const {
return m_formatter;}
625 inline const char *
toString()
const {
return m_formatter;}
635 inline const char *
get_ptr()
const {
return m_formatter;}
636 inline operator const char * ()
const {
return m_formatter;}
637 inline const char *
toString()
const {
return m_formatter;}
647 inline const char *
get_ptr()
const {
return m_buffer;}
648 inline operator const char*()
const {
return m_buffer;}
649 inline const char *
toString()
const {
return m_buffer;}
657 inline const char *
get_ptr()
const {
return m_buffer;}
658 inline operator const char*()
const {
return m_buffer;}
659 inline const char *
toString()
const {
return m_buffer;}
664 template<
typename t_
stringbuffer = pfc::
string8_fastalloc>
668 t_size source_len = 0, source_walk = 0;
670 while(source_walk < p_string_length && source_len < p_chars) {
673 if (delta == 0)
break;
675 source_walk += delta;
678 m_buffer.add_string(p_string,source_walk);
679 m_buffer.add_chars(p_padding,p_chars - source_len);
681 inline const char *
get_ptr()
const {
return m_buffer;}
682 inline operator const char*()
const {
return m_buffer;}
683 inline const char *
toString()
const {
return m_buffer;}
688 template<
typename t_
stringbuffer = pfc::
string8_fastalloc>
692 t_size source_len = 0, source_walk = 0;
694 while(source_walk < p_string_length && source_len < p_chars) {
697 if (delta == 0)
break;
699 source_walk += delta;
702 m_buffer.add_chars(p_padding,p_chars - source_len);
703 m_buffer.add_string(p_string,source_walk);
705 inline const char *
get_ptr()
const {
return m_buffer;}
706 inline operator const char*()
const {
return m_buffer;}
707 inline const char *
toString()
const {
return m_buffer;}
746 template<
typename t_source>
format_array(t_source
const & source,
const char * separator =
", ") {
750 for(
t_size walk = 1; walk < count; ++walk) *
this << separator << source[walk];
759 for(
t_size n = 0; n < bufLen; n++) {
760 if (n > 0 && spacing != NULL) m_formatter << spacing;
761 m_formatter <<
format_hex(buffer[n],
sizeof(TWord) * 2);
764 inline const char *
get_ptr()
const {
return m_formatter;}
765 inline operator const char * ()
const {
return m_formatter;}
766 inline const char *
toString()
const {
return m_formatter;}
775 template<
typename t_
char>
781 t_size s = m_buffer.get_size();
782 if (s == 0)
return 0;
else return s-1;
784 bool is_empty()
const {
return m_buffer.get_size() == 0;}
788 m_buffer.set_size(0);
790 m_buffer.set_size(p_length + 1);
792 m_buffer[p_length] = 0;
799 set_string_nc(p_source,
strlen_max_t(p_source, p_length));
802 add_string_nc(p_source,
strlen_max_t(p_source, p_length));
805 add_string_nc(p_source,
strlen_t(p_source));
810 m_buffer.set_size( base + p_length + 1 );
811 memcpy_t(m_buffer.get_ptr() + base, p_source, p_length);
812 m_buffer[base + p_length] = 0;
818 const t_self &
operator=(
const t_char * p_source) {set_string(p_source);
return *
this;}
819 operator const t_char* ()
const {
return get_ptr();}
820 const t_char *
get_ptr()
const {
return m_buffer.get_size() > 0 ? m_buffer.get_ptr() : pfc::empty_string_t<t_char>();}
821 const t_char *
c_str()
const {
return get_ptr(); }
835 inline static int compare(
const char * p_item1,
const char * p_item2) {
return strcmp(p_item1,p_item2);}
836 inline static int compare(
const wchar_t * item1,
const wchar_t * item2) {
return wcscmp(item1, item2);}
862 for(
typename t_source::const_iterator walk = in.first(); walk.is_valid(); ++walk) {
864 if (walk == in.last()) out << separatorLast;
865 else out << separator;
871 template<
typename t_output,
typename t_splitCheck>
872 void splitStringEx(t_output & p_output,
const t_splitCheck & p_check,
const char * p_string,
t_size p_stringLen = ~0) {
873 t_size walk = 0, splitBase = 0;
876 t_size delta = p_check(p_string + walk,max - walk);
878 if (walk > splitBase) p_output(p_string + splitBase, walk - splitBase);
879 splitBase = walk + delta;
882 if (delta == 0)
break;
886 if (walk > splitBase) p_output(p_string + splitBase, walk - splitBase);
892 void operator() (
const char *,
t_size) {++m_count;}
904 for(
t_size walk = 0, ptr = 0; walk < m_chars.get_size(); ++walk) {
912 for(
t_size walk = 0; walk < m_chars.get_size(); ++walk) {
913 if (m_chars[walk] == c)
return delta;
925 PFC_ASSERT( len > 0 );
926 if (*str == m_char)
return 1;
932 template<
typename t_array>
937 m_array[m_walk++] =
string_part(p_string,p_stringLen);
943 template<
typename t_list>
954 template<
typename t_array,
typename t_split>
961 p_output.set_size(wrapper.
get());
969 template<
typename t_list,
typename t_split>
979 const char * next = strchr(str,
'\n');
983 const char * walk = next;
984 while(walk > str && walk[-1] ==
'\r') --walk;
991 const char * next = strchr(str, c);
1001 const char * next = strstr(str, split);
1006 str = next + strlen(split);
1020 template<
typename T>
inline const char *
stringToPtr(
T const& val) {
return val.c_str();}
1036 void add_string(
const char * p_string,
t_size p_length = ~0) {
throw pfc::exception_not_implemented();}
1037 void set_string(
const char * p_string,
t_size p_length = ~0) {
throw pfc::exception_not_implemented();}
1047 template<
typename TChar, t_size len,
typename TSource>
1049 PFC_STATIC_ASSERT(len>0);
1051 for(walk = 0; walk < len - 1 && source[walk] != 0; ++walk) {
1052 buffer[walk] = source[walk];
1058 template<
typename TChar, t_size len,
typename TSource>
1061 for(walk = 0; source[walk] != 0; ++walk) {
1062 if (walk >= len)
throw exception_overflow();
1063 buffer[walk] = source[walk];
1065 if (walk >= len)
throw exception_overflow();
1071 for(
t_size walk=0;walk<p_substring_length;walk++) {
1072 t_char stringchar = (walk>=p_string_length ? 0 : p_string[walk]);
1073 t_char substringchar = p_substring[walk];
1074 int result =
compare_t(stringchar,substringchar);
1075 if (result != 0)
return result;
1081 p_string_length =
strlen_max_t(p_string,p_string_length); p_substring_length =
strlen_max_t(p_substring,p_substring_length);
1085 template<
typename t_
char>
1098 char *
strDup(
const char * src);
1101 #endif //_PFC_STRING_H_ array_t< t_uint32 > m_chars
char * lock_buffer(t_size p_requested_length)
void set_string_nc(const t_char *p_source, t_size p_length)
t_size utf16_encode_char(unsigned c, char16_t *out)
string_part_ref substring(t_size base) const
char ascii_tolower_lookup(char c)
t_size skip_utf8_chars(const char *ptr, t_size count)
bool stringEqualsI_ascii(const char *p1, const char *p2)
char format_hex_char_lowercase(unsigned p_val)
void set_string_nc(const char *ptr, t_size len)
void set_string(const t_char *p_source, t_size p_length)
virtual t_size get_length() const
bool operator==(const string_base &p_other) const
bool string_has_suffix(const char *string, const char *suffix)
char * strDup(const char *src)
const t_item * get_ptr() const
t_size get_length() const
const char * stringToPtr(T const &val)
t_size find_last(char p_char, t_size p_start=~0) const
t_size strstr_ex(const char *p_string, t_size p_string_len, const char *p_substring, t_size p_substring_len)
bool has_prefix(const char *prefix) const
string_part_ref substring(t_size base, t_size len) const
string_fixed_t(const char *p_source)
virtual void unlock_buffer()=0
_splitStringSimple_check(const char *p_chars)
void add_chars(t_uint32 p_char, t_size p_count)
unsigned char_to_hex(char c)
void splitStringByLines(t_out &out, const char *str)
void set_string(string_part_ref ref)
int strcmp_partial_ex_t(const t_char *p_string, t_size p_string_length, const t_char *p_substring, t_size p_substring_length)
const t_self & operator=(const t_char *p_source)
bool stringEqualsI_utf8(const char *p1, const char *p2)
t_size strcpy_utf8_truncate(const char *src, char *out, t_size maxbytes)
bool is_path_separator(unsigned c)
virtual void add_string(const char *p_string, t_size p_length=~0)=0
void splitStringByChar(t_out &out, const char *str, char c)
void recover_invalid_utf8(const char *src, char *out, unsigned replace)
void truncate(t_size len)
static int compare(const char *p_item1, const char *p_item2)
pfc::array_t< char, t_alloc > m_data
void splitStringSimple_toArray(t_array &p_output, t_split p_split, const char *p_string, t_size p_stringLen=~0)
string_simple_t(const t_char *p_source)
double string_to_float(const char *src, t_size max)
void truncate(t_size len)
bool operator>=(const string_base &p_other) const
t_uint atohex(const char *in, t_size inLen)
bool string_is_numeric(const char *p_string, t_size p_length)
pfc::string_base & operator<<(pfc::string_base &p_fmt, const char *p_source)
string_simple_t(const t_char *p_source, t_size p_length)
void add_string_(const char *str)
void add_string_nc(const char *ptr, t_size len)
void delimit(const char *c)
const char * c_str() const
bool char_is_ascii_alpha(char p_char)
t_size utf8_encode_char(unsigned c, char *out)
const char * utf8_char_next(const char *src)
void splitStringEx(t_output &p_output, const t_splitCheck &p_check, const char *p_string, t_size p_stringLen=~0)
int _strcmp_partial_ex(const t_char *p_string, t_size p_string_length, const t_char *p_substring, t_size p_substring_length)
_splitStringSimple_check(char c)
int stricmp_ascii_ex(const char *const s1, t_size const len1, const char *const s2, t_size const len2)
t_size get_length() const
bool operator!=(const string_base &p_other) const
bool is_multiline(const char *p_string, t_size p_len)
string_base_ref(const char *ptr)
t_size wide_decode_char(const wchar_t *p_source, unsigned *p_out, t_size p_source_length=~0)
static int compare(string_part_ref p_item1, const char *p_item2)
bool string_has_suffix_i(const char *string, const char *suffix)
int strcmp_partial_ex(const char *str, t_size strLen, const char *substr, t_size substrLen)
t_size scan_filename() const
void strcpy_t(char_t *out, const char_t *in)
char_t ascii_toupper(char_t c)
t_size operator()(const char *p_string, t_size p_stringLen) const
int stringCompareCaseInsensitiveEx(string_part_ref s1, string_part_ref s2)
string_buffer(string_base &p_string, t_size p_requested_length)
string8_t< pfc::alloc_standard > string8
int naturalSortCompare(const char *s1, const char *s2)
void add_string(string_part_ref ref)
void prealloc(t_size p_size)
bool has_suffix_i(const char *suffix) const
static void g_swap(t_self &p_item1, t_self &p_item2)
t_size find_first(const char *p_string, t_size p_start=0) const
unsigned utf8_get_char(const char *src)
char_t ascii_tolower(char_t c)
t_size operator()(const char *str, t_size len) const
const char * _get_ptr() const
static int compare(const char *i1, const char *i2)
t_uint atodec(const char *in, t_size inLen)
__splitStringSimple_calculateSubstringCount()
t_size utf8_char_len_from_header(char c)
bool char_is_hexnumeric(char p_char)
const t_char * c_str() const
bool has_prefix_i(const char *prefix) const
void urlEncode(pfc::string_base &out, const char *in)
bool utf8_advance(const char *&var)
int strcmp_ex(const char *p1, t_size n1, const char *p2, t_size n2)
pfc::array_t< t_char > m_buffer
void truncate(t_size len)
t_size string_find_first_ex(const char *p_string, t_size p_string_length, char p_tofind, t_size p_start)
int stricmp_ascii_partial(const char *str, const char *substr)
const char * get_ptr() const
bool is_valid_utf8() const
t_size string_find_first_nc(const char *p_string, t_size p_string_length, char c, t_size p_start)
t_size strlen_utf8(const char *s, t_size num=~0)
void add_string(const char *ptr, t_size len)
void stringToLowerAppend(string_base &out, const char *src, t_size len)
string_simple_t< char > string_simple
bool operator<=(const string_base &p_other) const
t_size strlen_max(const char *ptr, t_size max)
string8_t(const char *p_string, t_size p_length)
t_size strlen_t(const t_char *p_string, t_size p_length=~0)
string8_fastalloc string_formatter
void stringToBufferGuarded(TChar(&buffer)[len], const TSource &source)
Same as stringToBuffer() but throws exception_overflow() if the string could not be fully written...
static void stringCombine(pfc::string_base &out, t_source const &in, const char *separator, const char *separatorLast)
double parse_timecode(const char *in)
void set_size(t_size p_size)
string_base & _formatter() const
__splitStringSimple_arrayWrapper(t_array &p_array)
int strcmp_partial_t(const t_char *p_string, const t_char *p_substring)
int strcmp_nc(const char *p1, size_t n1, const char *p2, size_t n2)
string_fixed_t(const string_fixed_t< max_length > &p_source)
t_uint64 atoui64_ex(const char *src, t_size len)
virtual char * lock_buffer(t_size p_requested_length)=0
void prealloc(t_size p_size)
void urlEncodeAppendRaw(pfc::string_base &out, const char *in, t_size inSize)
static string_part_ref make(const char *ptr, t_size len)
void set_string_(const char *str)
t_size scan_filename(const char *ptr)
void set_string_(const char *str)
int compare_t(const hasher_md5_result &p_item1, const hasher_md5_result &p_item2)
char * strdup_n(const char *src, t_size len)
virtual void set_string(const char *p_string, t_size p_length=~0)
void stringToUpperAppend(string_base &out, const char *src, t_size len)
t_size strlen_max_t(const t_char *ptr, t_size max)
void set_string(const t_char *p_source)
void operator()(const char *p_string, t_size p_stringLen)
string8_t< t_alloc > t_self
void splitStringBySubstring(t_out &out, const char *str, const char *split)
const char * get_ptr() const
unsigned atoui_ex(const char *p_string, t_size p_string_len)
const string_fixed_t< max_length > & operator=(const char *p_source)
string8_t(const string_base &p_string)
static int compare(const wchar_t *item1, const wchar_t *item2)
t_int64 atoi64_ex(const char *src, t_size len)
string8_t(const t_self &p_string)
bool string_has_prefix_i(const char *string, const char *prefix)
t_size utf16_decode_char(const char16_t *p_source, unsigned *p_out, t_size p_source_length=~0)
t_size string_find_last_ex(const char *p_string, t_size p_string_length, char p_tofind, t_size p_start)
t_size utf8_decode_char(const char *src, unsigned &out, t_size src_bytes)
char * lock_buffer(t_size n)
bool string_has_prefix(const char *string, const char *prefix)
void urlEncodeAppend(pfc::string_base &out, const char *in)
uint32_t charLower(uint32_t param)
void add_string(const char *p_string, t_size p_length=~0)
static int compare(const char *p_item1, string_part_ref p_item2)
void add_string_nc(const t_char *p_source, t_size p_length)
int naturalSortCompareI(const char *s1, const char *s2)
bool operator>(const string_base &p_other) const
string8_t(string_part_ref ref)
void float_to_string(char *out, t_size out_max, double val, unsigned precision, bool b_sign)
bool is_valid_utf8(const char *param, t_size max=~0)
char * lock_buffer(t_size p_requested_length)
void stringToBuffer(TChar(&buffer)[len], const TSource &source)
Writes a string to a fixed-size buffer. Truncates the string if necessary. Always writes a null termi...
const char * toString() const
t_size _strParamLen(const char *str)
uint32_t charUpper(uint32_t param)
void set_string(const char *p_string, t_size p_length=~0)
t_size string_find_last(const char *p_string, char p_tofind, t_size p_start)
bool has_suffix(const char *suffix) const
int strcmp_partial(const char *str, const char *substr)
t_size array_size_t(const t_array &p_array)
t_size wide_encode_char(unsigned c, wchar_t *out)
int stringCompareCaseInsensitive(const char *s1, const char *s2)
string8_t< pfc::alloc_fast > string8_fast
string_part_ref string_part(const char *ptr, t_size len)
unsigned char_to_dec(char c)
void splitStringSimple_toList(t_list &p_output, t_split p_split, const char *p_string, t_size p_stringLen=~0)
int stricmp_ascii(const char *s1, const char *s2)
void add_string(const t_char *p_source)
static int compare(string_part_ref p_item1, string_part_ref p_item2)
bool char_is_numeric(char_t p_char)
bool char_is_ascii_alpha_lower(char p_char)
const string_fixed_t< max_length > & operator=(const string_fixed_t< max_length > &p_source)
bool char_is_ascii_alpha_upper(char p_char)
const char * get_ptr() const
t_size utf8_chars_to_bytes(const char *string, t_size count)
bool is_path_bad_char(unsigned c)
void memcpy_t(t_dst *p_dst, const t_src *p_src, t_size p_count)
bool operator<(const string_base &p_other) const
t_size string_find_first(const char *p_string, char p_tofind, t_size p_start)
void operator()(const char *p_string, t_size p_stringLen)
char format_hex_char(unsigned p_val)
void swap_t(T &p_item1, T &p_item2)
bool char_is_ascii_alphanumeric(char p_char)
void add_string_(const char *str)
__splitStringSimple_listWrapper(t_list &p_list)
void memset_t(T *p_buffer, const t_val &p_val, t_size p_count)
void add_string(const t_char *p_source, t_size p_length)
bool has_path_bad_chars(const char *param)
t_size utf8_char_len(const char *s, t_size max=~0)
static int compare(const char *p_item1, const char *p_item2)
bool is_lower_ascii(const char *param)
string8_t(const char *p_string)
void convert_to_lower_ascii(const char *src, t_size max, char *out, char replace)
t_size find_last(const char *p_string, t_size p_start=~0) const
t_size find_first(char p_char, t_size p_start=0) const
string8_t< pfc::alloc_fast_aggressive > string8_fastalloc
const char * get_ptr() const
t_size tcslen_max(const TCHAR *ptr, t_size max)
static string_part_ref stringToRef(T const &val)
const t_char * get_ptr() const
void add_filename(const char *fn)
t_size wcslen_max(const wchar_t *ptr, t_size max)
t_size length() const
For compatibility with old conventions.
const char * toString() const
t_size get_length() const
string_simple_t< t_char > t_self
string8_t< pfc::alloc_fast_aggressive > string8_fast_aggressive
bool is_owned(const t_source &p_item)