10 #define _INC_cString_H
11 #ifndef NO_PRAGMA_ONCE
31 #define cStringT_DEF(_TYPE_CH) ATL::CStringT< _TYPE_CH, StrTraitMFC_DLL< _TYPE_CH > >
52 return (
void*)(
this + 1);
54 void*
operator new(
size_t stAllocateBlock,
StrLen_t iStringLengthBytes)
59 ASSERT(iStringLengthBytes >= 2);
64 void operator delete(
void* pObj,
StrLen_t iStringLengthBytes)
69 void operator delete(
void* pObj)
81 m_nCharCount = nCount;
88 template<
typename _TYPE_CH =
char >
116 AssignLen(pwText, iLenMax);
129 AssignLen(pszStr, iLenMax);
138 m_pchData = ref.m_pchData;
151 return (
reinterpret_cast<CStringData*
>(m_pchData)) - 1;
163 if (m_pchData == &m_Nil)
166 if (pData ==
nullptr)
173 return m_pchData[iLen] ==
'\0';
180 return m_pchData == &m_Nil;
186 if (m_pchData == &m_Nil)
195 if (m_pchData ==
nullptr)
204 ASSERT(nIndex <= GetLength());
205 return m_pchData[nIndex];
209 ASSERT(nIndex <= GetLength());
210 return m_pchData[nIndex];
216 m_pchData[nIndex] = ch;
220 _TYPE_CH* GetBuffer(
StrLen_t iMinLength);
237 void AssignLenT(
const _TYPE_CH* pszStr,
StrLen_t iLenMax);
241 const THIS_t& operator = (
const char* pStr)
249 const THIS_t& operator = (
const wchar_t* pStr)
255 void FormatV(
const _TYPE_CH* pszStr, va_list args);
256 void _cdecl
Format(
const _TYPE_CH* pszStr, ...)
261 va_start(vargs, pszStr);
262 FormatV(pszStr, vargs);
276 THIS_t Right(
StrLen_t nCount)
const;
285 return GetAt(nIndex);
289 return ReferenceAt(nIndex);
291 operator const _TYPE_CH* ()
const
310 Insert(GetLength(), ch);
321 const THIS_t& operator += (
const _TYPE_CH* psz)
328 THIS_t
operator + (
const _TYPE_CH* pszStr)
const
349 m_pchData =
const_cast<_TYPE_CH*
>(&m_Nil);
355 GetData()->DecRefCount();
361 m_pchData = s.m_pchData;
362 if (m_pchData == &m_Nil)
364 GetData()->IncRefCount();
368 void AllocBuffer(
StrLen_t iStrLength);
369 void CopyBeforeWrite();
372 #define cStringT_DEF(t) CStringT<t>
378 template<
typename _TYPE_CH =
char >
411 #if defined(_MFC_VER)
415 return(((
CStringData*)(
const _TYPE_CH*)SUPER_t::GetString()) - 1);
421 return SUPER_t::GetString();
426 #if defined(_MFC_VER)
429 if (SUPER_t::m_pchData == &SUPER_t::m_Nil)
435 return StrT::IsPrintable(SUPER_t::m_pchData, iLen) && (SUPER_t::m_pchData[iLen] ==
'\0');
443 return IsPrintableString();
445 return SUPER_t::isValidString();
450 return isValidString();
465 return (
HASHCODE_t)(UINT_PTR)(
void*)get_CPtr() ;
470 if (SUPER_t::IsEmpty())
472 #if defined(_MFC_VER)
476 return this->GetData()->GetHeapStatsThis(iAllocCount);
481 #if defined(_MFC_VER)
482 return this->GetData()->nRefs;
484 return this->GetData()->get_RefCount();
490 #if defined(_MFC_VER)
491 this->GetData()->nRefs++;
493 this->GetData()->IncRefCount();
501 void Assign(
const SUPER_t & str)
504 *
static_cast<SUPER_t*
>(
this) = str;
508 THIS_t GetTrimWhitespace()
const;
520 const THIS_t& operator = (
const char* pszStr)
522 SUPER_t::operator=(pszStr);
525 const THIS_t& operator = (
const wchar_t* pwStr)
527 SUPER_t::operator=(pwStr);
556 return StrT::EndsWithI<_TYPE_CH>(get_CPtr(), pSubStr, this->GetLength());
561 static const int npos = -1;
565 return SUPER_t::GetString();
570 return SUPER_t::GetLength();
575 return SUPER_t::GetLength();
579 return SUPER_t::IsEmpty();
584 return SUPER_t::Find(ch, 0);
588 *
this =
THIS_t(pszStr, iLenCat);
593 *
this +=
THIS_t(pszStr, iLenCat);
595 this->Insert(this->GetLength(), pszStr, iLenCat);
600 this->Insert(this->GetLength(), ch);
606 SUPER_t::AllocBuffer(iSize);
617 if (nFirst >= this->GetLength())
619 return THIS_t(this->GetString() + nFirst, nCount);
622 static THIS_t _cdecl GetFormatf(
const _TYPE_CH * pszFormat, ...);
625 static THIS_t
GRAYCALL GetErrorStringV(
HRESULT nFormatID,
void* pSource, va_list vargs);
626 static THIS_t
GRAYCALL GetErrorString(
HRESULT nFormatID,
void* pSource =
nullptr);
627 static THIS_t _cdecl GetErrorStringf(
HRESULT nFormatID,
void* pSource, ...);
629 static THIS_t
GRAYCALL GetSizeK(UINT64 uVal, UINT nKUnit = 1024,
bool bSpace =
false);
638 #if ! defined(_MFC_VER) && ! defined(__CLR_VER)
655 #if defined(_MFC_VER)
677 template<
typename _TYPE_CH >
679 template<
typename _TYPE_CH >
#define GRAYCORE_LINK
Definition: GrayCore.h:47
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define THROW_DEF
Definition: HResult.h:25
#define IS_INDEX_GOOD(i, q)
cast the (likely) int to unsigned to check for negatives.
Definition: Index.h:35
#define UNREFERENCED_PARAMETER(P)
< _WIN32 type thing. get rid of stupid warning.
Definition: SysTypes.h:299
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
#define DEBUG_CHECK(exp)
Definition: cDebugAssert.h:90
#define CHEAPOBJECT_IMPL
Definition: cHeapObject.h:32
#define cStringT_DEF(t)
Definition: cString.h:372
#define UNITTEST_FRIEND(n)
Define this in the class body to be unit tested. Allow the unit test to access private/protected stuf...
Definition: cUnitTestDecl.h:17
void * GetString() const
Definition: cString.h:49
void put_CharCount(StrLen_t nCount) noexcept
Definition: cString.h:78
StrLen_t get_CharCount() const noexcept
Definition: cString.h:73
void _cdecl Format(const _TYPE_CH *pszStr,...)
Definition: cString.h:256
CStringT(const char *pszStr)
Definition: cString.h:118
CStringT(const char *pszStr, StrLen_t iLenMax)
Definition: cString.h:124
CStringT(const wchar_t *pwText, StrLen_t iLenMax)
Definition: cString.h:111
CStringData * GetData() const noexcept
Definition: cString.h:146
~CStringT()
Definition: cString.h:141
void Assign(const THIS_t &str)
Definition: cString.h:336
CStringT() noexcept
Definition: cString.h:101
friend bool operator!=(const THIS_t &str1, const _TYPE_CH *str2)((void) 0)
Definition: cString.h:300
const _TYPE_CH * GetString() const noexcept
Definition: cString.h:153
void Assign(const wchar_t *pwText)
void AssignLen(const wchar_t *pwText, StrLen_t iSizeMax=StrT::k_LEN_MAX)
const _TYPE_CH & ReferenceAt(StrLen_t nIndex) const
Definition: cString.h:202
const _TYPE_CH & operator[](StrLen_t nIndex)
Definition: cString.h:287
_TYPE_CH operator[](StrLen_t nIndex) const
Definition: cString.h:283
static const _TYPE_CH m_Nil
Definition: cString.h:98
void Empty()
Definition: cString.h:193
void EmptyValid()
Definition: cString.h:351
CStringT(THIS_t &&ref) noexcept
Definition: cString.h:135
StrLen_t GetLength() const noexcept
Definition: cString.h:183
bool IsEmpty() const noexcept
Definition: cString.h:176
_TYPE_CH * m_pchData
Definition: cString.h:97
CStringT(const wchar_t *pwText)
Definition: cString.h:105
COMPARE_t CompareNoCase(const _TYPE_CH *pszStr) const
Definition: cString.h:269
void AssignFirst(const THIS_t &s) noexcept
Definition: cString.h:359
CStringT(const THIS_t &ref) noexcept
Definition: cString.h:131
void Init() noexcept
Definition: cString.h:347
friend bool operator==(const THIS_t &str1, const _TYPE_CH *str2)((void) 0)
Definition: cString.h:296
void Assign(const char *pszStr)
void AssignLen(const char *pszStr, StrLen_t iSizeMax=StrT::k_LEN_MAX)
_TYPE_CH GetAt(StrLen_t nIndex) const
Definition: cString.h:207
void SetAt(StrLen_t nIndex, _TYPE_CH ch)
Definition: cString.h:212
bool isValidString() const noexcept
Definition: cString.h:160
StrLen_t Insert(StrLen_t nIndex, const _TYPE_CH *pszStr)
Definition: cString.h:317
COMPARE_t Compare(const _TYPE_CH *pszStr) const
Definition: cString.h:265
Definition: cArchive.h:20
Definition: cHeapObject.h:38
bool IsValidInsideN(INT_PTR index) const
Definition: cHeapObject.h:63
int get_RefCount() const noexcept
Definition: cRefPtr.h:89
Definition: cRefPtr.h:225
Definition: cStream.h:126
Definition: cString.h:381
void SetErase()
Definition: cString.h:531
void reserve(StrLen_t iSize)
Definition: cString.h:609
StrLen_t size() const
Definition: cString.h:567
StrLen_t GetCodePage(OUT wchar_t *pwText, StrLen_t iLenMax, CODEPAGE_t uCodePage=CP_UTF8) const
bool EndsWithI(const _TYPE_CH *pSubStr) const
Definition: cString.h:553
bool ContainsI(const _TYPE_CH *pSubStr)
Definition: cString.h:543
StrLen_t length() const
Definition: cString.h:572
bool isValidString() const noexcept
Definition: cString.h:438
cStringT(const wchar_t *pwText)
Definition: cString.h:403
void push_back(_TYPE_CH ch)
Definition: cString.h:598
HRESULT SerializeOutput(cStreamOutput &File) const
Definition: cString.cpp:619
_TYPE_CH CharType_t
ALA std::string::value_type.
Definition: cString.h:390
int get_RefCount() const
Definition: cString.h:479
StrLen_t find(_TYPE_CH ch) const
Definition: cString.h:581
bool isValidCheck() const noexcept
Definition: cString.h:448
size_t GetHeapStats(OUT ITERATE_t &iAllocCount) const
Definition: cString.h:467
cStringT(const char *pszText)
Definition: cString.h:396
cStringT(SUPER_t &str) noexcept
Definition: cString.h:394
const _TYPE_CH * get_CPtr() const noexcept
Definition: cString.h:419
cStringT(const wchar_t *pwText, StrLen_t iLenMax)
Definition: cString.h:405
bool isPrintableString() const
Definition: cString.h:424
StrLen_t SetCodePage(const wchar_t *pwText, CODEPAGE_t uCodePage=CP_UTF8)
bool StartsWithI(const _TYPE_CH *pSubStr)
Definition: cString.h:548
HASHCODE_t get_HashCode() const noexcept
Definition: cString.h:461
THIS_t substr(StrLen_t nFirst, StrLen_t nCount=StrT::k_LEN_MAX) const
Definition: cString.h:614
void resize(StrLen_t iSize)
Definition: cString.h:604
void append(const _TYPE_CH *pszStr, StrLen_t iLenCat)
Definition: cString.h:590
bool empty() const
Definition: cString.h:577
const _TYPE_CH * c_str() const
Definition: cString.h:563
void SetStringStatic()
Definition: cString.h:487
bool Contains(const _TYPE_CH *pSubStr)
Definition: cString.h:538
HRESULT Serialize(cArchive &a)
Definition: cString.cpp:637
bool IsWhitespace() const
Definition: cString.h:452
cStringT(const char *pszText, StrLen_t iLenMax)
Definition: cString.h:398
cStringT() noexcept
Definition: cString.h:392
void assign(const _TYPE_CH *pszStr, StrLen_t iLenCat)
Definition: cString.h:586
< The main namespace for all Core functions.
Definition: GrayCore.cpp:14
int COMPARE_t
result of compare. 0=same, 1=a>b, -1=a<b
Definition: cValT.h:17
const StrLen_t k_StrLen_UNK
use the default/current length of the string argument.
Definition: StrConst.h:34
int StrLen_t
the length of a string in chars (bytes for UTF8, wchar_t for UNICODE). or offset in characters....
Definition: StrConst.h:32
void operator>>(cArchive &ar, cStringT< _TYPE_CH > &pOb)
Definition: cString.h:678
int ITERATE_t
like size_t but signed
Definition: Index.h:28
cStringT< wchar_t > cStringW
Definition: cString.h:634
cStringT< char > cStringA
Definition: cString.h:635
UINT_PTR HASHCODE_t
could hold a pointer converted to a number? maybe 64 or 32 bit ? same as size_t.
Definition: GrayCore.h:116
CODEPAGE_t
Definition: StrChar.h:33
@ CP_UTF8
UTF-8 translation.
Definition: StrChar.h:36
cRefPtr< CStringData > CStringDataPtr
Pointer to hold a ref to the string data so i can thread lock it.
Definition: cString.h:86
cString CString
Definition: cString.h:639
cStringA operator+(const char *pStr1, const cStringA &s2)
Definition: cString.h:642
void operator<<(cArchive &ar, const cStringT< _TYPE_CH > &pOb)
Definition: cString.h:680
@ COMPARE_Equal
VARCMP_EQ.
Definition: cValT.h:23
cStringT< GChar_t > cString
Definition: cString.h:636
static const StrLen_t k_LEN_MAX
arbitrary max size for Format() etc. NOTE: _MSC_VER says stack frame should be at least 16384
Definition: StrT.h:75
static __DECL_IMPORT bool __stdcall IsPrintable(const TYPE *pStr, StrLen_t iLenChars=StrT::k_LEN_MAX)
static __DECL_IMPORT bool __stdcall StartsWithI(const TYPE *pszStr2, const TYPE *pszPrefix)
static __DECL_IMPORT COMPARE_t __stdcall Cmp(const TYPE *pszStr1, const TYPE *pszStr2)
static __DECL_IMPORT bool __stdcall IsWhitespace(const TYPE *pStr, StrLen_t iLenChars=StrT::k_LEN_MAX)
static __DECL_IMPORT TYPE *__stdcall FindStr(const TYPE *pszStr, const TYPE *pszFind, StrLen_t iLenMax=StrT::k_LEN_MAX)
static __DECL_IMPORT TYPE *__stdcall FindStrI(const TYPE *pszStr, const TYPE *pszFind, StrLen_t iLenMax=StrT::k_LEN_MAX)
static __DECL_IMPORT COMPARE_t __stdcall CmpI(const TYPE *pszStr1, const TYPE *pszStr2)
static void *__stdcall AllocPtr(size_t nSize)
Definition: cHeap.cpp:125
static void __stdcall FreePtr(void *pData)
Definition: cHeap.cpp:103
static size_t __stdcall GetSize(const void *pData) noexcept
Definition: cHeap.cpp:226