8 #ifndef INCL_evo_string_h 9 #define INCL_evo_string_h 53 template<
class T,
int PADDING=1>
77 StringInt(T num,
int base=
fDEC,
bool terminated=
true, uint end_padding=0)
78 {
set(num, base, terminated, end_padding); }
114 char*
set(T num,
int base=
fDEC,
bool terminated=
true, uint end_padding=0) {
116 assert( base <= 36 );
118 char* endptr = buffer + BUF_SIZE - end_padding;
124 size_ = impl::fnum(endptr, num, base);
126 size_ = impl::fnumu(endptr, num, base);
140 assert( data != NULL );
141 assert(
data_ != NULL );
156 assert(
data_ != NULL );
203 template<
class T=
double,
int PADDING=1>
227 { memset(
this, 0,
sizeof(
NumInfo)); }
236 const ulong len = impl::fnumf(ptr, number, exponent, precision);
257 {
set(num, precision, terminated); }
309 len = impl::fnumfe(
data_, num, exp,
false);
310 assert( len <= (ulong)BUF_SIZE );
315 assert( maxsize > 0 );
317 if (maxsize > (ulong)BUF_SIZE) {
318 if (maxsize > dbuffer_size_) {
321 info->
size = maxsize;
330 dbuffer_ = (
char*)::malloc((
size_t)maxsize);
331 dbuffer_size_ = (
Size)maxsize;
336 len = impl::fnumf(
data_, num, exp, precision);
339 assert( PADDING > 0 );
357 if (dbuffer_ != NULL)
709 {
if (str != NULL)
set(*str); }
751 if (str.
ptr_ != NULL) {
753 copy(str.
ptr_, size);
775 #if EVO_LIST_OPT_REFTERM 788 if (str.
ptr_ != NULL) {
789 const size_t len = strlen(str.
ptr_);
795 #if defined(EVO_CPP11) 804 set_unicode(str, size, mode);
814 set_unicode(str, mode);
820 String(
const std::initializer_list<char>& init) {
822 ListType::advAdd((
Size)init.size());
869 {
set(str);
return *
this; }
878 {
set(str);
return *
this; }
902 { ListType::operator=(data);
return *
this; }
915 ref(str, (
Size)strlen(str),
true);
928 if (str.
ptr_ == NULL)
958 {
set();
return *
this; }
970 { setempty();
return *
this; }
983 { ListType::setempty();
return *
this; }
996 { ListType::set();
return *
this; }
1005 { ListType::set(str);
return *
this; }
1016 { ListType::set(str, index, size);
return *
this; }
1028 { ListType::set(data, index, size);
return *
this; }
1039 { ListType::set(str, size);
return *
this; }
1050 if (str.ptr_ == NULL)
1053 ListType::copy(str.ptr_, size);
1068 ref(str, (
Size)strlen(str),
true);
1080 if (str.ptr_ == NULL)
1083 ListType::copy(str.ptr_, (
Size)strlen(str.ptr_));
1098 { ListType::set2(str, index1, index2);
return *
this; }
1110 { ListType::set2(data, index1, index2);
return *
this; }
1118 { setnum(num, base);
return *
this; }
1126 { setnum(num, base);
return *
this; }
1134 { setnum(num, base);
return *
this; }
1142 { setnumu(num, base);
return *
this; }
1150 { setnumu(num, base);
return *
this; }
1158 { setnumu(num, base);
return *
this; }
1166 { setnumf(num, precision);
return *
this; }
1174 { setnumf(num, precision);
return *
this; }
1182 { setnumf(num, precision);
return *
this; }
1201 const wchar16* p = str;
1202 const wchar16* end = str +
size;
1203 ulong bytes =
utf16_to8(p, end, NULL, 0, mode);
1208 char* buf = advWrite(bytes + 1);
1209 bytes =
utf16_to8(str, end, buf, bytes, mode);
1210 advWriteDone((
Size)bytes);
1231 #if defined(EVO_CPP11) 1234 static_assert(
sizeof(char16_t) ==
sizeof(wchar16),
"ERROR: char16_t type larger than 16 bits" );
1235 return set_unicode((
const wchar16*)str, size, mode);
1240 static_assert(
sizeof(char16_t) ==
sizeof(wchar16),
"ERROR: char16_t type larger than 16 bits" );
1241 return set_unicode((
const wchar16*)str, mode);
1245 #if defined(_WIN32) || defined(DOXYGEN) 1258 }
else if (size <= 0) {
1261 const int newsize = ::WideCharToMultiByte(CP_UTF8, 0, str, size, NULL, 0, NULL, NULL);
1264 char* buf = advBuffer(newsize+1);
1265 int written = ::WideCharToMultiByte(CP_UTF8, 0, str, size, buf, newsize, NULL, NULL);
1267 buf[written] =
'\0';
1288 }
else if (*str == 0) {
1291 const int newsize = ::WideCharToMultiByte(CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL);
1294 int written = ::WideCharToMultiByte(CP_UTF8, 0, str, -1, advBuffer(newsize), newsize, NULL, NULL);
1317 template<
class StringT>
1318 bool token(StringT& value,
char delim) {
1320 const char* ptr = (
char*)memchr(
data_, delim,
size_);
1323 value.set(
data_, i);
1348 template<
class StringT>
1351 #if defined(EVO_GLIBC_MEMRCHR) 1352 const char* ptr = (
char*)memrchr(
data_, delim,
size_);
1356 value.set(
data_ + i + 1, len - 1);
1362 if (
data_[--i] == delim) {
1364 value.set(
data_ + i + 1, len - 1);
1391 template<
class StringT>
1393 assert( count > 0 );
1397 for (j=0; j < count; ++j) {
1398 if (
data_[i] == delims[j]) {
1399 value.set(
data_, i);
1400 found_delim =
data_[i];
1408 value.set(
data_, size_);
1431 template<
class StringT>
1433 assert( count > 0 );
1438 for (j=0; j < count; ++j) {
1439 if (
data_[i] == delims[j]) {
1441 value.set(
data_ + i + 1, len - 1);
1442 found_delim =
data_[i];
1466 template<
class StringT>
1468 const char* NEWLINE_CHARS =
"\n\r";
1469 Size i = findany(NEWLINE_CHARS, 2);
1482 char ch1 =
data_[i - 1];
1483 char ch2 =
data_[i];
1484 if ((ch1 ==
'\n' && ch2 ==
'\r') || (ch1 ==
'\r' && ch2 ==
'\n'))
1500 template<
class StringT>
1502 const char* NEWLINE_CHARS =
"\n\r";
1503 Size i = findanyr(NEWLINE_CHARS, 2);
1516 char ch1 =
data_[i - 1];
1517 char ch2 =
data_[i];
1518 if ((ch1 ==
'\n' && ch2 ==
'\r') || (ch1 ==
'\r' && ch2 ==
'\n'))
1562 {
return (
size_ > 0 ? buffer.
set(*this).
cstr() :
""); }
1572 const char* result =
"";
1575 if (buf_.ptr != NULL) {
1576 assert( buf_.header != NULL );
1577 assert(
data_ >= buf_.ptr );
1578 assert( data_ < buf_.ptr+buf_.header->used );
1579 if (
size_ + (
data_-buf_.ptr) < buf_.header->used)
1585 #if EVO_LIST_OPT_REFTERM 1608 {
return (
size_ > 0 ? const_cast<String*>(
this)->cstr() :
""); }
1612 using ListType::compare;
1625 using ListType::operator==;
1626 using ListType::operator!=;
1680 using ListType::starts;
1681 using ListType::ends;
1688 {
return ListType::starts(ch); }
1695 {
return ListType::ends(ch); }
1706 {
return Iter(*
this); }
1726 {
return IterM(*
this); }
1735 {
return Iter(*
this); }
1763 const char* ptr = (
char*)memchr(
data_, ch,
size_);
1780 if (start <
size_) {
1784 const char* ptr = (
char*)memchr(
data_ + start, ch, end - start);
1804 if (start <
size_ && start < end) {
1805 assert( pattern != NULL );
1808 return impl::string_search(pattern, pattern_size,
data_ + start, end - start, start);
1825 if (start <
size_ && start < end) {
1826 assert( pattern != NULL );
1829 return impl::string_search(alg, pattern, pattern_size,
data_ + start, end - start, start);
1845 if (start <
size_ && start < end) {
1848 return impl::string_search(pattern.
data_, pattern.
size_,
data_ + start, end - start, start);
1864 if (start <
size_ && start < end) {
1867 return impl::string_search(alg, pattern.
data_, pattern.
size_,
data_ + start, end - start, start);
1880 #if !defined(EVO_NO_MEMRCHR) && defined(EVO_GLIBC_MEMRCHR) 1882 const char* ptr = (
char*)memrchr(
data_, ch,
size_);
1905 #if !defined(EVO_NO_MEMRCHR) && defined(EVO_GLIBC_MEMRCHR) 1906 if (start <
size_) {
1910 const char* ptr = (
char*)memrchr(
data_ + start, ch, end - start);
1919 if (
data_[--end] == ch)
1937 if (start <
size_ && start < end) {
1938 assert( pattern != NULL );
1941 return impl::string_search_reverse(pattern, pattern_size,
data_ + start, end - start, start);
1958 if (start <
size_ && start < end) {
1959 assert( pattern != NULL );
1962 return impl::string_search_reverse(alg, pattern, pattern_size,
data_ + start, end - start, start);
1978 if (start <
size_ && start < end) {
1981 return impl::string_search_reverse(pattern.
data_, pattern.
size_,
data_ + start, end - start, start);
1997 if (start <
size_ && start < end) {
2000 return impl::string_search_reverse(alg, pattern.
data_, pattern.
size_,
data_ + start, end - start, start);
2017 if (start <
size_ && start < end && count > 0) {
2022 const char* ptr = (
char*)memchr(
data_ + start, *chars, end - start);
2026 const char* pend =
data_ + end;
2027 const char* ptr =
data_ + start;
2028 for (; ptr < pend; ++ptr)
2029 if (memchr(chars, *ptr, count) != NULL)
2047 {
return findany(chars.
data_, chars.
size_, start, end); }
2062 return findr(*chars, start, end);
2063 if (start <
size_ && start < end && count > 0) {
2066 const char* pstart =
data_ + start;
2067 const char* ptr =
data_ + end;
2068 while (ptr > pstart)
2069 if (memchr(chars, *--ptr, count) != NULL)
2086 {
return findanyr(chars.
data_, chars.
size_, start, end); }
2100 if (start <
size_ && start < end) {
2105 const char* pend =
data_ + end;
2106 const char* ptr =
data_ + start;
2107 for (; ptr < pend; ++ptr)
2108 if (memchr(chars, *ptr, count) == NULL)
2125 {
return findanybut(chars.
data_, chars.
size_, start, end); }
2139 if (start <
size_ && start < end) {
2144 const char* pstart =
data_ + start;
2145 const char* ptr =
data_ + end;
2146 while (ptr > pstart)
2147 if (memchr(chars, *--ptr, count) == NULL)
2164 {
return findanybutr(chars.
data_, chars.
size_, start, end); }
2174 if (start <
size_ && start < end) {
2177 for (; start < end; ++start)
2192 if (start <
size_ && start < end) {
2211 if (start <
size_ && start < end) {
2214 for (; start < end; ++start)
2230 if (start <
size_ && start < end) {
2245 {
return find(ch) !=
NONE; }
2253 {
return find(str, size) !=
NONE; }
2260 {
return find(str) !=
NONE; }
2276 template<
class T1,
class T2>
2277 bool split(
char delim, T1& left, T2& right)
const {
2279 if (
data_[i] == delim) {
2280 left.set(*this).slice(0, i);
2281 right.set(*this).slice(i+1,
ALL);
2301 bool split(
char delim, T1& left)
const {
2303 if (
data_[i] == delim) {
2304 left.set(*this).slice(0, i);
2327 if (
data_[i] == delim) {
2328 right.set(*this).slice(i+1,
ALL);
2348 template<
class T1,
class T2>
2349 bool splitr(
char delim, T1& left, T2& right)
const {
2351 if (
data_[--i] == delim) {
2352 left.set(*this).slice(0, i);
2353 right.set(*this).slice(i+1,
ALL);
2375 if (
data_[--i] == delim) {
2376 left.set(*this).slice(0, i);
2399 if (
data_[--i] == delim) {
2400 right.set(*this).slice(i+1,
ALL);
2421 while ( count <
size_ && ((ch=
data_[count]) ==
' ' || ch ==
'\t') )
2452 while ( count <
size_ && ((ch=
data_[count]) ==
' ' || ch ==
'\t') )
2482 if (strsize > 0 && strsize <= size_ && max > 0) {
2483 Size i, j = 0, count = 0;
2485 for (i=0; i < strsize; ++i, ++j)
2489 }
while (j <
size_ && count <
max);
2535 if (strsize > 0 && strsize <= size_ && max > 0) {
2538 for (i=strsize; i > 0; )
2539 if (j == 0 || str[--i] !=
data_[--j])
2542 }
while (j > 0 && count <
max);
2545 size_ -= (count * strsize);
2606 while ( count <
size_ && ((ch=
data_[count]) ==
'\n' || ch ==
'\r') )
2626 for (; count < size_ && max > 0; --
max) {
2629 if (count + 1 <
size_ &&
data_[count + 1] ==
'\r') {
2633 }
else if (ch ==
'\r') {
2634 if (count + 1 <
size_ &&
data_[count + 1] ==
'\n') {
2668 for (;
size_ > 0 && max > 0; --
max) {
2675 }
else if (ch ==
'\r') {
2706 { ListType::copy(str);
return *
this; }
2713 { ListType::copy(str);
return *
this; }
2721 { ListType::copy(str, size);
return *
this; }
2731 ListType::copy(str, (
Size)strlen(str));
2742 { ListType::add(ch);
return *
this; }
2750 ListType::advAdd(count);
2752 memset(
data_ +
size_ - count, (
int)(uchar)ch, count);
2763 { ListType::add(str);
return *
this; }
2772 { ListType::add(str);
return *
this; }
2782 { ListType::add(str, size);
return *
this; }
2791 {
if (str)
add(str, (
Size)strlen(str));
return *
this; }
2808 { writenum(num, base);
return *
this; }
2816 { writenum(num, base);
return *
this; }
2824 { writenum(num, base);
return *
this; }
2832 { writenumu(num, base);
return *
this; }
2840 { writenumu(num, base);
return *
this; }
2848 { writenumu(num, base);
return *
this; }
2856 { writenumf(num, precision);
return *
this; }
2864 { writenumf(num, precision);
return *
this; }
2872 { writenumf(num, precision);
return *
this; }
2916 {
return add(str); }
2931 {
return add(str); }
2946 {
return add(str); }
3019 { writenum(num);
return *
this; }
3034 { writenum(num);
return *
this; }
3049 { writenum(num);
return *
this; }
3064 { writenumu(num);
return *
this; }
3079 { writenumu(num);
return *
this; }
3094 { writenumu(num);
return *
this; }
3109 { writenumf(num);
return *
this; }
3124 { writenumf(num);
return *
this; }
3139 { writenumf(num);
return *
this; }
3164 reserve(fmt.
str.
size_ + ((fmt.
indent + newline_size + 1) * EST_LINES));
3167 for (uint notfirst=0; str.token_line(line); ) {
3170 add(newline_str, newline_size);
3188 substr.
set(line.
data(), i).stripr();
3189 if (!substr.
empty()) {
3191 add(newline_str, newline_size);
3198 add(newline_str, newline_size);
3211 { writefmtnum(fmt.
num, fmt.
fmt);
return *
this; }
3215 { writefmtnum(fmt.
num, fmt.
fmt);
return *
this; }
3219 { writefmtnum(fmt.
num, fmt.
fmt);
return *
this; }
3223 { writefmtnum(fmt.
num, fmt.
fmt);
return *
this; }
3227 { writefmtnumu(fmt.
num, fmt.
fmt);
return *
this; }
3231 { writefmtnumu(fmt.
num, fmt.
fmt);
return *
this; }
3235 { writefmtnumu(fmt.
num, fmt.
fmt);
return *
this; }
3239 { writefmtnumu(fmt.
num, fmt.
fmt);
return *
this; }
3243 { writefmtnumf(fmt.
num, fmt.
fmt);
return *
this; }
3247 { writefmtnumf(fmt.
num, fmt.
fmt);
return *
this; }
3251 { writefmtnumf(fmt.
num, fmt.
fmt);
return *
this; }
3255 String& operator<<(const FmtFieldNum<T>& fmt) {
3257 writefmtnum(fmt.num.num, fmt.num.fmt, &fmt.field);
3259 writefmtnumu(fmt.num.num, fmt.num.fmt, &fmt.field);
3265 String& operator<<(const FmtFieldFloat<T>& fmt)
3266 { writefmtnumf(fmt.num.num, fmt.num.fmt, &fmt.field);
return *
this; }
3273 { writefmtnumu((
size_t)fmtptr.
ptr, fmtptr.
fmt);
return *
this; }
3334 Format(
const This& src) : out(src.out), fmt(src.fmt)
3344 { memcpy(&fmt, &src.
fmt,
sizeof(
FmtAttribs));
return *
this; }
3399 { fmt.
null = null;
return *
this; }
3413 out.
add(
"false", 5);
3424 { out.
add(ch);
return *
this; }
3445 }
else if (*val !=
'\0')
3457 if (val.
data_ == NULL) {
3460 }
else if (val.
size_ > 0)
3538 This& operator<<(const IntegerT<T>& num) {
3590 This& operator<<(const FloatT<T>& num) {
3612 { ListType::prepend(ch);
return *
this; }
3620 ListType::advPrepend(count);
3622 memset(
data_, (
int)(uchar)ch, count);
3631 { ListType::prepend(str);
return *
this; }
3638 { ListType::prepend(str);
return *
this; }
3646 { ListType::prepend(str, size);
return *
this; }
3653 {
if (str) prepend(str, (
Size)strlen(str));
return *
this; }
3662 {
if (
size_ > 0 &&
data_[0] != delim) prepend(delim);
return *
this; }
3670 { prependnum(num, base);
return *
this; }
3678 { prependnum(num, base);
return *
this; }
3686 { prependnum(num, base);
return *
this; }
3694 { prependnum(num, base);
return *
this; }
3702 { prependnum(num, base);
return *
this; }
3710 { prependnum(num, base);
return *
this; }
3718 { prependnumf(num, precision);
return *
this; }
3726 { prependnumf(num, precision);
return *
this; }
3734 { prependnumf(num, precision);
return *
this; }
3744 {
return ListType::insert(index, ch); }
3753 index = ListType::advInsert(index, count);
3755 memset(
data_ + index, (
int)(uchar)ch, count);
3765 {
return ListType::insert(index, str); }
3773 {
return ListType::insert(index, str); }
3782 {
return ListType::insert(index, str, size); }
3790 {
if (str) insert(index, str, (
Size)strlen(str));
return *
this; }
3799 { insertnum(index, num, base);
return *
this; }
3808 { insertnum(index, num, base);
return *
this; }
3817 { insertnum(index, num, base);
return *
this; }
3826 { insertnum(index, num, base);
return *
this; }
3835 { insertnum(index, num, base);
return *
this; }
3844 { insertnum(index, num, base);
return *
this; }
3853 { insertnumf(index, num, precision);
return *
this; }
3862 { insertnumf(index, num, precision);
return *
this; }
3871 { insertnumf(index, num, precision);
return *
this; }
3881 { ListType::fill(ch, index, size);
return *
this; }
3892 { ListType::replace(index, rsize, str.
data_, str.
size_);
return *
this; }
3902 { ListType::replace(index, rsize, str, size);
return *
this; }
3911 { ListType::replace(index, rsize, str, str?(
Size)strlen(str):0);
return *
this; }
3921 uint startmax =
max;
3926 ListType::replace(i, 1, str, size);
3929 return startmax -
max;
3950 uint startmax =
max;
3952 i = find(fstr, fsize, i);
3955 ListType::replace(i, fsize, str, size);
3958 return startmax -
max;
3969 {
return findreplace(fstr, fsize, str.
data_, str.
size_,
max); }
3988 {
return findreplace(fstr.
data_, fstr.
size_, str, size,
max); }
4048 return impl::tonum<T>(
data_,
size_, error, base);
4063 template<
class T> T
getnum(
int base=0)
const {
4117 {
return impl::ToBool<Bool>::getbool(
data_,
size_); }
4133 {
return impl::ToNum<Int>::getnum(
data_,
size_, base); }
4147 {
return impl::ToNum<Long>::getnum(
data_,
size_, base); }
4161 {
return impl::ToNum<LongL>::getnum(
data_,
size_, base); }
4178 {
return impl::ToNum<UInt>::getnum(
data_,
size_, base); }
4193 {
return impl::ToNum<ULong>::getnum(
data_,
size_, base); }
4208 {
return impl::ToNum<ULongL>::getnum(
data_,
size_, base); }
4223 {
return impl::ToNumf<Float>::getnum(
data_,
size_); }
4236 {
return impl::ToNumf<FloatD>::getnum(
data_,
size_); }
4249 {
return impl::ToNumf<FloatL>::getnum(
data_,
size_); }
4306 bool quote_optional =
false;
4310 if (quote_optional && optional) {
4316 const char ch =
"'\"`"[(uint)type];
4317 const Size result = size + 2;
4327 const char* str = &
"'''\"\"\"```"[(uint(type) - 3) * 3];
4328 const Size result = size + 6;
4336 const char* str =
"`\x7F";
4337 const Size result = size + 4;
4359 return buf_.ptr + used();
4373 available = reserve_size;
4374 if (reserve_size == 0)
4376 reserve(reserve_size);
4377 return buf_.ptr + used();
4391 advSize(used() + written_size);
4392 available = reserve_size;
4393 if (reserve_size == 0)
4395 reserve(reserve_size);
4396 return buf_.ptr + used();
4407 advSize(used() + size);
4417 template<
class TNum>
4421 buf_.header->used += len;
4432 template<
class TNum>
4436 buf_.header->used += len;
4447 template<
class TNum>
4450 #if defined(EVO_FNUMF_SPRINTF) 4451 char buf[impl::FNUMF_SPRINTF_BUF_SIZE];
4453 len = impl::fnumf_sprintf_setup(fmt, buf, num, precision);
4460 if (precision < 0) {
4463 len = impl::fnumfe(
data_ +
size_, num, exp,
false);
4467 len = impl::fnumf(
data_ +
size_, num, exp, precision);
4470 buf_.header->used += len;
4484 const int fillchar = (int)(field.
fill != 0 ? (uchar)field.
fill : (uchar)
' ');
4485 const uint padding = field.
width - count;
4486 ListType::advAdd(count + padding);
4488 char* p =
data_ + index;
4489 switch (field.
align) {
4492 memset(p, (
int)(uchar)ch, count);
4494 memset(p + count, fillchar, padding);
4497 const uint padleft = (padding / 2);
4499 memset(p, fillchar, padleft);
4502 memset(p, (
int)(uchar)ch, count);
4503 const uint padright = (padding - padleft);
4506 memset(p, fillchar, padright);
4512 memset(p, fillchar, padding);
4515 memset(p, (
int)(uchar)ch, count);
4518 }
else if (count > 0) {
4519 ListType::advAdd(count);
4520 memset(
data_ + index, (
int)(uchar)ch, count);
4534 const int fillchar = (int)(field.
fill != 0 ? (uchar)field.
fill : (uchar)
' ');
4535 const uint padding = field.
width -
size;
4536 ListType::advAdd(size + padding);
4538 char* p =
data_ + index;
4539 switch (field.
align) {
4542 memcpy(p, str, size);
4544 memset(p + size, fillchar, padding);
4547 const uint padleft = (padding / 2);
4549 memset(p, fillchar, padleft);
4552 memcpy(p, str, size);
4553 const uint padright = (padding - padleft);
4556 memset(p, fillchar, padright);
4562 memset(p, fillchar, padding);
4565 memcpy(p, str, size);
4568 }
else if (size > 0) {
4569 ListType::advAdd(size);
4570 memcpy(
data_ + index, str, size);
4582 template<
class TNum>
4588 const int align_padding = (field != NULL && field->width > width ? field->width - width : 0);
4589 ListType::advAdd(width + align_padding);
4590 fmt.impl_num_write(
data_ + index, num, digits, width, align_padding, field);
4603 template<
class TNum>
4608 uint prefix_len = 0;
4609 fmt.impl_prefix_info(prefix_ch, prefix_len);
4613 const int full_width = width + prefix_len;
4614 const int align_padding = (field != NULL && field->width > full_width ? field->width - full_width : 0);
4617 ListType::advAdd(full_width + align_padding);
4618 char* p =
data_ + index;
4620 int align_padleft, align_padright;
4623 if (align_padleft > 0) {
4624 memset(p, (
int)(uchar)field->fill, align_padleft);
4628 FmtSetInt::impl_prefix_write(p, prefix_ch, prefix_len);
4630 if (digits < width) {
4631 const uint padlen = width - digits;
4632 const int ch = (fmt.
pad_ch == 0 ?
'0' : (int)(uchar)fmt.
pad_ch);
4633 memset(p, ch, padlen);
4637 impl::fnumu(p, num, base);
4639 if (align_padright > 0)
4640 memset(p, (
int)(uchar)field->fill, align_padright);
4651 template<
class TNum>
4653 const int align_width = (field != NULL ? field->width : 0);
4654 int exp = 0, maxlen;
4655 fmt.impl_info(num, exp, maxlen, align_width);
4658 const ulong len = fmt.impl_write(
data_ +
size_, num, exp, align_width, field);
4659 buf_.header->used += len;
4673 assert( newlinesize <= 2 );
4675 const char* DIGITS = (fmt.
upper ?
"0123456789ABCDEF" :
"0123456789abcdef");
4678 const uchar* ptr = (uchar*)fmt.
buf;
4679 const uchar* ptr_end = ptr + fmt.
size;
4680 const uchar* ptr_nl;
4687 reserve( ((offset_fmt.pad_width + 4 + (fmt.
maxline * 4) + newlinesize) * lines) + 1 );
4689 reserve( (fmt.
size * 4) + newlinesize + 1 );
4693 for (
const uchar* ptr2; ptr < ptr_end; ) {
4699 size_ += offset_fmt.pad_width;
4709 ptr_nl = ptr + LINE_SIZE;
4710 if (ptr_nl > ptr_end)
4715 for (; ptr < ptr_nl; ++ptr) {
4718 data_[
size_++] =
' ';
4722 assert(
size_ > 0 );
4725 if (ptr_nl >= ptr_end && fmt.
maxline > 0 && ptr2 != (uchar*)fmt.
buf) {
4728 const ulong count = (remainder > 0 ? ((fmt.
maxline - remainder) * 3) + 1 : 1);
4738 for (; ptr2 < ptr_nl; ++ptr2) {
4739 if (*ptr2 < ' ' || *ptr2 >
'~')
4748 size_ += newlinesize;
4750 buf_.header->used =
size_;
4751 assert( buf_.header->used <= buf_.header->size );
4821 typename C::Iter iter(items);
4822 for (
typename C::Size i=0; iter; ++iter, ++i) {
4840 typename C::Iter iter(items);
4841 for (
typename C::Size i=0; iter; ++iter, ++i) {
4858 template<
class C>
String&
joinmap(
const C& map,
char delim=
',',
char kvdelim=
'=') {
4859 typename C::Iter iter(map);
4860 for (
typename C::Size i=0; iter; ++iter, ++i) {
4881 typename C::Iter iter(map);
4882 for (
typename C::Size i=0; iter; ++iter, ++i) {
4902 template<
class Tok,
class C>
typename C::Size
split(C& items,
char delim=
',')
const {
4903 typename C::Size count = 0;
4905 for (; tok.next(delim); ++count)
4906 items.add(tok.value().template convert<typename C::Item>());
4921 template<
class C>
typename C::Size
splitmap(C& map,
char delim=
',',
char kvdelim=
'=')
const 4922 {
return map.addsplit(*
this, delim, kvdelim); }
4935 for (; index <
size_; ++index) {
4943 for (; index <
size_; ++index)
4958 for (; index <
size_; ++index) {
4966 for (; index <
size_; ++index)
4976 { ListType::clear();
return *
this; }
4980 { ListType::triml(size);
return *
this; }
4984 { ListType::trimr(size);
return *
this; }
4988 { ListType::truncate(size);
return *
this; }
4992 { ListType::slice(index);
return *
this; }
4996 { ListType::slice(index, size);
return *
this; }
5000 { ListType::slice2(index1, index2);
return *
this; }
5004 { ListType::unslice();
return *
this; }
5008 {
return ListType::capacity(); }
5012 { ListType::capacity(size);
return *
this; }
5016 { ListType::capacitymin(min);
return *
this; }
5020 { ListType::capacitymax(max);
return *
this; }
5024 { ListType::compact();
return *
this; }
5028 { ListType::reserve(size, prefer_realloc);
return *
this; }
5032 { ListType::unshare();
return *
this; }
5036 { ListType::resize(size);
return *
this; }
5040 { ListType::reverse();
return *
this; }
5044 { ListType::advResize(size);
return *
this; }
5052 {
static const String str(
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
return str; }
5058 {
static const String str(
"0123456789abcdefghijklmnopqrstuvwxyz");
return str; }
5064 {
static const String str(
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
return str; }
5070 {
static const String str(
"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
return str; }
5076 {
static const String str(
"abcdefghijklmnopqrstuvwxyz");
return str; }
5082 {
static const String str(
" \t");
return str; }
5086 ListType& fill(
const char& item,
Key index=0,
Size size=
ALL);
5091 void advPrepend(
Size);
5096 #if defined(DOXYGEN) 5100 ListType& operator<<(
const char&);
5101 ListType&
add(
const char&);
5102 ListType& prepend(
const char&);
5106 #if EVO_LIST_OPT_REFTERM 5107 bool terminated()
const;
5110 const char*
buffer()
const;
5111 void iterInitMutable();
5112 const char* iterFirst(IterKey& key)
const;
5113 const char* iterNext(IterKey& key)
const;
5114 const char* iterNext(
Size count,IterKey& key)
const;
5115 const char* iterLast(IterKey& key)
const;
5116 const char* iterPrev(IterKey& key)
const;
5117 const char* iterPrev(
Size count,IterKey& key)
const;
5118 Size iterCount()
const;
5119 const char* iterSet(IterKey key)
const;
5124 void setnum(T num,
int base=
fDEC) {
5127 buf_.header->used += len;
5131 void setnumu(T num,
int base=
fDEC) {
5134 buf_.header->used += len;
5138 void setnumf(T num,
int precision=
fPREC_AUTO) {
5140 #if defined(EVO_FNUMF_SPRINTF) 5141 char buf[impl::FNUMF_SPRINTF_BUF_SIZE];
5143 len = impl::fnumf_sprintf_setup(fmt, buf, num, precision);
5145 clear().capacitymin(len + 1).unshare();
5146 ::sprintf(
data_, fmt, num);
5150 if (precision < 0) {
5153 len = impl::fnumfe(
data_, num, exp,
false);
5157 len = impl::fnumf(
data_, num, exp, precision);
5160 buf_.header->used += len;
5166 void prependnum(T num,
int base=
fDEC) {
5171 void prependnumf(T num,
int precision=
fPREC_AUTO) {
5178 void insertnum(
Key index, T num,
int base=
fDEC) {
5180 insert(index, str.
data(), str.
size());
5183 void insertnumf(
Key index, T num,
int precision=
fPREC_AUTO) {
5185 insert(index, str.
data(), str.
size());
5192 {
return str2 == str1; }
5194 {
return str2 != str1; }
5200 template<
class T>
struct Convert_StringToIntBase {
5201 template<
class V>
static void set(
String& dest, V value)
5202 { dest.
setn(value); }
5203 template<
class V>
static void add(
String& dest, V value)
5204 { dest.
addn(value); }
5205 template<
class V>
static bool addq(
String& dest, V value,
char)
5206 { dest.
addn(value);
return true; }
5207 static T value(
const String& src)
5208 {
return src.
getnum<T>(); }
5210 template<
class T>
struct Convert_StringToFltBase {
5211 template<
class V>
static void set(
String& dest, V value)
5212 { dest.setn(value); }
5213 template<
class V>
static void add(
String& dest, V value)
5214 { dest.
addn(value); }
5215 template<
class V>
static bool addq(
String& dest, V value,
char)
5216 { dest.
addn(value);
return true; }
5217 static T value(
const String& src)
5220 template<
class T>
struct Convert_StringToCIntBase {
5221 template<
class V>
static void set(
String& dest,
const V& value)
5222 {
if (value.valid()) dest.setn(*value); }
5223 template<
class V>
static void add(
String& dest,
const V& value)
5224 {
if (value.valid()) dest.
addn(*value); }
5225 template<
class V>
static bool addq(
String& dest,
const V& value,
char)
5226 {
if (value.valid()) dest.
addn(*value);
return true; }
5227 static T value(
const String& src)
5228 {
return src.
getnum<T>(); }
5230 template<
class T>
struct Convert_StringToCFltBase {
5231 template<
class V>
static void set(
String& dest,
const V& value)
5232 {
if (value.valid()) dest.setn(*value); }
5233 template<
class V>
static void add(
String& dest,
const V& value)
5234 {
if (value.valid()) dest.
addn(*value); }
5235 template<
class V>
static bool addq(
String& dest,
const V& value,
char)
5236 {
if (value.valid()) dest.
addn(*value);
return true; }
5237 static T value(
const String& src)
5242 static void set(
String& dest,
const char* value)
5243 { dest.
set(value); }
5244 static void add(
String& dest,
const char* value)
5245 { dest.
add(value); }
5246 static String value(
const char* src)
5250 static void set(
String& dest,
const char* value)
5251 { dest.
set(value); }
5252 static void add(
String& dest,
const char* value)
5253 { dest.
add(value); }
5254 static String value(
const char* src)
5257 template<>
struct Convert<String,String> {
5258 static void set(String& dest,
const String& value)
5259 { dest.
set(value); }
5260 static void add(String& dest,
const String& value)
5261 { dest.
add(value); }
5262 static bool addq(String& dest,
const String& value,
char delim)
5264 static const String& value(
const String& src)
5267 template<>
struct Convert<String,const char*> {
5268 static void set(String& dest,
const char* value)
5269 { dest.
set(value); }
5270 static void add(String& dest,
const char* value)
5271 { dest.
add(value); }
5272 static bool addq(String& dest,
const char* value,
char delim) {
5279 template<>
struct Convert<String,char*> {
5280 static void set(String& dest,
const char* value)
5281 { dest.
set(value); }
5282 static void add(String& dest,
const char* value)
5283 { dest.
add(value); }
5284 static bool addq(String& dest,
const char* value,
char delim) {
5291 template<>
struct Convert<String,bool> {
5292 static void set(String& dest,
bool value) {
5293 if (value) dest.
set(
"true", 4);
5294 else dest.set(
"false", 5);
5296 static void add(String& dest,
bool value) {
5297 if (value) dest.
add(
"true", 4);
5298 else dest.
add(
"false", 5);
5300 static bool addq(String& dest,
bool value,
char) {
5301 if (value) dest.
add(
"true", 4);
5302 else dest.
add(
"false", 5);
5305 static bool value(
const String& src)
5306 {
return src.
getbool<
bool>(); }
5308 template<>
struct Convert<String,short> :
public Convert_StringToIntBase<short> { };
5309 template<>
struct Convert<String,int> :
public Convert_StringToIntBase<int> { };
5310 template<>
struct Convert<String,long> :
public Convert_StringToIntBase<long> { };
5311 template<>
struct Convert<String,longl> :
public Convert_StringToIntBase<longl> { };
5312 template<>
struct Convert<String,ushort> :
public Convert_StringToIntBase<ushort> { };
5313 template<>
struct Convert<String,uint> :
public Convert_StringToIntBase<uint> { };
5314 template<>
struct Convert<String,ulong> :
public Convert_StringToIntBase<ulong> { };
5315 template<>
struct Convert<String,ulongl> :
public Convert_StringToIntBase<ulongl> { };
5316 template<>
struct Convert<String,float> :
public Convert_StringToFltBase<float> { };
5317 template<>
struct Convert<String,double> :
public Convert_StringToFltBase<double> { };
5318 template<>
struct Convert<String,ldouble> :
public Convert_StringToFltBase<ldouble> { };
5319 template<>
struct Convert<String,Bool> {
5320 static void set(String& dest, Bool value) {
5321 if (value.null()) dest.
set();
5322 else if (*value) dest.set(
"true", 4);
5323 else dest.set(
"false", 5);
5325 static void add(String& dest, Bool value) {
5326 if (value.
valid()) {
5327 if (*value) dest.
add(
"true", 4);
5328 else dest.
add(
"false", 5);
5331 static bool addq(String& dest, Bool value,
char) {
5332 if (value.
valid()) {
5333 if (*value) dest.
add(
"true", 4);
5334 else dest.
add(
"false", 5);
5338 static Bool value(
const String& src)
5339 {
return src.
getbool<Bool>(); }
5341 template<>
struct Convert<String,Short> :
public Convert_StringToCIntBase<Short> { };
5342 template<>
struct Convert<String,Int> :
public Convert_StringToCIntBase<Int> { };
5343 template<>
struct Convert<String,Long> :
public Convert_StringToCIntBase<Long> { };
5344 template<>
struct Convert<String,LongL> :
public Convert_StringToCIntBase<LongL> { };
5345 template<>
struct Convert<String,UShort> :
public Convert_StringToCIntBase<UShort> { };
5346 template<>
struct Convert<String,UInt> :
public Convert_StringToCIntBase<UInt> { };
5347 template<>
struct Convert<String,ULong> :
public Convert_StringToCIntBase<ULong> { };
5348 template<>
struct Convert<String,ULongL> :
public Convert_StringToCIntBase<ULongL> { };
5349 template<>
struct Convert<String,Float> :
public Convert_StringToCFltBase<Float> { };
5350 template<>
struct Convert<String,FloatD> :
public Convert_StringToCFltBase<FloatD> { };
5351 template<>
struct Convert<String,FloatL> :
public Convert_StringToCFltBase<FloatL> { };
ULong numul(int base=0) const
Convert to number value (unsigned long).
Definition: string.h:4192
bool writefmtchar(char ch, Size count, const FmtSetField &field)
Write (append) formatted and/or repeated character.
Definition: string.h:4481
bool compact
Whether to use compact mode (no address or ASCII output)
Definition: str.h:3298
~StringFlt()
Destructor.
Definition: string.h:260
static void add(C &dest, T value)=delete
Add/Append value to target (reversed conversion).
Bool boolval() const
Convert to bool value.
Definition: string.h:4116
char ascii_tolower(char ch)
Convert ASCII character to lowercase.
Definition: str.h:119
String & addn(double num, int precision=fPREC_AUTO)
Append formatted floating point number (modifier).
Definition: string.h:2863
String & operator<<(const FmtLongL &fmt)
Append operator to append formatted number field.
Definition: string.h:3222
CharBreakType ascii_breaktype(char ch)
Get ASCII character word-break type.
Definition: str.h:91
bool terminated
Whether to add terminator.
Definition: string.h:223
String & operator=(const char16_t *str)
Assignment operator to set and convert from terminated UTF-16 string.
Definition: string.h:849
FloatL numfl() const
Convert to number value (ldouble floating point).
Definition: string.h:4248
Size size() const
Get size.
Definition: list.h:759
T & max(T &a, T &b)
Returns highest of given values.
Definition: alg.h:47
String & addn(long num, int base=fDEC)
Append formatted signed number (modifier).
Definition: string.h:2815
String & operator=(const ValNull &)
Assignment operator to set as null and empty.
Definition: string.h:957
String & prependn(long num, int base=fDEC)
Prepend formatted signed number (modifier).
Definition: string.h:3677
const char * getnewline(Newline newline=NL)
Get newline string for given type.
Definition: sys.h:793
Key findanybut(const StringBase &chars, Key start=0, Key end=END) const
Find first occurrence of any character not listed with forward search.
Definition: string.h:2124
String & reverse()
Reverse item order (modifier).
Definition: string.h:5039
Size size() const
Get formatting string size.
Definition: string.h:276
ulong size
Buffer size in bytes to dump.
Definition: str.h:3296
Key findr(const StringBase &pattern, Key start=0, Key end=END) const
Find last occurrence of pattern string with reverse search.
Definition: string.h:1977
int compare(const ListBase< wchar16, T > &str)
Comparison against UTF-16 string.
Definition: string.h:1620
String & setn(longl num, int base=fDEC)
Set as formatted signed number (modifier).
Definition: string.h:1133
Key findword(Key start=0, Key end=END) const
Find first word character.
Definition: string.h:2173
StringFlt()
Constructor intializes to null.
Definition: string.h:246
String & copy(const ListType &str)
Set as full (unshared) copy of another string (modifier).
Definition: string.h:2705
String(const char16_t *str, Size size, UtfMode mode=umREPLACE_INVALID)
Constructor to initialize and convert from UTF-16 string literal (using u prefix).
Definition: string.h:803
UInt numu(int base=0) const
Convert to number value (unsigned).
Definition: string.h:4177
Holds integer formatting attributes.
Definition: str.h:2589
bool writefmtdump(const FmtDump &fmt, Newline nl=NL_SYS)
Write formatted data dump.
Definition: string.h:4763
LongL numll(int base=0) const
Convert to number value (signed long-long).
Definition: string.h:4160
bool writefmtdump(const FmtDump &fmt, const char *newline, uint newlinesize)
Write formatted data dump.
Definition: string.h:4672
char pad_ch
Fill character, 0 if unspecified (use baseline or default) (default: '0')
Definition: str.h:2593
bool writenumu(TNum num, int base=fDEC)
Write (append) formatted unsigned number.
Definition: string.h:4433
T getbool() const
Convert to bool value for given boolean type.
Definition: string.h:4020
bool operator!=(const char *str) const
Inequality operator.
Definition: string.h:1665
String & addn(ldouble num, int precision=fPREC_AUTO)
Append formatted floating point number (modifier).
Definition: string.h:2871
Basic boolean type.
Definition: type.h:568
bool token_any(StringT &value, Char &found_delim, const char *delims, Size count)
Extract next token from string using any of given delimiters.
Definition: string.h:1392
String & operator<<(Newline nl)
Append operator to append newline.
Definition: string.h:2993
String(const ListType &str)
Copy constructor.
Definition: string.h:700
String & prependn(longl num, int base=fDEC)
Prepend formatted signed number (modifier).
Definition: string.h:3685
String & addn(ulongl num, int base=fDEC)
Append formatted unsigned number (modifier).
Definition: string.h:2847
String(const char *str)
Constructor for null terminated string.
Definition: string.h:774
StringBase str
Definition: str.h:3006
int utf8_compare(const char *str1, ulong len1, const char *str2, ulong len2)
Compare two non-terminated UTF-8 strings.
Definition: str.h:305
ValEmpty
Special empty value type, pass as vEMPTY.
Definition: sys.h:1101
bool splitr(char delim, ValNull left, T2 &right) const
Split at last occurrence of delimiter into right substring.
Definition: string.h:2396
String & operator<<(const ValEmpty &val)
Append operator to set as empty but not null.
Definition: string.h:2977
String(const ListType *str)
Copy constructor.
Definition: string.h:708
Static conditional type.
Definition: meta.h:134
ListType & operator=(ListType &&src)
Move assignment operator (C++11).
Definition: list.h:496
String & operator=(const ListType *str)
Assignment operator for pointer.
Definition: string.h:886
CharType ascii_type(char ch)
Get ASCII character type.
Definition: str.h:76
static const String & lettersl()
Get string of ASCII lowercase letters (a-z).
Definition: string.h:5075
Evo string scanning helpers with SSE optimized code.
bool upper
Whether to use uppercase hex, false for lowercase.
Definition: str.h:3299
Nullable< T > & set()
Set as null.
Definition: type.h:342
bool split(char delim, ValNull left, T2 &right) const
Split at first occurrence of delimiter into right substring.
Definition: string.h:2324
String & prepend(const char *str, Size size)
Prepend from string pointer (modifier).
Definition: string.h:3645
Size insert(Key index, const ListType &str)
Insert from another string (modifier).
Definition: string.h:3764
String & joinq(const C &items, char delim=',')
Join list items into delimited string, with quoting as needed.
Definition: string.h:4839
Base 16: hexadecimal.
Definition: str.h:2324
bool split(char delim, T1 &left, T2 &right) const
Split at first occurrence of delimiter into left/right substrings.
Definition: string.h:2277
String & stripl(const char *str, Size strsize, Size max=ALL)
Strip left (beginning) occurrences of string.
Definition: string.h:2481
String & prependsep(char delim=',')
Prepend separator/delimiter if needed (modifier).
Definition: string.h:3661
String & joinmap(const C &map, char delim=',', char kvdelim='=')
Join map items into delimited string.
Definition: string.h:4858
Formatting attributes (used internally).
Definition: str.h:2886
Single-quotes: '
Definition: strscan.h:1898
Key find(const StringBase &pattern, Key start=0, Key end=END) const
Find first occurrence of pattern string.
Definition: string.h:1844
Size findreplace(char ch, const char *str, Size size, Size max=ALL)
Find character and replace with string (modifier).
Definition: string.h:3920
String & operator<<(bool val)
Append operator.
Definition: string.h:2880
String & operator<<(const FmtULongL &fmt)
Append operator to append formatted number field.
Definition: string.h:3238
Basic character type (char) – see CharT.
Definition: type.h:775
String & insertn(Key index, uint num, int base=fDEC)
Insert formatted unsigned number (modifier).
Definition: string.h:3825
String & operator<<(const FmtFloatD &fmt)
Append operator to append formatted number field.
Definition: string.h:3246
String & slice2(Key index1, Key index2)
Slice to given sublist using start/end positions.
Definition: string.h:4999
String & set2(const StringBase &data, Key index1, Key index2)
Set and reference sublist using start/end positions.
Definition: string.h:1109
String & triml(Size size)
Trim left (beginning) items.
Definition: string.h:4979
String & setn(ulong num, int base=fDEC)
Set as formatted unsigned number (modifier).
Definition: string.h:1149
char * format(char *ptr)
Format number using given buffer.
Definition: string.h:235
Key find(char ch, Key start, Key end=END) const
Find first occurrence of character with forward search.
Definition: string.h:1779
bool splitr(char delim, T1 &left, T2 &right) const
Split at last occurrence of delimiter into left/right substrings.
Definition: string.h:2349
String & operator<<(const FmtLong &fmt)
Append operator to append formatted number field.
Definition: string.h:3218
Word character (A-Z, a-z, 0-9, _)
Definition: str.h:65
Automatic floating point precision – either normal decimal notation or E notation, whichever is shorter (default)
Definition: str.h:2343
String & copy(const char *str, Size size)
Set as full (unshared) copy using string pointer (modifier).
Definition: string.h:2720
Random access iterator.
Definition: iter.h:904
Size writequoted(const char *buf, Size size, char delim, bool optional=false)
Write (append) quoted output to string.
Definition: string.h:4305
bool tokenr_any(StringT &value, Char &found_delim, const char *delims, Size count)
Extract next token from string in reverse (from end of string) using any of given delimiters...
Definition: string.h:1432
ValNull
Unique null value type and value (vNULL).
Definition: sys.h:1096
String & insertn(Key index, float num, int precision=fPREC_AUTO)
Insert formatted floating point number (modifier).
Definition: string.h:3852
Key find(const char *pattern, uint pattern_size, Key start=0, Key end=END) const
Find first occurrence of pattern string.
Definition: string.h:1803
String & trimr(Size size)
Trim right (ending) items.
Definition: string.h:4983
String & stripr(char ch, Size max=ALL)
Strip right (ending) occurences of character.
Definition: string.h:2520
String & slice(Key index)
Slice beginning items.
Definition: string.h:4991
static const T & value(const T &src)=delete
Convert value to target.
Backtick: `
Definition: strscan.h:1900
Holds string to use when formatting null values.
Definition: str.h:2406
Triple backtick: ```
Definition: strscan.h:1903
Triple single-quotes: '''
Definition: strscan.h:1901
String & operator<<(long num)
Append operator to append formatted number.
Definition: string.h:3033
String & copy(const char *str)
Set as full (unshared) copy of null terminated string (modifier).
Definition: string.h:2727
char fill
Field fill character to pad up to width (default: ' ')
Definition: str.h:2484
static int digits(T num, int base=10)
Get number of digits for given number and base.
Definition: type.h:1028
String & operator<<(const FmtUInt &fmt)
Append operator to append formatted number field.
Definition: string.h:3230
String & prependn(ulong num, int base=fDEC)
Prepend formatted unsigned number (modifier).
Definition: string.h:3701
String & setn(double num, int precision=fPREC_AUTO)
Set as formatted floating point number (modifier).
Definition: string.h:1173
String & capacitymax(Size max)
Set maximum capacity (modifier).
Definition: string.h:5019
const char * cstr(String &buffer) const
Get terminated string pointer, using given string buffer if needed (const).
Definition: string.h:1561
String & operator<<(const ValNull &val)
Append operator to set as null and empty.
Definition: string.h:2960
ulong utf16_strlen(const wchar16 *str)
Find terminated UTF-16 string length.
Definition: str.h:946
T getnum(int base=0) const
Convert to number value for given integer type.
Definition: string.h:4063
String & replace(Key index, Size rsize, const StringBase &str)
Replace characters with string (modifier).
Definition: string.h:3891
uint count
Character repeat count.
Definition: str.h:2916
ULongL numull(int base=0) const
Convert to number value (unsigned long-long).
Definition: string.h:4207
String & prependn(uint num, int base=fDEC)
Prepend formatted unsigned number (modifier).
Definition: string.h:3693
Newline
Newline type.
Definition: sys.h:748
String & operator<<(ulong num)
Append operator to append formatted number.
Definition: string.h:3078
bool convert_addq(C value, char delim=',')
Convert value to string with quoting as needed, appending to current string.
Definition: string.h:4808
Size writebin(const char *buf, Size size)
Write (append) to string.
Definition: string.h:4278
static const T MAX
Maximum interger value.
Definition: type.h:996
Int num(int base=0) const
Convert to number value (signed).
Definition: string.h:4132
Generic value conversion template.
Definition: type.h:1757
String fixed-size buffer for formatting an integer.
Definition: string.h:54
String & stripl_newlines()
Strip all left (beginning) newlines from string.
Definition: string.h:2603
String & operator=(const StringBase &data)
Assignment operator to copy from base list type.
Definition: string.h:901
static const String & digitsl()
Get string of all ASCII alphanumeric digits with lowercase letters (0-9, a-z).
Definition: string.h:5057
String(const ListType &str, Key index, Key size=ALL)
Extended copy constructor.
Definition: string.h:718
Key findanybutr(const char *chars, Size count, Key start=0, Key end=END) const
Find last occurrence of any character not listed with reverse search.
Definition: string.h:2138
String & operator=(const ValEmpty &)
Assignment operator to set as empty but not null.
Definition: string.h:969
String ThisType
This string type.
Definition: string.h:676
String & insertn(Key index, longl num, int base=fDEC)
Insert formatted signed number (modifier).
Definition: string.h:3816
Long numl(int base=0) const
Convert to number value (signed long).
Definition: string.h:4146
const char * str_scan_nws(const char *str, const char *end)
Scan string pointer for next non-whitespace character and return stop pointer.
Definition: strscan.h:877
String & clear()
Clear by removing all items.
Definition: string.h:4975
String & stripr()
Strip right (ending) whitespace (spaces and tabs).
Definition: string.h:2506
Key find(char ch) const
Find first occurrence of character with forward search.
Definition: string.h:1761
bool getbool(Error &error) const
Convert to bool value for given boolean type.
Definition: string.h:4006
Basic integer type.
Definition: type.h:980
String & stripr2()
Strip right (ending) whitespace (including newlines) from string.
Definition: string.h:2589
uint maxline
Maximum bytes per line to dump, 0 for none (all 1 line)
Definition: str.h:3297
String & operator<<(Flush)
Flush output buffer – no-op for string.
Definition: string.h:3003
FmtSetFloat fmt
Definition: str.h:3156
String Out
Type returned by write_out()
Definition: string.h:678
String()
Default constructor sets as null.
Definition: string.h:684
IterM begin()
Get iterator at first item (mutable).
Definition: string.h:1725
static const String & letters()
Get string of ASCII letters (A-z).
Definition: string.h:5063
int width
Definition: str.h:3007
StrSizeT Size
List size integer type
Definition: list.h:247
String & insertn(Key index, long num, int base=fDEC)
Insert formatted signed number (modifier).
Definition: string.h:3807
Key findanyr(const StringBase &chars, Key start=0, Key end=END) const
Find last occurrence of any given characters with reverse search.
Definition: string.h:2085
String & operator<<(const FmtFloat &fmt)
Append operator to append formatted number field.
Definition: string.h:3242
String & strip(char ch)
Strip left (beginning) and right (ending) occurences of character.
Definition: string.h:2433
String & resize(Size size)
Resize while preserving existing data (modifier).
Definition: string.h:5035
bool token_line(StringT &line)
Extract next line from string.
Definition: string.h:1467
Check if type is a Plan Old Data type.
Definition: meta.h:528
Size findreplace(const StringBase &fstr, const StringBase &str, Size max=ALL)
Find string and replace with string (modifier).
Definition: string.h:3977
Size findreplace(const char *fstr, Size fsize, const char *str, Size size, Size max=ALL)
Find string and replace with string (modifier).
Definition: string.h:3949
String & operator=(const ListBase< wchar16, T > &str)
Assignment operator to convert from UTF-16 string to UTF-8 string.
Definition: string.h:942
bool set_unicode(const char16_t *str, Size size, UtfMode mode=umREPLACE_INVALID)
Set as normal UTF-8 string converted from a raw UTF-16 string.
Definition: string.h:1233
StringFlt(T num, int precision=fPREC_AUTO, bool terminated=true)
Constructor intializes with set().
Definition: string.h:256
int pad_width
Width to fill to, 0 for none, -1 if unspecified (use baseline or default) (default: 0) ...
Definition: str.h:2592
bool operator==(const String &str) const
Equality operator.
Definition: string.h:1632
String & add(const char *str)
Append null terminated string (modifier).
Definition: string.h:2790
char buffer[BUF_SIZE]
String buffer
Definition: string.h:60
String & prependn(int num, int base=fDEC)
Prepend formatted signed number (modifier).
Definition: string.h:3669
Error
General Evo error code stored in exceptions, or used directly when exceptions are disabled...
Definition: sys.h:1113
Key findanybutr(const StringBase &chars, Key start=0, Key end=END) const
Find last occurrence of any character not listed with reverse search.
Definition: string.h:2163
Advanced: Special structure used to avoid automatically allocating memory when a bigger buffer is nee...
Definition: string.h:218
Size writechar(char ch, Size count=1)
Write (append) repeat character as text output to string.
Definition: string.h:4266
const char * cstr()
Get terminated string pointer (modifier).
Definition: string.h:1571
uint getnewlinesize(Newline newline=NL)
Get newline string size for given type.
Definition: sys.h:804
FmtAlign
Formatting alignment.
Definition: str.h:2356
StringInt< T, PADDING > ThisType
This type.
Definition: string.h:55
const char * data() const
Get string pointer (const).
Definition: string.h:1533
bool empty() const
Get whether empty.
Definition: list.h:753
Size findreplace(char ch, const StringBase &str, Size max=ALL)
Find character and replace with string (modifier).
Definition: string.h:3938
uint32 StrSizeT
Default Evo string size type.
Definition: sys.h:734
Key findwordr(Key start=0, Key end=END) const
Find last word character with reverse search.
Definition: string.h:2191
bool tokenr_line(StringT &line)
Extract next line from string in reverse (from end of string).
Definition: string.h:1501
Base 10: decimal (default)
Definition: str.h:2323
String & strip2()
Strip left (beginning) and right (ending) whitespace from string, including newlines.
Definition: string.h:2557
String container.
Definition: string.h:674
String & operator=(const String &str)
Assignment operator.
Definition: string.h:868
String & set2(const ListType &str, Key index1, Key index2)
Set from substring of another string using start/end positions.
Definition: string.h:1097
const void * buf
Buffer to dump.
Definition: str.h:3295
Size insert(Key index, const StringBase &str)
Insert from another string (modifier).
Definition: string.h:3772
String & prepend(const ListType &str)
Prepend from another string (modifier).
Definition: string.h:3630
String & operator<<(float num)
Append operator to append formatted number.
Definition: string.h:3108
Size insert(Key index, char ch, Size count)
Insert copies of the same character (modifier).
Definition: string.h:3752
FloatD numfd() const
Convert to number value (double floating point).
Definition: string.h:4235
String & strip()
Strip left (beginning) and right (ending) whitespace (spaces and tabs).
Definition: string.h:2416
String & replace(Key index, Size rsize, const char *str, Size size)
Replace characters with string (modifier).
Definition: string.h:3901
String(const String &str)
Copy constructor.
Definition: string.h:692
String(String &&src)
Move constructor (C++11).
Definition: string.h:831
String & convert_set(C value)
Convert value to string, replacing current string.
Definition: string.h:4786
Key findanyr(const char *chars, Size count, Key start=0, Key end=END) const
Find last occurrence of any given characters with reverse search.
Definition: string.h:2060
String & prepend(char ch, Size count)
Prepend copies of the same character (modifier).
Definition: string.h:3619
String & operator<<(const FmtChar &fmt)
Append operator to append formatted character field.
Definition: string.h:3145
char * write_direct_multi(Size &available, Size reserve_size)
Get pointer for writing directly to buffer to append data and allow multiple passes for larger sizes...
Definition: string.h:4372
Key findnonword(Key start=0, Key end=END) const
Find first non-word word character.
Definition: string.h:2210
String & operator<<(uint num)
Append operator to append formatted number.
Definition: string.h:3063
bool operator==(const PtrBase< T > &ptr1, const PtrBase< T, Atomic< T *> > &ptr2)
Equality operator for managed pointer base and atomic pointer base.
Definition: atomic.h:1193
String & operator<<(const FmtULong &fmt)
Append operator to append formatted number field.
Definition: string.h:3234
bool writefmtnumf(TNum num, const FmtSetFloat &fmt, const FmtSetField *field=NULL)
Write (append) formatted floating point number with field alignment.
Definition: string.h:4652
Size size
Buffer size required to format number (including PADDING), modified by format() to formatted size (ex...
Definition: string.h:219
T getnumf() const
Convert to floating point number value for given type.
Definition: string.h:4101
C::Size split(C &items, char delim=',') const
Split delimited string into item list using given tokenizer.
Definition: string.h:4902
String::ListBaseType StringBase
Base string typedef.
Definition: string.h:5372
Flush
Signals an output stream to flush pending data.
Definition: sys.h:739
T Type
Translated type.
Definition: meta.h:373
StrSizeT Size
Size type.
Definition: string.h:56
bool operator==(const ListBase< wchar16, T > &str)
Equality operator to compare against UTF-16 string.
Definition: string.h:1649
bool operator!=(const ListBase< wchar16, T > &str)
Inequality operator to compare against UTF-16 string.
Definition: string.h:1675
String & add(const ListType &str)
Append from another string (modifier).
Definition: string.h:2762
String & insertn(Key index, ulongl num, int base=fDEC)
Insert formatted unsigned number (modifier).
Definition: string.h:3843
String & stripl_newlines(Size max)
Strip left (beginning) newlines from string.
Definition: string.h:2623
ThisType & add(const char *data, Size size)
Append additional data to buffer.
Definition: string.h:139
String & setn(int num, int base=fDEC)
Set as formatted signed number (modifier).
Definition: string.h:1117
int exponent
Exponent for normalized floating point number to format.
Definition: string.h:221
static void set(C &dest, T value)=delete
Set target to value (reversed conversion).
static const EndT END
Special integer value for indicating end of items or no item.
Definition: type.h:1846
String & addn(int num, int base=fDEC)
Append formatted signed number (modifier).
Definition: string.h:2807
void merge(const FmtSetInt &src)
Merge source attributes (used internally).
Definition: str.h:2626
const char * str
Pointer to string for formatting null values, ignored if size is 0.
Definition: str.h:2407
Align center by adding filler on left and right sides.
Definition: str.h:2359
bool writefmtstr(const char *str, Size size, const FmtSetField &field)
Write (append) text with field alignment.
Definition: string.h:4531
static const EndT ALL
Special integer value for indicating all items or all remaining items.
Definition: type.h:1839
void merge(const FmtSetField &src)
Merge source attributes (used internally).
Definition: str.h:2514
Iter cbegin() const
Get iterator at first item (const).
Definition: string.h:1705
Explicitly format an integer.
Definition: str.h:3065
String & capacitymin(Size min)
Set minimum capacity (modifier).
Definition: string.h:5015
String & strip_newlines()
Strip left (beginning) and right (ending) newlines from string.
Definition: string.h:2693
char * write_direct(Size size)
Get pointer for writing directly to buffer to append data.
Definition: string.h:4357
String & joinmapq(const C &map, char delim=',', char kvdelim='=')
Join map items into delimited string, with quoting as needed.
Definition: string.h:4880
const char * str_scan_nws_r(const char *str, const char *end)
Scan string pointer for next non-whitespace character in reverse and return new end after stop pointe...
Definition: strscan.h:896
String & insert(Key index, const char *str)
Insert null terminated string (modifier).
Definition: string.h:3789
char * data()
Get formatted string pointer.
Definition: string.h:268
bool set_unicode(const wchar16 *str, UtfMode mode=umREPLACE_INVALID)
Set as normal UTF-8 string converted from a raw terminated UTF-16 string.
Definition: string.h:1227
const char * getnewline() const
Get newline string pointer for current value.
Definition: sys.h:885
bool operator!=(const PtrBase< T > &ptr1, const PtrBase< T, Atomic< T *> > &ptr2)
Inequality operator for managed pointer base and atomic pointer base.
Definition: atomic.h:1202
String & join(const C &items, char delim=',')
Join list items into delimited string.
Definition: string.h:4820
const char * cstrM() const
Get terminated string pointer (modifier).
Definition: string.h:1607
bool writefmtnum(TNum num, const FmtSetInt &fmt, const FmtSetField *field=NULL)
Write (append) formatted signed number with field alignment.
Definition: string.h:4583
String & operator<<(longl num)
Append operator to append formatted number.
Definition: string.h:3048
String & setempty()
Set as empty but not null.
Definition: string.h:982
String & stripl()
Strip left (beginning) whitespace (spaces and tabs).
Definition: string.h:2449
String & prependn(double num, int precision=fPREC_AUTO)
Prepend formatted floating point number (modifier).
Definition: string.h:3725
String fixed-size buffer for formatting a floating point number.
Definition: string.h:204
String & operator<<(ldouble num)
Append operator to append formatted number.
Definition: string.h:3138
String & operator<<(const FmtFloatL &fmt)
Append operator to append formatted number field.
Definition: string.h:3250
String & operator<<(char ch)
Append operator.
Definition: string.h:2900
FmtAlign align
Field alignment type (default: fLEFT)
Definition: str.h:2482
static const String & whitespace()
Get string of ASCII whitespace characters (space, tab).
Definition: string.h:5081
char ascii_toupper(char ch)
Convert ASCII character to uppercase.
Definition: str.h:105
FmtPrecision
Formatting floating point precision type.
Definition: str.h:2341
String & operator<<(const FmtUShort &fmt)
Append operator to append formatted number field.
Definition: string.h:3226
String & slice(Key index, Size size)
Slice to given sublist.
Definition: string.h:4995
Key findr(StringSearchAlg alg, const char *pattern, uint pattern_size, Key start=0, Key end=END) const
Find last occurrence of pattern string with reverse search.
Definition: string.h:1957
FmtSetInt fmt
Formatting attributes.
Definition: str.h:3266
String & fillch(char ch, Key index=0, Size size=ALL)
Fill with copies of character (modifier).
Definition: string.h:3880
bool contains(const StringBase &str) const
Check whether contains given string.
Definition: string.h:2259
String & operator<<(const FmtShort &fmt)
Append operator to append formatted number field.
Definition: string.h:3210
String & setn(long num, int base=fDEC)
Set as formatted signed number (modifier).
Definition: string.h:1125
Double-quotes: "
Definition: strscan.h:1899
void merge(const FmtSetFloat &src)
Merge from source (used internally).
Definition: str.h:2806
T number
Normalized floating point number to format.
Definition: string.h:220
Key findr(const char *pattern, uint pattern_size, Key start=0, Key end=END) const
Find last occurrence of pattern string with reverse search.
Definition: string.h:1936
char * data()
Get formatted string pointer.
Definition: string.h:85
String & operator<<(double num)
Append operator to append formatted number.
Definition: string.h:3123
String & stripl(char ch, Size max=ALL)
Strip left (beginning) occurrences of character.
Definition: string.h:2465
bool ends(char ch) const
Check if this ends with given character.
Definition: string.h:1694
Triple double-quotes: """
Definition: strscan.h:1902
Evo C++ Library namespace.
Definition: alg.h:11
ListBaseType StringBase
Alias for ListBaseType.
Definition: string.h:680
String & operator=(const char *str)
Assignment operator for null terminated string.
Definition: string.h:911
StringSearchAlg
String search algorithm selection.
Definition: str.h:1164
static const EndT NONE
Special integer value for indicating no item or unknown item.
Definition: type.h:1832
Size insert(Key index, const char *str, Size size)
Insert string data (modifier).
Definition: string.h:3781
String(const UnicodeStringBase &str)
Constructor to convert from UTF-16 string to UTF-8 string.
Definition: string.h:765
Size capacity() const
Get capacity.
Definition: string.h:5007
String & operator<<(const FmtInt &fmt)
Append operator to append formatted number field.
Definition: string.h:3214
bool set_unicode(const char16_t *str, UtfMode mode=umREPLACE_INVALID)
Set as normal UTF-8 string converted from a raw terminated UTF-16 string.
Definition: string.h:1239
Holds floating point formatting attributes.
Definition: str.h:2775
uint getnewlinesize() const
Get newline string size for current value.
Definition: sys.h:909
Explicitly format a string.
Definition: str.h:2931
Uppercase alphabetic character (A-Z)
Definition: str.h:54
String & insertn(Key index, int num, int base=fDEC)
Insert formatted signed number (modifier).
Definition: string.h:3798
Iter begin() const
Get iterator at first item (const).
Definition: string.h:1734
Replace invalid characters with UNICODE_REPLACEMENT_CHAR.
Definition: str.h:138
Iter end() const
Get iterator at end.
Definition: string.h:1754
String & prependn(ulongl num, int base=fDEC)
Prepend formatted unsigned number (modifier).
Definition: string.h:3709
UtfMode
UTF decoding mode used to set how to handle invalid character values.
Definition: str.h:136
String & insertn(Key index, ulong num, int base=fDEC)
Insert formatted unsigned number (modifier).
Definition: string.h:3834
String & set_win32(const WCHAR *str)
Set as normal (UTF-8) string converted from a terminated Windows UTF-16 (WCHAR) string (Windows only)...
Definition: string.h:1285
String(const char16_t *str, UtfMode mode=umREPLACE_INVALID)
Constructor to initialize and convert from terminated UTF-16 string literal (using u prefix)...
Definition: string.h:813
String & unslice()
Clean and remove hidden items previously removed via slicing (modifier).
Definition: string.h:5003
String(const PtrBase< char > &str, Size size)
Constructor for managed string pointer.
Definition: string.h:750
bool contains(char ch) const
Check whether this contains given character.
Definition: string.h:2244
String & operator<<(const FmtDump &fmt)
Append operator to append data dump.
Definition: string.h:3279
T num
Definition: str.h:3155
T getnumf(Error &error) const
Convert to floating point number value for given type.
Definition: string.h:4084
String & unshare()
Make data unique by allocating new buffer, if needed (modifier).
Definition: string.h:5031
FmtSetInt fmt
Formatting attributes.
Definition: str.h:3072
String & stripr_newlines(Size max)
Strip right (ending) newlines from string.
Definition: string.h:2666
String & add(char ch, Size count)
Append copies of the same character (modifier).
Definition: string.h:2749
Size Key
Key type (item index)
Definition: list.h:248
String & addn(longl num, int base=fDEC)
Append formatted signed number (modifier).
Definition: string.h:2823
int precision
Floating point precision (number of digits after decimal), fPREC_AUTO for automatic (default: fPREC_A...
Definition: str.h:2776
ThisType & tolower()
Convert all uppercase characters in string to lowercase (modifier).
Definition: string.h:4955
String & replace(Key index, Size rsize, const char *str)
Replace characters with string (modifier).
Definition: string.h:3910
Size findreplace(const StringBase &fstr, const char *str, Size size, Size max=ALL)
Find string and replace with string (modifier).
Definition: string.h:3987
String(const PtrBase< char > &str)
Constructor to copy null terminated string from managed pointer.
Definition: string.h:787
Key findr(StringSearchAlg alg, const StringBase &pattern, Key start=0, Key end=END) const
Find last occurrence of pattern string with reverse search.
Definition: string.h:1996
String & addsep(char delim=',')
Append separator/delimiter if needed (modifier).
Definition: string.h:2799
bool write_direct_finish(Size size)
Finish writing directly to buffer.
Definition: string.h:4406
String & insertn(Key index, double num, int precision=fPREC_AUTO)
Insert formatted floating point number (modifier).
Definition: string.h:3861
String & operator=(String &&src)
Move assignment operator (C++11).
Definition: string.h:838
String & stripl2()
Strip left (beginning) whitespace from string, including newlines.
Definition: string.h:2573
const String & asconst() const
Explicitly use a const reference to this.
Definition: string.h:856
Check if integer type is unsigned.
Definition: meta.h:296
C::Size splitmap(C &map, char delim=',', char kvdelim='=') const
Split delimited string into map key/value items.
Definition: string.h:4921
DataCopy< char >::PassType ItemVal
Item type as parameter (POD types passed by value, otherwise by const-ref)
Definition: list.h:251
Size writetext(const char *buf, Size size)
Write (append) text output to string.
Definition: string.h:4290
static const Newline NL_SYS
Current system newline type.
Definition: sys.h:763
bool splitr(char delim, T1 &left) const
Split at last occurrence of delimiter into left substring.
Definition: string.h:2373
static T fexp10(int &exp, T num)
Extract normalized base 10 mantissa and exponent from number.
Definition: type.h:1438
List< char, StrSizeT > ListType
List type.
Definition: string.h:677
char * data_
Data pointer, NULL if null.
Definition: sys.h:979
Backtick followed by DEL char (7F) – last resort (rare)
Definition: strscan.h:1904
P ptr_
Pointer.
Definition: type.h:1566
T getnum(Error &error, int base=0) const
Convert to number value for given integer type.
Definition: string.h:4045
String & add(char ch)
Append character (modifier).
Definition: string.h:2741
String & setn(ulongl num, int base=fDEC)
Set as formatted unsigned number (modifier).
Definition: string.h:1157
Key findany(const char *chars, Size count, Key start=0, Key end=END) const
Find first occurrence of any given characters with forward search.
Definition: string.h:2016
bool operator!=(const String &str) const
Inequality operator.
Definition: string.h:1658
Size findreplace(const char *fstr, Size fsize, const StringBase &str, Size max=ALL)
Find string and replace with string (modifier).
Definition: string.h:3968
StringInt(T num, int base=fDEC, bool terminated=true, uint end_padding=0)
Constructor intializes with set().
Definition: string.h:77
Explicitly format a repeated character.
Definition: str.h:2914
Align left by adding filler on right side.
Definition: str.h:2358
C convert() const
Convert string to value of given type.
Definition: string.h:4776
int base
Base for formatting (default: fDEC)
Definition: str.h:2590
Iter cend() const
Get iterator at end (const).
Definition: string.h:1715
ThisType & toupper()
Convert all lowercase characters in string to uppercase (modifier).
Definition: string.h:4932
char * addnew(Size size)
Add additional space to buffer and return pointer to new uninitialized space in buffer.
Definition: string.h:155
Explicitly format a pointer.
Definition: str.h:3264
String & operator<<(const FmtString &fmt)
Append operator to append formatted string field.
Definition: string.h:3152
FmtWidth
Formatting field width.
Definition: str.h:2367
String & addn(uint num, int base=fDEC)
Append formatted unsigned number (modifier).
Definition: string.h:2831
String & prependn(float num, int precision=fPREC_AUTO)
Prepend formatted floating point number (modifier).
Definition: string.h:3717
String & operator<<(const StringBase &str)
Append operator.
Definition: string.h:2930
int precision
Precision to format.
Definition: string.h:222
StrSizeT size
String (str) size for formatting null values, 0 for none/empty
Definition: str.h:2408
String & addn(ulong num, int base=fDEC)
Append formatted unsigned number (modifier).
Definition: string.h:2839
static const String & lettersu()
Get string of ASCII uppercase letters (A-Z).
Definition: string.h:5069
FmtSetField field
Field alignment attributes.
Definition: str.h:2890
String & truncate(Size size=0)
Truncate to given size.
Definition: string.h:4987
bool set_unicode(const wchar16 *str, Size size, UtfMode mode=umREPLACE_INVALID)
Set as normal UTF-8 string converted from a raw UTF-16 string.
Definition: string.h:1196
int indent
Definition: str.h:3008
Key findr(char ch) const
Find last occurrence of character with reverse search.
Definition: string.h:1879
static Type get(const char *data, ulong data_size)
Definition: strscan.h:1917
NumInfo()
Constructor.
Definition: string.h:226
bool contains(const char *str, Size size) const
Check whether this contains given string.
Definition: string.h:2252
String & operator=(const PtrBase< char > &str)
Assignment operator to copy from managed pointer with null terminated string.
Definition: string.h:927
bool valid() const
Get whether valid (not null).
Definition: type.h:324
static bool addq(C &dest, T value, typename C::Value delim)=delete
Add/Append value to target with quoting when needed (reversed conversion).
String & prepend(char ch)
Prepend character (modifier).
Definition: string.h:3611
String & setn(ldouble num, int precision=fPREC_AUTO)
Set as formatted floating point number (modifier).
Definition: string.h:1181
FmtBasePrefix prefix
Formatting prefix type (default: fPREFIX0)
Definition: str.h:2591
IterM end()
Get iterator at end.
Definition: string.h:1744
String & advResize(Size size)
Advanced: Resize while preserving existing data, POD items not initialized (modifier).
Definition: string.h:5043
StrSizeT size_
Data size as item count, 0 if empty or null.
Definition: sys.h:980
String & setn(float num, int precision=fPREC_AUTO)
Set as formatted floating point number (modifier).
Definition: string.h:1165
Nullable basic floating-point base type.
Definition: type.h:1291
StringBase str
Definition: str.h:2936
Sequential list container with random access.
Definition: list.h:240
Key findanybut(const char *chars, Size count, Key start=0, Key end=END) const
Find first occurrence of any character not listed with forward search.
Definition: string.h:2099
String(const StringBase &str, Key index=0, Key size=ALL)
Constructor to copy substring data.
Definition: string.h:729
String & copy(const StringBase &str)
Set as full (unshared) copy of substring (modifier).
Definition: string.h:2712
Key findnonwordr(Key start=0, Key end=END) const
Find last non-word character with reverse search.
Definition: string.h:2229
Size insert(Key index, char ch)
Insert character (modifier).
Definition: string.h:3743
static void setup_align(int &align_padleft, int &align_padright, int align_padding, const FmtSetField *field)
Used to setup and calculate alignment padding (used internally).
Definition: str.h:2529
FmtBasePrefix
Formatting integer base prefix type.
Definition: str.h:2331
String & add(const char *str, Size size)
Append from string pointer (modifier).
Definition: string.h:2781
int width
Field width to align in (default: 0)
Definition: str.h:2483
StringFlt< T, PADDING > ThisType
This type.
Definition: string.h:205
String & operator<<(const char *str)
Append operator.
Definition: string.h:2945
bool writefmtnumu(TNum num, const FmtSetInt &fmt, const FmtSetField *field=NULL)
Write (append) formatted unsigned number with field alignment.
Definition: string.h:4604
Lowercase alphabetic character (a-z)
Definition: str.h:55
StrSizeT Size
Size type.
Definition: string.h:206
const void * ptr
Pointer to format.
Definition: str.h:3265
String & set()
Set as null and empty.
Definition: string.h:995
Punctuation used before a word begins, break words before this ( ([{< )
Definition: str.h:63
Align right by adding filler on left side.
Definition: str.h:2360
String & addn(float num, int precision=fPREC_AUTO)
Append formatted floating point number (modifier).
Definition: string.h:2855
String & operator<<(const FmtStringWrap &fmt)
Append operator to append formatted wrapped string column.
Definition: string.h:3159
static const String & digits()
Get string of all ASCII alphanumeric digits with uppercase letters (0-9, A-Z).
Definition: string.h:5051
StringInt()
Constructor intializes to null.
Definition: string.h:66
static const int BUF_SIZE
Buffer size.
Definition: string.h:58
String & operator<<(const FmtPtr &fmtptr)
Append operator to append formatted pointer field.
Definition: string.h:3272
String & operator<<(const ListType &str)
Append operator.
Definition: string.h:2915
Base managed pointer.
Definition: type.h:1562
FmtSetInt num_int
Integer attributes.
Definition: str.h:2888
int utf16_compare8(const wchar16 *str1, ulong len1, const char *str2, ulong len2)
Compare a non-terminated UTF-16 string to a non-terminated UTF-8 string.
Definition: str.h:842
char ch
Character to format.
Definition: str.h:2915
FmtSetField fmt
Definition: str.h:2937
String & stripr(const char *str, Size strsize, Size max=ALL)
Strip right (ending) occurences of string.
Definition: string.h:2534
String & prepend(const StringBase &str)
Prepend from another string (modifier).
Definition: string.h:3637
String & stripr_newlines()
Strip all right (ending) newlines from string.
Definition: string.h:2652
char * write_direct_flush(Size &available, Size written_size, Size reserve_size)
Flush data written directly to buffer and get pointer for appending more.
Definition: string.h:4390
String & operator<<(ulongl num)
Append operator to append formatted number.
Definition: string.h:3093
ListBase< wchar16, Size > UnicodeStringBase
Base for UnicodeString.
Definition: string.h:681
String & convert_add(C value)
Convert value to string, appending to current string.
Definition: string.h:4796
String(const char *str, Size size)
Constructor for string pointer.
Definition: string.h:739
Out & write_out()
Get parent output string.
Definition: string.h:4256
bool starts(char ch) const
Check if this starts with given character.
Definition: string.h:1687
Base for all Evo list types (used internally).
Definition: sys.h:976
String & insertn(Key index, ldouble num, int precision=fPREC_AUTO)
Insert formatted floating point number (modifier).
Definition: string.h:3870
Explicitly format a floating pointer number.
Definition: str.h:3148
T & min(T &a, T &b)
Returns lowest of given values.
Definition: alg.h:26
bool token(StringT &value, char delim)
Extract next token from string.
Definition: string.h:1318
Holds field and alignment formatting attributes.
Definition: str.h:2481
Key find(StringSearchAlg alg, const char *pattern, uint pattern_size, Key start=0, Key end=END) const
Find first occurrence of pattern string using specified algorithm.
Definition: string.h:1824
Key findr(char ch, Key start, Key end=END) const
Find last occurrence of character with reverse search.
Definition: string.h:1904
String & prepend(const char *str)
Prepend null terminated string (modifier).
Definition: string.h:3652
T num
Number to format.
Definition: str.h:3071
NewlineValue newline
Definition: str.h:3009
Key findany(const StringBase &chars, Key start=0, Key end=END) const
Find first occurrence of any given characters with forward search.
Definition: string.h:2046
String & setn(uint num, int base=fDEC)
Set as formatted unsigned number (modifier).
Definition: string.h:1141
Float numf() const
Convert to number value (floating point).
Definition: string.h:4222
bool tokenr(StringT &value, char delim)
Extract next token from string in reverse (from end of string).
Definition: string.h:1349
FmtSetNull null
String to use for null values from strings (like String) or primitives (like Int) ...
Definition: str.h:2887
String & compact()
Reduce capacity to fit current size (modifier).
Definition: string.h:5023
bool split(char delim, T1 &left) const
Split at first occurrence of delimiter into left substring.
Definition: string.h:2301
String & capacity(Size size)
Set new capacity (modifier).
Definition: string.h:5011
String(const std::initializer_list< char > &init)
Sequence constructor (C++11).
Definition: string.h:820
Data not quotable (invalid text)
Definition: strscan.h:1905
Size size() const
Get formatting string size.
Definition: string.h:93
String & prependn(ldouble num, int precision=fPREC_AUTO)
Prepend formatted floating point number (modifier).
Definition: string.h:3733
String & add(const StringBase &str)
Append from another string (modifier).
Definition: string.h:2771
String & set_win32(const WCHAR *str, int size)
Set as normal (UTF-8) string converted from a Windows UTF-16 (WCHAR) string (Windows only)...
Definition: string.h:1255
Explicitly format a hex dump from buffer.
Definition: str.h:3294
FmtBase
Formatting integer base.
Definition: str.h:2318
Key find(StringSearchAlg alg, const StringBase &pattern, Key start=0, Key end=END) const
Find first occurrence of pattern string using specified algorithm.
Definition: string.h:1863
#define EVO_PARAM_UNUSED(NAME)
Mark function parameter as unused to suppress "unreferenced parameter" compiler warnings on it...
Definition: sys.h:427
bool operator==(const char *str) const
Equality operator.
Definition: string.h:1639
Current alignment (i.e. unspecified/default)
Definition: str.h:2357
FmtSetFloat num_flt
Floating point attributes.
Definition: str.h:2889
bool writenum(TNum num, int base=fDEC)
Write (append) formatted signed number.
Definition: string.h:4418
String & operator<<(int num)
Append operator to append formatted number.
Definition: string.h:3018
ulong utf16_to8(const wchar16 *&str, const wchar16 *end, char *outbuf=NULL, ulong outsize=0, UtfMode mode=umREPLACE_INVALID)
Convert UTF-16 string to UTF-8 string.
Definition: str.h:1053
Type
Quoting type.
Definition: strscan.h:1897
String & operator=(const ListType &str)
Assignment operator.
Definition: string.h:877
String & reserve(Size size, bool prefer_realloc=false)
Reserve capacity for additional items (modifier).
Definition: string.h:5027
bool writenumf(TNum num, int precision=fPREC_AUTO)
Write (append) formatted floating-point number.
Definition: string.h:4448