mirror of
https://github.com/0TheSpy/Seaside.git
synced 2025-01-07 10:03:29 +08:00
105 lines
2.0 KiB
C++
105 lines
2.0 KiB
C++
#ifndef GAMESTRINGPOOL_H
|
|
#define GAMESTRINGPOOL_H
|
|
|
|
#if defined( _WIN32 )
|
|
#pragma once
|
|
#endif
|
|
|
|
#if !defined( GC )
|
|
class IGameSystem;
|
|
#endif
|
|
|
|
string_t AllocPooledString(const char* pszValue);
|
|
#define AllocPooledStringConstant( pszValue ) AllocPooledString( pszValue )
|
|
string_t FindPooledString(const char* pszValue);
|
|
void RemovePooledString(const char* pszValue);
|
|
|
|
#define AssertIsValidString( s ) AssertMsg( s == NULL_STRING || s == FindPooledString( STRING(s) ), "Invalid string " #s );
|
|
|
|
#if !defined( GC )
|
|
IGameSystem* GameStringSystem();
|
|
#endif
|
|
|
|
class CGameString
|
|
{
|
|
public:
|
|
CGameString() :
|
|
m_iszString(NULL_STRING), m_pszString(NULL), m_iSerial(0)
|
|
{
|
|
|
|
}
|
|
|
|
CGameString(const char* pszString, bool bCopy = false) :
|
|
m_iszString(NULL_STRING), m_pszString(NULL), m_iSerial(0)
|
|
{
|
|
Set(pszString, bCopy);
|
|
}
|
|
|
|
~CGameString()
|
|
{
|
|
if (m_bCopy)
|
|
free((void*)m_pszString);
|
|
}
|
|
|
|
void Set(const char* pszString, bool bCopy = false)
|
|
{
|
|
if (m_bCopy && m_pszString)
|
|
free((void*)m_pszString);
|
|
m_iszString = NULL_STRING;
|
|
m_pszString = (!bCopy) ? pszString : strdup(pszString);
|
|
}
|
|
|
|
void SetFastNoCopy(string_t iszString)
|
|
{
|
|
m_iszString = iszString;
|
|
m_iSerial = gm_iSerialNumber;
|
|
}
|
|
|
|
bool IsSerialNumberOutOfDate(void) const
|
|
{
|
|
return m_iSerial != gm_iSerialNumber;
|
|
}
|
|
|
|
string_t Get() const
|
|
{
|
|
if (m_iszString == NULL_STRING || IsSerialNumberOutOfDate())
|
|
{
|
|
if (!m_pszString)
|
|
return NULL_STRING;
|
|
|
|
m_iszString = AllocPooledString(m_pszString);
|
|
m_iSerial = gm_iSerialNumber;
|
|
}
|
|
|
|
return m_iszString;
|
|
}
|
|
|
|
operator const char* () const
|
|
{
|
|
return (m_pszString) ? m_pszString : "";
|
|
}
|
|
|
|
#ifndef NO_STRING_T
|
|
operator string_t() const
|
|
{
|
|
return Get();
|
|
}
|
|
#endif
|
|
|
|
static void IncrementSerialNumber()
|
|
{
|
|
gm_iSerialNumber++;
|
|
}
|
|
|
|
private:
|
|
mutable string_t m_iszString;
|
|
const char* m_pszString;
|
|
mutable int m_iSerial;
|
|
bool m_bCopy;
|
|
|
|
|
|
static int gm_iSerialNumber;
|
|
|
|
};
|
|
|
|
#endif |