24 #if defined(_DEBUG) && defined(_MSC_VER)
45 else if (!Buf2.
isRef())
46 Take(std::move(Buf2));
62 Take(std::move(Buf2));
86 const void *pData =
nullptr;
104 const void *
getPtr(
size_t i)
const {
return reinterpret_cast<const char*
>(
getData()) + i; }
109 assert(iStart + inSize <=
iSize);
118 void Ref(
const void *pnData,
size_t inSize)
121 fRef =
true; pData = pnData;
iSize = inSize;
124 void Take(
void *pnData,
size_t inSize)
129 fRef =
false; pMData = pnData;
iSize = inSize;
135 if (
isNull())
return nullptr;
139 pData = pMData;
fRef =
true;
149 pMData = malloc(
iSize = inSize);
153 void Write(
const void *pnData,
size_t inSize,
size_t iAt = 0)
155 assert(iAt + inSize <=
iSize);
156 if (pnData && inSize) std::memcpy(
getMPtr(iAt), pnData, inSize);
159 void Move(
size_t iFrom,
size_t inSize,
size_t iTo = 0)
161 assert(iFrom + inSize <=
iSize); assert(iTo + inSize <=
iSize);
165 int Compare(
const void *pCData,
size_t iCSize,
size_t iAt = 0)
const
167 assert(iAt + iCSize <=
getSize());
168 return std::memcmp(
getPtr(iAt), pCData, iCSize);
177 pMData = realloc(pMData,
iSize += iGrow);
182 assert(
iSize >= iShrink);
185 if (!iShrink)
return;
187 pMData = realloc(pMData,
iSize -= iShrink);
192 if (!
fRef) free(pMData);
193 pMData =
nullptr;
fRef =
true;
iSize = 0;
227 if (
isNull() && !inSize)
return;
228 const void *pOldData =
getData();
229 size_t iOldSize =
iSize;
231 Write(pOldData, std::min(iOldSize, inSize));
238 void Copy(
const void *pnData,
size_t inSize)
254 void Append(
const void *pnData,
size_t inSize)
282 Take(Buf2.GrabPointer(), Buf2.getSize());
317 if (Buf2.isRef())
Ref(Buf2);
else Take(std::move(Buf2));
325 return crc32(0,
reinterpret_cast<const Bytef *
>(
getData()),
getSize());
335 template <
class elem_t>
339 const void *pPos =
reinterpret_cast<const char *
>(Buf.
getData()) + iPos;
340 return reinterpret_cast<const elem_t *
>(pPos);
342 template <
class elem_t>
346 void *pPos =
reinterpret_cast<char *
>(Buf.
getMData()) + iPos;
347 return reinterpret_cast<elem_t *
>(pPos);
412 explicit StdStrBuf(
const char *pData,
bool fCopy =
false)
413 :
StdBuf(pData, pData ? strlen(pData) + 1 : 0, fCopy)
417 explicit StdStrBuf(
const wchar_t * utf16);
418 struct wchar_t_holder {
420 wchar_t_holder(
wchar_t * p): p(p) { }
421 wchar_t_holder(
const wchar_t_holder &);
422 ~wchar_t_holder() {
delete[] p; }
423 operator wchar_t * () {
return p; }
431 :
StdBuf(pData, pData ? iLength + 1 : 0, false)
433 StdStrBuf(
const char *pData,
size_t iLength,
bool fCopy =
false)
434 :
StdBuf(pData, pData ? iLength + 1 : 0, fCopy)
442 const char *
getData()
const {
return getBufPtr<char>(*
this); }
443 char *
getMData() {
return getMBufPtr<char>(*
this); }
448 const char *
getPtr(
size_t i)
const {
return getBufPtr<char>(*
this, i); }
449 char *
getMPtr(
size_t i) {
return getMBufPtr<char>(*
this, i); }
455 void Ref(
const char *pnData) {
StdBuf::Ref(pnData, pnData ? std::strlen(pnData) + 1 : 0); }
456 void Ref(
const char *pnData,
size_t iLength) { assert((!pnData && !iLength) || std::strlen(pnData) == iLength);
StdBuf::Ref(pnData, iLength + 1); }
458 void Take(
char *pnData,
size_t iLength) { assert((!pnData && !iLength) || std::strlen(pnData) == iLength);
StdBuf::Take(pnData, iLength + 1); }
468 void Copy(
const char *pnData) {
StdBuf::Copy(pnData, pnData ? std::strlen(pnData) + 1 : 0); }
471 void Move(
size_t iFrom,
size_t inSize,
size_t iTo = 0) {
StdBuf::Move(iFrom, inSize, iTo); }
478 if (result)
return result;
484 int Compare_(
const char *pCData,
size_t iAt = 0)
const
492 return strncmp((
const char
493 *)pData, beginning, strlen(beginning)) == 0;
519 void Append(
const char *pnData,
size_t iChars)
526 Append(pnData, std::strlen(pnData));
534 void Copy(
const char *pnData,
size_t iChars)
568 operator const void *()
const {
return getData(); }
598 for (
size_t i =
getLength()-1; i > insert_before; --i)
600 *
getMPtr(insert_before) = cChar;
606 const char *pPos = std::strchr(szString, cUntil);
608 Append(szString, pPos - szString);
622 const char *pPos = std::strchr(
getData(), cSplit);
623 if (!pPos)
return false;
624 size_t iPos = pPos -
getData();
631 void FormatV(const
char *szFmt, va_list args);
637 assert(iStart + inSize <=
iSize);
645 int Replace(
const char *szOld,
const char *szNew,
size_t iStartSearch=0);
649 void ReplaceEnd(
size_t iPos,
const char *szNewEnd);
661 bool ValidateChars(
const char *szInitialChars,
const char *szMidChars);
722 operator std::string()
const
734 std::string WStrToString(
wchar_t *
s);
StdStrBuf::wchar_t_holder GetWideChar(const char *utf8, bool double_null_terminate=false)
StdBuf GetWideCharBuf(const char *utf8)
const elem_t * getBufPtr(const StdBuf &Buf, size_t iPos=0)
StdStrBuf FormatString(const char *szFmt,...) GNUC_FORMAT_ATTRIBUTE
elem_t * getMBufPtr(StdBuf &Buf, size_t iPos=0)
StdStrBuf FormatStringV(const char *szFmt, va_list args)
void Copy(const StdBuf &Buf2)
bool operator==(const StdBuf &Buf2) const
int Compare(const StdBuf &Buf2, size_t iAt=0) const
void Write(const StdBuf &Buf2, size_t iAt=0)
StdBuf(const void *pData, size_t iSize, bool fCopy=false)
void SetSize(size_t inSize)
void Ref(const StdBuf &Buf2)
StdBuf operator+(const StdBuf &Buf2) const
StdBuf(StdBuf &Buf2, bool fCopy=false)
void CompileFunc(class StdCompiler *pComp, int iType=0)
void Copy(const void *pnData, size_t inSize)
const void * getPtr(size_t i) const
void Take(void *pnData, size_t inSize)
bool SaveToFile(const char *szFile) const
void Ref(const void *pnData, size_t inSize)
void Shrink(size_t iShrink)
void Write(const void *pnData, size_t inSize, size_t iAt=0)
StdBuf(StdBuf &&Buf2) noexcept
const void * getData() const
StdBuf(const StdBuf &Buf2, bool fCopy=true)
StdBuf & operator=(StdBuf &&Buf2)
bool operator!=(const StdBuf &Buf2) const
int Compare(const void *pCData, size_t iCSize, size_t iAt=0) const
bool LoadFromFile(const char *szFile)
void Append(const StdBuf &Buf2)
void Move(size_t iFrom, size_t inSize, size_t iTo=0)
static void DeletePointer(void *data)
void Append(const void *pnData, size_t inSize)
StdBuf getPart(size_t iStart, size_t inSize) const
StdBuf operator+=(const StdBuf &Buf2)
StdCopyBuf(StdCopyBuf &&Buf2) noexcept
StdCopyBuf(const StdBuf &Buf2, bool fCopy=true)
StdCopyBuf(const StdCopyBuf &Buf2, bool fCopy=true)
StdCopyBuf(const void *pData, size_t iSize, bool fCopy=true)
StdCopyBuf & operator=(const StdBuf &Buf2)
StdCopyBuf(StdBuf &Buf2) noexcept
StdCopyStrBuf(StdStrBuf &&Buf2) noexcept
StdCopyStrBuf(const StdCopyStrBuf &Buf2, bool fCopy=true)
StdCopyStrBuf(const StdStrBuf &Buf2, bool fCopy=true)
StdCopyStrBuf(const char *pData, bool fCopy=true)
StdCopyStrBuf(const std::string &s) noexcept
StdCopyStrBuf(StdCopyStrBuf &&Buf2) noexcept
StdCopyStrBuf & operator=(const StdStrBuf &Buf2)
void Ref(const StdStrBuf &Buf2)
void Move(size_t iFrom, size_t inSize, size_t iTo=0)
void AppendFormatV(const char *szFmt, va_list args)
void AppendCharacter(uint32_t unicodechar)
bool operator<(const StdStrBuf &v2) const
bool BeginsWith(const char *beginning) const
void Copy(const char *pnData, size_t iChars)
void Ref(const char *pnData, size_t iLength)
void AppendChars(char cChar, size_t iCnt)
int Compare_(const char *pCData, size_t iAt=0) const
void SetLength(size_t iLength)
void CompileFunc(class StdCompiler *pComp, int iRawType=0)
StdStrBuf operator+(const StdStrBuf &Buf2) const
char operator[](size_t i) const
void AppendFormat(const char *szFmt,...) GNUC_FORMAT_ATTRIBUTE_O
void Take(char *pnData, size_t iLength)
void CopyUntil(const char *szString, char cUntil)
void FormatV(const char *szFmt, va_list args)
StdStrBuf(const char *pData, size_t iLength, bool fCopy=false)
int Replace(const char *szOld, const char *szNew, size_t iStartSearch=0)
void Ref(const char *pnData)
StdStrBuf(const StdStrBuf &Buf2, bool fCopy=true)
void ReplaceEnd(size_t iPos, const char *szNewEnd)
void Take(StdStrBuf &&Buf2)
void Shrink(size_t iShrink)
const char * getData() const
StdStrBuf(const char *pData, long int iLength)
bool operator==(const StdStrBuf &Buf2) const
StdStrBuf copyPart(size_t iStart, size_t inSize) const
void AppendUntil(const char *szString, char cUntil)
StdStrBuf(StdStrBuf &&Buf2) noexcept
bool SplitAtChar(char cSplit, StdStrBuf *psSplit)
void Copy(const StdStrBuf &Buf2)
void AppendChar(char cChar)
bool operator!=(const StdStrBuf &Buf2) const
StdStrBuf(const char *pData, bool fCopy=false)
bool ValidateChars(const char *szInitialChars, const char *szMidChars)
void Take(StdStrBuf &Buf2)
bool LoadFromFile(const char *szFile)
void Append(const char *pnData, size_t iChars)
void Copy(const char *pnData)
int ReplaceChar(char cOld, char cNew)
StdStrBuf & operator+=(const StdStrBuf &Buf2)
StdStrBuf & operator=(const StdStrBuf &Buf2)
bool SaveToFile(const char *szFile) const
void InsertChar(char cChar, size_t insert_before)
const char * getPtr(size_t i) const
int Compare(const StdStrBuf &Buf2, size_t iAt=0) const
void Append(const StdStrBuf &Buf2)
StdStrBuf(StdStrBuf &Buf2, bool fCopy=false)
StdStrBuf Duplicate() const
void Append(const char *pnData)
bool GetSection(size_t idx, StdStrBuf *psOutSection, char cSeparator=';') const
void Format(const char *szFmt,...) GNUC_FORMAT_ATTRIBUTE_O