66#define strtoull _strtoui64
70namespace std {
using ::list; }
127 memcpy(data, s.c_str(),
n);
136 Error(
"TString::TString",
"NULL input string!");
141 Error(
"TString::TString",
"Negative length!");
145 if (strlen(cs) < (
size_t)
n) {
146 Warning(
"TString::TString",
"Input string is shorter than requested size.");
157 char *data =
Init(1, 1);
175 Error(
"TString::TString",
"Negative length!");
180 while (
n--) data[
n] =
c;
203 fRep.fRaw = s.fRep.fRaw;
212 Ssiz_t len = substr.length();
213 char *data =
Init(len, len);
214 memcpy(data, substr.data(), len);
223 char *data =
Init(len, len);
224 memcpy(data, substr.
Data(), len);
233 Error(
"TString::TString",
"Negative first length!");
238 Error(
"TString::TString",
"Negative second length!");
246 Error(
"TString::TString",
"Too large number of characters!");
250 char *data =
Init(tot, tot);
251 if (a1) memcpy(data, a1, n1);
252 if (a2) memcpy(data+n1, a2, n2);
271 Error(
"TString::Init",
"Negative length!");
275 Error(
"*TString::Init",
"Negative length!");
278 if (nchar > capacity) {
279 Error(
"TString::Init",
"capacity is smaller than nchar (%d > %d)", nchar, capacity);
283 Fatal(
"TString::Init",
"capacity too large (%d, max = %d)", capacity,
MaxSize());
285 if (nchar > capacity)
290 if (capacity < kMinCap) {
295 data =
new char[cap+1];
381 fRep.fRaw = rhs.fRep.fRaw;
406 if (!rep)
return *
this;
409 Error(
"TString::Append",
"Negative length!");
416 Fatal(
"TString::Append",
"rep too large (%d, max = %d)", rep,
MaxSize()-len);
424 if (capac - tot >= 0) {
429 data =
new char[cap+1];
430 memcpy(data, p, len);
468 const char *cs1 =
Data();
472 for (; cs2[i]; ++i) {
473 if (i == len)
return -1;
474 if (cs1[i] != cs2[i])
return ((cs1[i] > cs2[i]) ? 1 : -1);
477 for (; cs2[i]; ++i) {
478 if (i == len)
return -1;
479 char c1 = tolower((
unsigned char)cs1[i]);
480 char c2 = tolower((
unsigned char)cs2[i]);
481 if (
c1 !=
c2)
return ((
c1 >
c2) ? 1 : -1);
484 return (i < len) ? 1 : 0;
497 const char *s2 = str.Data();
499 Ssiz_t slen, sleno = str.Length();
501 if (len < slen) slen = len;
503 int result = memcmp(
s1, s2, slen);
504 if (result != 0)
return result;
507 for (; i < slen; ++i) {
508 char c1 = tolower((
unsigned char)
s1[i]);
509 char c2 = tolower((
unsigned char)s2[i]);
510 if (
c1 !=
c2)
return ((
c1 >
c2) ? 1 : -1);
515 if (len == slen)
return 0;
516 return (len > slen) ? 1 : -1;
526 const char *data =
Data();
528 if (data[
n] ==
c) count++;
547 const char *
f = strchr(
Data(),
c);
556 const char *
f = strpbrk(
Data(), cs);
565 return (((
x & 0x000000ffU) << 24) | ((
x & 0x0000ff00U) << 8) |
566 ((
x & 0x00ff0000U) >> 8) | ((
x & 0xff000000U) >> 24));
585 UInt_t len = str ? strlen(str) : 0;
603 if ((i = len*
sizeof(
char)%
sizeof(
UInt_t)) != 0) {
605 const char*
c = (
const char*)p;
613 const unsigned char *p = (
const unsigned char*)str;
626 if ((i = len*
sizeof(
char)%
sizeof(
UInt_t)) != 0) {
628 const char*
c = (
const char*)p;
658 const char*
c = (
const char*)p;
673 const unsigned char *p = (
const unsigned char*)
Data();
675 Mash(hv, toupper(*p));
709#if defined(_MSC_VER) && (_MSC_VER < 1800)
711 typedef unsigned char uint8_t;
712 typedef unsigned long uint32_t;
713 typedef unsigned __int64 uint64_t;
723#define ROTL64(x,y) _rotl64(x,y)
724#define BIG_CONSTANT(x) (x)
729 return (
x <<
r) | (
x >> (64 -
r));
732#define ROTL64(x,y) rotl64(x,y)
733#define BIG_CONSTANT(x) (x##LLU)
767 static void MurmurHash3_x64_128(
const void * key,
const int len,
768 const uint32_t seed, uint64_t out[2] )
770 const uint8_t * data = (
const uint8_t*)key;
771 const int nblocks = len / 16;
782 const uint64_t * blocks = (
const uint64_t *)(data);
784 for(
int i = 0; i < nblocks; i++)
786 uint64_t k1 = getblock(blocks,i*2+0);
787 uint64_t k2 = getblock(blocks,i*2+1);
793 k2 *=
c2; k2 =
ROTL64(k2,33); k2 *=
c1; h2 ^= k2;
795 h2 =
ROTL64(h2,31); h2 +=
h1; h2 = h2*5+0x38495ab5;
801 const uint8_t * tail = (
const uint8_t*)(data + nblocks*16);
807 case 15: k2 ^= uint64_t(tail[14]) << 48;
808 case 14: k2 ^= uint64_t(tail[13]) << 40;
809 case 13: k2 ^= uint64_t(tail[12]) << 32;
810 case 12: k2 ^= uint64_t(tail[11]) << 24;
811 case 11: k2 ^= uint64_t(tail[10]) << 16;
812 case 10: k2 ^= uint64_t(tail[ 9]) << 8;
813 case 9: k2 ^= uint64_t(tail[ 8]) << 0;
814 k2 *=
c2; k2 =
ROTL64(k2,33); k2 *=
c1; h2 ^= k2;
816 case 8: k1 ^= uint64_t(tail[ 7]) << 56;
817 case 7: k1 ^= uint64_t(tail[ 6]) << 48;
818 case 6: k1 ^= uint64_t(tail[ 5]) << 40;
819 case 5: k1 ^= uint64_t(tail[ 4]) << 32;
820 case 4: k1 ^= uint64_t(tail[ 3]) << 24;
821 case 3: k1 ^= uint64_t(tail[ 2]) << 16;
822 case 2: k1 ^= uint64_t(tail[ 1]) << 8;
823 case 1: k1 ^= uint64_t(tail[ 0]) << 0;
830 h1 ^= len; h2 ^= len;
841 ((uint64_t*)out)[0] =
h1;
842 ((uint64_t*)out)[1] = h2;
859 if (ntxt !=
sizeof(
void*)) {
860 uint64_t buf[2] = {0};
861 MurmurHash3_x64_128(txt, ntxt, 0x6384BA69, buf);
867 if (((
size_t)txt) %
sizeof(
void*)) {
870 if (
sizeof(
void*) >
sizeof(
UInt_t)) {
874 const unsigned char* ctxt = (
const unsigned char*) txt;
875 for (
unsigned int i = 0; i < 4; ++i) {
876 ret ^= ctxt[i] << (i * 8);
878 if (
sizeof(
void*) >
sizeof(
UInt_t)) {
880 for (
unsigned int i = 0; i < 4; ++i) {
881 ret ^= ctxt[i] << (i * 8);
896 if (tolower((
unsigned char)*p) != tolower((
unsigned char)*
q))
912 Error(
"TString::Index",
"Negative first pattern length!");
916 if (slen < startIndex + plen)
return kNPOS;
917 if (plen == 0)
return startIndex;
918 slen -= startIndex + plen;
919 const char *sp =
Data() + startIndex;
921 char first = *pattern;
922 for (
Ssiz_t i = 0; i <= slen; ++i)
923 if (sp[i] == first && memcmp(sp+i+1, pattern+1, plen-1) == 0)
924 return i + startIndex;
926 int first = tolower((
unsigned char) *pattern);
927 for (
Ssiz_t i = 0; i <= slen; ++i)
928 if (tolower((
unsigned char) sp[i]) == first &&
930 return i + startIndex;
940 const char *
f = strrchr(
Data(), (
unsigned char)
c);
961 const char *specials =
"^$.[]*+?";
973 const char *specials =
"[]*?";
993 Fatal(
"TString::Prepend",
"rep too large (%d, max = %d)", rep,
MaxSize()-len);
1001 if (capac - tot >= 0) {
1002 memmove(p + rep, p, len);
1007 data =
new char[cap+1];
1008 memcpy(data+rep, p, len);
1029 if (pos <= kNPOS || pos > len) {
1030 Error(
"TString::Replace",
1031 "first argument out of bounds: pos = %d, Length = %d", pos, len);
1035 Error(
"TString::Replace",
"Negative number of characters to remove!");
1039 Error(
"TString::Replace",
"Negative number of replacement characters!");
1043 n1 = std::min(n1, len - pos);
1048 Error(
"TString::Replace",
"Too large number of characters!");
1051 Ssiz_t rem = len - n1 - pos;
1060 if (n2) memmove(p + pos, cs, n2);
1061 memmove(p + pos + n2, p + pos + n1, rem);
1066 if (p + pos < cs && cs < p + len) {
1067 if (p + pos + n1 <= cs)
1070 memmove(p + pos, cs, n1);
1077 memmove(p + pos + n2, p + pos + n1, rem);
1080 if (n2) memmove(p + pos, cs, n2);
1085 char *data =
new char[cap+1];
1086 if (pos) memcpy(data, p, pos);
1087 if (n2 ) memcpy(data + pos, cs, n2);
1088 if (rem) memcpy(data + pos + n2, p + pos + n1, rem);
1105 if (
s1 && ls1 > 0) {
1135 const char *direct =
Data();
1142 while (
start < end && direct[end-1] ==
c)
1174 const char *direct =
Data();
1180 while (
start < end && direct[end-1] ==
c)
1194 *p = tolower((
unsigned char)*p);
1207 *p = toupper((
unsigned char)*p);
1218 Error(
"TString::AssertElement",
1219 "out of bounds: i = %d, Length = %d", i,
Length());
1231 Fatal(
"TString::AdjustCapacity",
"capacity too large (%d, max = %d)",
1234 Ssiz_t cap = oldCap <= ms / 2 ?
Recommend(std::max(newCap, 2 * oldCap)) : ms;
1255 Fatal(
"TString::Clobber",
"capacity too large (%d, max = %d)", nc,
MaxSize());
1269 data =
new char[cap+1];
1288 if (len >= tot)
return;
1291 Fatal(
"TString::Clone",
"tot too large (%d, max = %d)", tot,
MaxSize());
1298 if (capac - tot < 0) {
1300 data =
new char[cap+1];
1301 memcpy(data, p, len);
1324 tobuf(buffer, nchars);
1330 for (
int i = 0; i < nchars; i++) buffer[i] = data[i];
1352 Error(
"TString::ReadBuffer",
"found case with nwh=%d and nchars=%d", nwh, nchars);
1356 char *data =
Init(nchars, nchars);
1358 for (
int i = 0; i < nchars; i++)
frombuf(buffer, &data[i]);
1379 TClass *clRef =
b.ReadClass(clReq, &tag);
1390 ::Error(
"TString::ReadObject",
"could not create object of class %s",
1398 b.CheckByteCount(startpos, tag, clRef);
1420 if (
b.IsReading()) {
1421 b.ReadTString(*
this);
1423 b.WriteTString(*
this);
1457 b.SetByteCount(cntpos);
1464#if defined(R__TEMPLATE_OVERLOAD_BUG)
1492 const char *data =
s1.Data();
1495 for (i = 0; s2[i]; ++i)
1496 if (data[i] != s2[i] || i == len)
return kFALSE;
1507 const char *uc = str.Data();
1508 char *lc = (
char*)temp.
Data();
1510 while (
n--) { *lc++ = tolower((
unsigned char)*uc); uc++; }
1521 const char* uc = str.Data();
1522 char* lc = (
char*)temp.
Data();
1524 while (
n--) { *lc++ = toupper((
unsigned char)*uc); uc++; }
1576 ::Obsolete(
"TString::GetInitialCapacity",
"v5-30-00",
"v5-32-00");
1584 ::Obsolete(
"TString::GetResizeIncrement",
"v5-30-00",
"v5-32-00");
1592 ::Obsolete(
"TString::GetMaxWaste",
"v5-30-00",
"v5-32-00");
1601 ::Obsolete(
"TString::InitialCapacity",
"v5-30-00",
"v5-32-00");
1610 ::Obsolete(
"TString::ResizeIncrement",
"v5-30-00",
"v5-32-00");
1620 ::Obsolete(
"TString::MaxWaste",
"v5-30-00",
"v5-32-00");
1666 Ssiz_t len = pattern ? strlen(pattern) : 0;
1715 if (ss.
IsNull())
return *cs ==
'\0';
1719 for (i = 0; cs[i]; ++i)
1739 if (
s1.IsNull())
return s2.
IsNull();
1753 while (
n--) { *p = tolower((
unsigned char)*p); p++;}
1765 while (
n--) { *p = toupper((
unsigned char)*p); p++;}
1774 Error(
"TSubString::SubStringError",
1775 "out of bounds: start = %d, n = %d, sr = %d",
start,
n, sr);
1784 Error(
"TSubString::AssertElement",
1785 "out of bounds: i = %d, Length = %d", i,
Length());
1793 const char *cp =
Data();
1806 const char *cp =
Data();
1808 if (len == 0)
return kFALSE;
1809 for (
Ssiz_t i = 0; i < len; ++i)
1810 if (!isalpha(cp[i]))
1821 const char *cp =
Data();
1823 if (len == 0)
return kFALSE;
1824 for (
Ssiz_t i = 0; i < len; ++i)
1825 if (!isalnum(cp[i]))
1838 const char *cp =
Data();
1840 if (len == 0)
return kFALSE;
1842 for (
Ssiz_t i = 0; i < len; ++i) {
1843 if (cp[i] !=
' ' && !isdigit(cp[i]))
return kFALSE;
1844 if (cp[i] ==
' ')
b++;
1845 if (isdigit(cp[i]))
d++;
1876 pos = tmp.
First(
',');
1878 pos = tmp.
Index(
"e-");
1879 if (pos >= 1) tmp.
Replace(pos, 2,
" ", 1);
1880 pos = tmp.
Index(
"e+");
1881 if (pos >= 1) tmp.
Replace(pos, 2,
" ", 1);
1882 pos = tmp.
Index(
"e");
1883 if (pos >= 1) tmp.
Replace(pos, 1,
" ", 1);
1884 pos = tmp.
First(
'-');
1885 if (pos == 0) tmp.
Replace(pos, 1,
" ", 1);
1886 pos = tmp.
First(
'+');
1887 if (pos == 0) tmp.
Replace(pos, 1,
" ", 1);
1900 const char *cp =
Data();
1902 if (len == 0)
return kFALSE;
1903 for (
Ssiz_t i = 0; i < len; ++i)
1904 if (!isxdigit(cp[i]))
1916 const char *cp =
Data();
1918 if (len == 0)
return kFALSE;
1919 for (
Ssiz_t i = 0; i < len; ++i)
1920 if (cp[i] !=
'0' && cp[i] !=
'1')
1932 const char *cp =
Data();
1934 if (len == 0)
return kFALSE;
1935 for (
Ssiz_t i = 0; i < len; ++i)
1936 if (!isdigit(cp[i]) || cp[i]==
'8' || cp[i]==
'9')
1948 const char *cp =
Data();
1950 if (len == 0)
return kFALSE;
1951 for (
Ssiz_t i = 0; i < len; ++i)
1952 if (!isdigit(cp[i]))
1965 if (base < 2 || base > 36) {
1966 Error(
"TString::IsInBaseN",
"base %d is not supported. Supported bases are {2,3,...,36}.", base);
1970 Error(
"TString::IsInBaseN",
"input string is empty.") ;
1975 TString str_ref0 =
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
1979 for (
Int_t k = 0; k < str.Length(); k++) {
1999 if (end == -1)
return atoi(
Data());
2011 return atoi(tmp.
Data());
2026 if (end == -1)
return atoll(
Data());
2028 if (end == -1)
return _atoi64(
Data());
2042 return atoll(tmp.
Data());
2044 return _atoi64(tmp.
Data());
2066 if (comma == -1 && end == -1)
return atof(
Data());
2073 if (end == -1)
return atof(tmp.
Data());
2083 return atof(tmp2.
Data());
2102 if (base < 2 || base > 36) {
2103 Error(
"TString::Itoa",
"base %d is not supported. Supported bases are {2,3,...,36}.",base) ;
2107 Int_t quotient = value;
2110 buf +=
"0123456789abcdefghijklmnopqrstuvwxyz"[ std::abs(quotient % base) ];
2114 if (value < 0) buf +=
'-';
2115 std::reverse(buf.begin(), buf.end());
2129 if (base < 2 || base > 36) {
2130 Error(
"TString::UItoa",
"base %d is not supported. Supported bases are {2,3,...,36}.",base);
2137 buf +=
"0123456789abcdefghijklmnopqrstuvwxyz"[ quotient % base ];
2140 std::reverse(buf.begin(), buf.end());
2154 if (base < 2 || base > 36) {
2155 Error(
"TString::LLtoa",
"base %d is not supported. Supported bases are {2,3,...,36}.",base);
2162 buf +=
"0123456789abcdefghijklmnopqrstuvwxyz"[ std::abs(quotient % base) ];
2166 if (value < 0) buf +=
'-';
2167 std::reverse(buf.begin(), buf.end());
2181 if (base < 2 || base > 36) {
2182 Error(
"TString::ULLtoa",
"base %d is not supported. Supported bases are {2,3,...,36}.",base);
2189 buf +=
"0123456789abcdefghijklmnopqrstuvwxyz"[ quotient % base ];
2192 std::reverse(buf.begin(), buf.end());
2204 if (base_in < 2 || base_in > 36 || base_out < 2 || base_out > 36) {
2205 Error(
"TString::BaseConvert",
"only bases 2-36 are supported (base_in=%d, base_out=%d).", base_in, base_out);
2211 if (s_in_[0] ==
'-') {
2215 if (!isSigned && s_in_[0] ==
'+') s_in_.
Remove(0, 1);
2218 if (!s_in_.
Length()) s_in_ +=
'0';
2221 Error(
"TString::BaseConvert",
"s_in=\"%s\" is not in base %d", s_in.
Data(), base_in);
2228 Error(
"TString::BaseConvert",
"s_in=\"%s\" > %s = 2^64-1 in base %d.", s_in.
Data(), s_max.
Data(), base_in);
2233 if (s_in_ > s_max) {
2235 Error(
"TString::BaseConvert",
"s_in=\"%s\" > %s = 2^64-1 in base %d.", s_in.
Data(), s_max.
Data(), base_in);
2243 if (isSigned) s_out.
Prepend(
"-");
2252 if (!s)
return kTRUE;
2259 return strcmp(s, s2) == 0;
2260 return strcasecmp(s, s2) == 0;
2272 std::list<Int_t> splitIndex;
2275 for (i = 0; i < delim.
Length(); i++) {
2279 if (pos ==
kNPOS)
break;
2280 splitIndex.push_back(pos);
2283 if (
start > 0) nrDiff++;
2285 splitIndex.push_back(
Length());
2294 std::list<Int_t>::const_iterator it;
2296 for (it = splitIndex.begin(); it != splitIndex.end(); ++it) {
2298 for (it = splitIndex.begin(); it != (std::list<Int_t>::const_iterator) splitIndex.end(); ++it) {
2301 if (stop - 1 >=
start + 1) {
2322 int n = vsnprintf(
nullptr, 0, fmt, ap_len);
2335 if (needed <= 0 || needed <=
n) {
2342 vsnprintf(
GetPointer(), needed, fmt, ap_out);
2366 va_start(ap,
va_(fmt));
2388 va_start(ap,
va_(fmt));
2390 str.FormImp(
va_(fmt), ap);
2403 static const int fld_size = 2048;
2404 TTHREAD_TLS(
char*) slowBuffer(
nullptr);
2405 TTHREAD_TLS(
int) slowBufferSize(0);
2407 if (hint == -1) hint = fld_size;
2408 if (hint > slowBufferSize) {
2409 delete [] slowBuffer;
2410 slowBufferSize = 2 * hint;
2411 if (hint < 0 || slowBufferSize < 0) {
2413 slowBuffer =
nullptr;
2416 slowBuffer =
new char[slowBufferSize];
2422 int n = vsnprintf(slowBuffer, slowBufferSize, format, ap);
2425 if (
n == -1 ||
n >= slowBufferSize) {
2426 if (
n == -1)
n = 2 * slowBufferSize;
2427 if (
n == slowBufferSize)
n++;
2449static char *
Format(
const char *format, va_list ap)
2451 static const int cb_size = 4096;
2452 static const int fld_size = 2048;
2455 TTHREAD_TLS_ARRAY(
char,cb_size,gFormbuf);
2456 TTHREAD_TLS(
char*) gBfree(
nullptr);
2457 TTHREAD_TLS(
char*) gEndbuf(
nullptr);
2459 if (gBfree ==
nullptr) {
2461 gEndbuf = &gFormbuf[cb_size-1];
2465 if (buf+fld_size > gEndbuf)
2471 int n = vsnprintf(buf, fld_size, format, ap);
2474 if (
n == -1 ||
n >= fld_size) {
2499 va_start(ap,
va_(fmt));
2513 va_start(ap,
va_(fmt));
2530 if (!s)
return nullptr;
2533 char *buf =
new char[
l+1];
2546 const char *t2 = s +
l - 1;
2547 while (*t2 ==
c && t2 > s)
2555 *(buf+(t2-
t1+1)) =
'\0';
2566 if (!str)
return nullptr;
2568 auto len = strlen(str)+1;
2569 char *s =
new char[len];
2570 if (s) strlcpy(s, str, len);
2581 if (!str)
return nullptr;
2583 const char *p = str;
2584 char *s, *
s1 =
new char[strlen(str)+1];
2600int EscChar(
const char *src,
char *dst,
int dstlen,
char *specchars,
2604 char *
q, *end = dst+dstlen-1;
2606 for (p = src,
q = dst; *p &&
q < end; ) {
2607 if (strchr(specchars, *p)) {
2624int UnEscChar(
const char *src,
char *dst,
int dstlen,
char *specchars,
char)
2627 char *
q, *end = dst+dstlen-1;
2629 for (p = src,
q = dst; *p &&
q < end; ) {
2630 if (strchr(specchars, *p))
2642#ifdef NEED_STRCASECMP
2646int strcasecmp(
const char *str1,
const char *str2)
2648 return strncasecmp(str1, str2, str2 ? strlen(str2)+1 : 0);
2654int strncasecmp(
const char *str1,
const char *str2,
Ssiz_t n)
2680std::string cling::printValue(
const TString* val) {
2688std::string cling::printValue(
const TSubString* val) {
2696std::string cling::printValue(
const std::string_view* val) {
2697 std::string str(*val);
void frombuf(char *&buf, Bool_t *x)
void tobuf(char *&buf, Bool_t x)
int Int_t
Signed integer 4 bytes (int).
unsigned char UChar_t
Unsigned Character 1 byte (unsigned char).
int Ssiz_t
String size (currently int).
unsigned long ULongptr_t
Unsigned integer large enough to hold a pointer (platform-dependent).
constexpr ULong_t kBitsPerByte
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
bool Bool_t
Boolean (0=false, 1=true) (bool).
double Double_t
Double 8 bytes.
constexpr Ssiz_t kNPOS
The equivalent of std::string::npos for the ROOT class TString.
long long Long64_t
Portable signed long integer 8 bytes.
unsigned long long ULong64_t
Portable unsigned long integer 8 bytes.
Error("WriteTObject","The current directory (%s) is not associated with a file. The object (%s) has not been written.", GetName(), objname)
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
void ErrorHandler(int level, const char *location, const char *fmt, std::va_list va)
General error handler function. It calls the user set error handler.
externBool_t gPrintViaErrorHandler
If true, ROOT's Printf will print via the currently active ROOT error handler; if false (default),...
void Obsolete(const char *function, const char *asOfVers, const char *removedFromVers)
Use this function to declare a function obsolete.
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
void Fatal(const char *location, const char *msgfmt,...)
Use this function in case of a fatal error. It will abort the program.
TBuffer & operator<<(TBuffer &buf, const TString *s)
Write TString or derived to TBuffer.
uint64_t rotl64(uint64_t x, int8_t r)
TString ToLower(const TString &str)
Return a lower-case version of str.
TString operator+(const TString &s, const char *cs)
Use the special concatenation constructor.
static int MemIsEqual(const char *p, const char *q, Ssiz_t n)
Returns false if strings are not equal.
TBuffer & operator>>(TBuffer &buf, TString *&s)
Read string from TBuffer. Function declared in ClassDef.
Bool_t operator==(const TString &s1, const char *s2)
Compare TString with a char *.
UInt_t Hash(const char *str)
Return a case-sensitive hash value (endian independent).
static char * SlowFormat(const char *format, va_list ap, int hint)
Format a string in a formatting buffer (using a printf style format descriptor).
TString ToUpper(const TString &str)
Return an upper-case version of str.
static UInt_t SwapInt(UInt_t x)
static void Mash(UInt_t &hash, UInt_t chars)
Utility used by Hash().
char * Compress(const char *str)
Remove all blanks from the string str.
int UnEscChar(const char *src, char *dst, int dstlen, char *specchars, char escchar)
Un-escape specchars in src from escchar and copy to dst.
void Printf(const char *fmt,...)
Formats a string in a circular formatting buffer and prints the string.
char * StrDup(const char *str)
Duplicate the string str.
int EscChar(const char *src, char *dst, int dstlen, char *specchars, char escchar)
Escape specchars in src with escchar and copy to dst.
#define R__VA_COPY(to, from)
Buffer base class used for serializing objects.
TClass instances represent classes, structs and namespaces in the ROOT type system.
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
This code implements the MD5 message-digest algorithm.
const char * AsString() const
Return message digest as string.
void Update(const UChar_t *buf, UInt_t len)
Update TMD5 object to reflect the concatenation of another buffer full of bytes.
void Final()
MD5 finalization, ends an MD5 message-digest operation, writing the the message digest and zeroizing ...
const char * GetName() const override
Returns name of object.
void Add(TObject *obj) override
Collectable string class.
TString Copy() const
Copy a string.
static TString UItoa(UInt_t value, Int_t base)
Converts a UInt_t (twice the range of an Int_t) to a TString with respect to the base specified (2-36...
static TString LLtoa(Long64_t value, Int_t base)
Converts a Long64_t to a TString with respect to the base specified (2-36).
void SetShortSize(Ssiz_t s)
char & operator()(Ssiz_t i)
Bool_t IsDec() const
Returns true if all characters in string are decimal digits (0-9).
void ToLower()
Change string to lower-case.
TString(const char *a1, Ssiz_t n1, const char *a2, Ssiz_t n2)
Special constructor to initialize with the concatenation of a1 and a2.
int CompareTo(const char *cs, ECaseCompare cmp=kExact) const
Compare a string to char *cs2.
static Ssiz_t MaxWaste(Ssiz_t mw=15)
Set maximum space that may be wasted in a string before doing a resize.
Int_t Atoi() const
Return integer value of string.
void SetLongSize(Ssiz_t s)
static constexpr Ssiz_t kNPOS
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
TString()
TString default ctor.
Bool_t IsHex() const
Returns true if all characters in string are hexadecimal digits (0-9,a-f,A-F).
Double_t Atof() const
Return floating-point value contained in string.
TString & ReplaceSpecialCppChars()
Find special characters which are typically used in printf() calls and replace them by appropriate es...
Bool_t IsFloat() const
Returns kTRUE if string contains a floating point or integer number.
void Clear()
Clear string without changing its capacity.
TSubString SubString(const char *pat, Ssiz_t start=0, ECaseCompare cmp=kExact) const
Returns a substring matching "pattern", or the null substring if there is no such match.
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
Ssiz_t First(char c) const
Find first occurrence of a character c.
const char * Data() const
static TString * ReadString(TBuffer &b, const TClass *clReq)
Read TString object from buffer.
Bool_t IsDigit() const
Returns true if all characters in string are digits (0-9) or white spaces, i.e.
Bool_t MaybeRegexp() const
Returns true if string contains one of the regexp characters "^$.[]*+?".
static Ssiz_t ResizeIncrement(Ssiz_t ri=16)
Set default resize increment for all TStrings. Default is 16.
UInt_t HashCase() const
Return a case-sensitive hash value (endian independent).
Bool_t IsOct() const
Returns true if all characters in string are octal digits (0-7).
virtual ~TString()
Delete a TString.
static Ssiz_t GetMaxWaste()
TString & ReplaceAll(const TString &s1, const TString &s2)
static Ssiz_t AdjustCapacity(Ssiz_t oldCap, Ssiz_t newCap)
Calculate a nice capacity greater than or equal to newCap.
TString MD5() const
Return the MD5 digest for this string, in a string representation.
void Resize(Ssiz_t n)
Resize the string. Truncate or add blanks as necessary.
Bool_t IsAlpha() const
Returns true if all characters in string are alphabetic.
UInt_t HashFoldCase() const
Return a case-insensitive hash value (endian independent).
Ssiz_t Last(char c) const
Find last occurrence of a character c.
void ToUpper()
Change string to upper case.
Bool_t IsAscii() const
Returns true if all characters in string are ascii.
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
static Ssiz_t GetResizeIncrement()
void SetLongCap(Ssiz_t s)
TString & Prepend(const char *cs)
Bool_t IsBin() const
Returns true if all characters in string are binary digits (0,1).
static TString BaseConvert(const TString &s_in, Int_t base_in, Int_t base_out)
Converts string from base base_in to base base_out.
static TString ULLtoa(ULong64_t value, Int_t base)
Converts a ULong64_t (twice the range of an Long64_t) to a TString with respect to the base specified...
Int_t CountChar(Int_t c) const
Return number of times character c occurs in the string.
static constexpr Ssiz_t MaxSize()
UInt_t Hash(ECaseCompare cmp=kExact) const
Return hash value.
static void WriteString(TBuffer &b, const TString *a)
Write TString object to buffer.
virtual void FillBuffer(char *&buffer) const
Copy string into I/O buffer.
TString & operator=(char s)
Assign character c to TString.
TString & Remove(Ssiz_t pos)
static Ssiz_t InitialCapacity(Ssiz_t ic=15)
Set default initial capacity for all TStrings. Default is 15.
virtual void Streamer(TBuffer &)
Stream a string object.
TString & Append(const char *cs)
Bool_t IsInBaseN(Int_t base) const
Returns true if all characters in string are expressed in the base specified (range=2-36),...
char * Init(Ssiz_t capacity, Ssiz_t nchar)
Private member function returning an empty string representation of size capacity and containing ncha...
Bool_t MaybeWildcard() const
Returns true if string contains one of the wildcard characters "[]*?".
void InitChar(char c)
Initialize a string with a single character.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
static TString Itoa(Int_t value, Int_t base)
Converts an Int_t to a TString with respect to the base specified (2-36).
virtual Int_t Sizeof() const
Returns size string will occupy on I/O buffer.
Ssiz_t Clobber(Ssiz_t nc)
Clear string and make sure it has a capacity of nc.
void Clone(Ssiz_t nc)
Make self a distinct copy with capacity of at least tot, where tot cannot be smaller than the current...
void SetLongPointer(char *p)
Ssiz_t GetLongSize() const
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
static Ssiz_t GetInitialCapacity()
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
void AssertElement(Ssiz_t nc) const
Check to make sure a string index is in range.
virtual void ReadBuffer(char *&buffer)
Read string from I/O buffer.
Bool_t IsAlnum() const
Returns true if all characters in string are alphanumeric.
void FormImp(const char *fmt, va_list ap)
Formats a string using a printf style format descriptor.
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
static Ssiz_t Recommend(Ssiz_t s)
Long64_t Atoll() const
Return long long value of string.
TSubString(const TString &s, Ssiz_t start, Ssiz_t len)
Private constructor.
TSubString & operator=(const char *s)
Assign char* to sub-string.
void ToUpper()
Convert sub-string to upper-case.
void SubStringError(Ssiz_t, Ssiz_t, Ssiz_t) const
Output error message.
char & operator[](Ssiz_t i)
Return character at pos i from sub-string. Check validity of i.
void AssertElement(Ssiz_t i) const
Check to make sure a sub-string index is in range.
void ToLower()
Convert sub-string to lower-case.
const char * Data() const
char & operator()(Ssiz_t i)
Return character at pos i from sub-string. No check on i.