26 return c>=
'A' && c<=
'Z' ? c|0x20 : c;
32 va_start( ap, format );
33 const size_t minlen=256;
35 if (l<minlen) {
resize(minlen+1); l=minlen; }
36 int n=vsnprintf(
rawData(), l+1, format, ap);
37 if (n<0) n=
static_cast<int>(l);
45 if (index<0 || index>=
static_cast<int>(
length()))
return -1;
46 const char *pos =
nullptr;
49 pos = strchr(
data()+index,c);
56 if (!*pos && c) pos=
nullptr;
58 return pos ?
static_cast<int>(pos -
data()) : -1;
63 int l =
static_cast<int>(
length());
64 if (index<0 || index>=l)
return -1;
66 if (!*
str)
return index;
67 const char *pos =
nullptr;
81 if (!*pos) pos =
nullptr;
83 return pos ?
static_cast<int>(pos -
data()) : -1;
88 return find(
str.c_str(),index,cs);
93 return find(
str.data(),index,cs);
98 const char *b =
data();
99 const char *pos =
nullptr;
100 int len =
static_cast<int>(
length());
101 if (len==0)
return -1;
107 return pos ?
static_cast<int>(pos - b) : -1;
118 while ( pos>=b && *pos!=c) pos--;
125 return pos>=b ?
static_cast<int>(pos - b) : -1;
131 int len =
static_cast<int>(
length());
132 if (index<0) index = len-slen;
133 else if (index>len)
return -1;
134 else if (index+slen>len) index=len-slen;
135 if (index<0)
return -1;
136 const char *pos =
data()+index;
139 for (
int i=index; i>=0; i--)
if (
qstrncmp(pos--,
str,slen)==0)
return i;
143 for (
int i=index; i>=0; i--)
if (
qstrnicmp(pos,
str,slen)==0)
return i;
150 if (
length()==0)
return 0;
152 const char *pos =
data();
155 while (*pos)
if (*pos++ == c) count++;
171 if (
str==
nullptr ||
length()==0)
return 0;
173 const char *pos =
data();
196 const char *from =
data();
210 if ( to > first && *(to-1) == 0x20 )
213 result.
resize(
static_cast<int>(to - result.
data()) );
227 return c>=
'0' && c<=
'9' && (c-
'0') < base;
229 return (c>=
'0' && c<=
'9') ||
230 (c >=
'a' && c < char(
'a'+base-10)) ||
231 (c >=
'A' && c <
char(
'A'+base-10));
236 long v =
toLong( ok, base );
237 if ( ok && *ok && (v < -32768 || v > 32767) ) {
241 return static_cast<short>(v);
246 unsigned long v =
toULong( ok, base );
247 if ( ok && *ok && (v > 65535) ) {
251 return static_cast<uint16_t
>(v);
256 return static_cast<int>(
toLong( ok, base ));
261 return static_cast<uint32_t
>(
toULong( ok, base ));
267 const char *p =
data();
269 int l =
static_cast<int>(
length());
270 const long max_mult = INT_MAX / base;
277 if ( l && *p ==
'-' ) {
281 }
else if ( *p ==
'+' ) {
292 if ( *p>=
'0' && *p<=
'9' ) {
295 if ( *p >=
'a' && *p <=
'z' )
300 if ( val > max_mult || (val == max_mult && dv > (INT_MAX%base)+neg) )
314 return is_ok ? val : 0;
319 const char *p =
data();
321 int l =
static_cast<int>(
length());
322 const unsigned long max_mult = 429496729;
337 if ( *p>=
'0' && *p<=
'9' ) {
340 if ( *p >=
'a' && *p <=
'z' )
345 if ( val > max_mult || (val == max_mult && dv > (UINT_MAX%base)) )
358 return is_ok ? val : 0;
363 const char *p =
data();
365 int l =
static_cast<int>(
length());
366 const uint64_t max_mult = 1844674407370955161ULL;
381 if ( *p>=
'0' && *p<=
'9' ) {
384 if ( *p >=
'a' && *p <=
'z' )
389 if ( val > max_mult || (val == max_mult && dv > (ULLONG_MAX%base)) )
402 return is_ok ? val : 0;
407void *
qmemmove(
void *dst,
const void *src,
size_t len )
410 char *d =
static_cast<char *
>(dst) + len - 1;
411 const char *s =
static_cast<const char *
>(src) + len - 1;
415 else if ( dst < src ) {
416 char *d =
static_cast<char *
>(dst);
417 const char *s =
static_cast<const char *
>(src);
428 char *dst =
new char[
qstrlen(str)+1];
429 return strcpy( dst, str );
437char *
qstrncpy(
char *dst,
const char *src,
size_t len )
441 strncpy( dst, src, len );
451 return s1 == s2 ? 0 :
static_cast<int>(s2 - s1);
463int qstrnicmp(
const char *s1,
const char *s2,
size_t len )
467 return static_cast<int>(s2 - s1);
469 for ( ; len--; s1++, s2++ )
485 const char *q =
nullptr, *p =
nullptr;
486 size_t srcLen = src.
length();
487 size_t dstLen = dst.
length();
492 for (p = s.
data(); (q=strstr(p,src.
data()))!=
nullptr; p=q+srcLen) count++;
493 resLen = s.
length()+count*(dstLen-srcLen);
501 for (p = s.
data(); (q=strstr(p,src.
data()))!=
nullptr; p=q+srcLen)
503 int l =
static_cast<int>(q-p);
507 if (dstLen>0) memcpy(r,dst.
data(),dstLen);
526 const char *p =
nullptr, *q =
nullptr;
527 size_t srcLen = src.
length();
528 size_t dstLen = dst.
length();
533 for (p=s.
data(); (q=strstr(p,src.
data()))!=
nullptr; p=q+srcLen) count++;
534 resLen = s.
length()+count*(dstLen-srcLen);
542 for (p = s.
data(); (q=strstr(p,src.
data()))!=
nullptr; p=q+srcLen)
545 int seq = 0, skip = 0;
548 for (
const char *n=q+srcLen;
qstrncmp(n,src.
data(),srcLen)==0; seq=1+skip, n+=srcLen)
552 if (skip_seq > 0 && skip_seq != seq)
557 int l =
static_cast<int>((q + seq * srcLen)-p);
569 if (dstLen>0) memcpy(r,dst.
data(),dstLen);
581 const std::string &s =
m_rep;
582 int end=
static_cast<int>(s.length());
588 while ((c=s[p]) && (c==
' ' || c==
'\t')) p++;
600 if (p>=start && s.at(p)==
'\n') p--;
604 while ((c=s[p]) && (c==
' ' || c==
'\t')) p--;
616 return s.substr(start,
end-start);
This is an alternative implementation of QCString.
int find(char c, int index=0, bool cs=TRUE) const
int toInt(bool *ok=nullptr, int base=10) const
size_t length() const
Returns the length of the string, not counting the 0-terminator.
uint64_t toUInt64(bool *ok=nullptr, int base=10) const
unsigned long toULong(bool *ok=nullptr, int base=10) const
char * rawData()
Returns a writable pointer to the data.
bool isEmpty() const
Returns TRUE iff the string is empty.
QCString stripLeadingAndTrailingEmptyLines() const
QCString & remove(size_t index, size_t len)
void resize(size_t newlen)
const std::string & str() const
uint16_t toUShort(bool *ok=nullptr, int base=10) const
QCString simplifyWhiteSpace() const
return a copy of this string with leading and trailing whitespace removed and multiple whitespace cha...
QCString & sprintf(const char *format,...)
long toLong(bool *ok=nullptr, int base=10) const
uint32_t toUInt(bool *ok=nullptr, int base=10) const
int findRev(char c, int index=-1, bool cs=TRUE) const
QCString & replace(size_t index, size_t len, const char *s)
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
QCString & insert(size_t index, const QCString &s)
int contains(char c, bool cs=TRUE) const
short toShort(bool *ok=nullptr, int base=10) const
DirIterator end(const DirIterator &) noexcept
char * qstrdup(const char *str)
char * qstrncpy(char *dst, const char *src, size_t len)
static bool ok_in_base(char c, int base)
int qstricmp(const char *s1, const char *s2)
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
void qstrfree(const char *str)
Frees the memory allocated using qstrdup().
void * qmemmove(void *dst, const void *src, size_t len)
int qstrnicmp(const char *s1, const char *s2, size_t len)
int qstrncmp(const char *str1, const char *str2, size_t len)
int qstrnicmp(const char *str1, const char *str2, size_t len)
uint32_t qstrlen(const char *str)
Returns the length of string str, or 0 if a null pointer is passed.
char * qstrcpy(char *dst, const char *src)