2025-04-27 07:49:33 -04:00

187 lines
3.9 KiB
C++

// Copyright (c) 1999-2001 Microsoft Corporation, All Rights Reserved
extern char *__g_pszStringBlank;
class CString
{
private:
char *m_pszString;
void DeleteString() { if (m_pszString != __g_pszStringBlank) delete [] m_pszString; }
char *DuplicateString()
{
char *psz = new char[strlen(m_pszString) + 1];
if (psz == NULL)
return NULL;
strcpy(psz, m_pszString);
return psz;
}
public:
CString()
{
m_pszString = __g_pszStringBlank;
}
CString (const char *psz)
{
m_pszString = new char[strlen(psz) + 1];
if (m_pszString == 0)
{
m_pszString = __g_pszStringBlank;
}
else
{
strcpy(m_pszString, psz);
}
}
CString (CString &sz)
{
m_pszString = __g_pszStringBlank;
*this = sz.m_pszString;
}
~CString() { DeleteString(); }
size_t Length() const { return strlen(m_pszString); } //09/17//int Length() const { return strlen(m_pszString); }
CString& operator +=(const char *psz)
{
char *pszNewString = new char[Length() + strlen(psz) + 1];
if (pszNewString == NULL)
return *this;
strcpy(pszNewString, m_pszString);
strcat(pszNewString, psz);
DeleteString();
m_pszString = pszNewString;
return *this;
}
CString &operator = (const char *psz)
{
char *pszNewString = new char[strlen(psz) + 1];
if (pszNewString == 0)
return *this;
strcpy(pszNewString, psz);
DeleteString();
m_pszString = pszNewString;
return *this;
}
char *Unbind()
{
if (m_pszString != __g_pszStringBlank)
{
char *psz = m_pszString;
m_pszString = NULL;
return psz;
}
else
return DuplicateString();
}
char operator[](size_t nIndex) const //09/17//char operator[](int nIndex) const
{
if (nIndex > Length())
nIndex = Length();
return m_pszString[nIndex];
}
operator const char *() { return m_pszString; }
};
class CMultiString
{
private:
char *m_pszString;
void DeleteString() { if (m_pszString != __g_pszStringBlank) delete [] m_pszString; }
char *DuplicateString()
{
char *psz = new char[Length(m_pszString) + 1];
if (psz == NULL)
return NULL;
memcpy(psz, m_pszString, Length(m_pszString) + 1);
return psz;
}
size_t Length(const char *psz) const //09/17//int Length(const char *psz) const
{
size_t nLen = 0;
while (*psz != '\0')
{
nLen += strlen(psz) + 1;
psz += strlen(psz) + 1;
}
return nLen;
}
public:
CMultiString()
{
m_pszString = __g_pszStringBlank;
}
CMultiString (const char *psz)
{
m_pszString = new char[strlen(psz) + 1];
if (m_pszString == NULL)
{
m_pszString = __g_pszStringBlank;
}
else
{
strcpy(m_pszString, psz);
}
}
~CMultiString() { DeleteString(); }
size_t Length() const //09/17//int Length() const
{
return Length(m_pszString);
}
CMultiString& operator +=(const char *psz)
{
size_t nLength = Length() + strlen(psz) + 3;
char *pszNewString = new char[nLength];
if (pszNewString == NULL)
return *this;
memcpy(pszNewString, m_pszString, Length());
memcpy(pszNewString + Length(), psz, strlen(psz) + 1);
pszNewString[Length() + strlen(psz) + 1] = '\0';
DeleteString();
m_pszString = pszNewString;
return *this;
}
void AddUnique(const char *pszNew)
{
bool bFound = false;
const char *psz = m_pszString;
while (psz && *psz)
{
if (_stricmp(psz, pszNew) == 0)
{
bFound = true;
break;
}
psz += strlen(psz) + 1;
}
if (!bFound)
{
*this += pszNew;
}
}
char *Unbind()
{
if (m_pszString != __g_pszStringBlank)
{
char *psz = m_pszString;
m_pszString = NULL;
return psz;
}
else
return DuplicateString();
}
char operator[](size_t nIndex) const //09/17//char operator[](int nIndex) const
{
if (nIndex > Length())
nIndex = Length();
return m_pszString[nIndex];
}
operator const char *() { return m_pszString; }
};