ReGameDLL_CS/regamedll/public/utlsymbol.cpp
s1lentq 3d252fe527 Refactoring and cleanup.
Fixed some critical bugs and typos (carrer_task, tutor, zbot and other)
Added command line option `-bots` to run bots in CS 1.6
Removed the tests demo record/player from myself the project and also dependency of the steam library.
Fixed the progress bar when generating a nav file.
2016-02-23 05:23:45 +06:00

119 lines
2.5 KiB
C++

#include "precompiled.h"
/*
* Globals initialization
*/
#ifndef HOOK_GAMEDLL
LessCtx_t g_LessCtx;
#endif
CUtlSymbolTable *CUtlSymbol::s_pSymbolTable = 0;
void CUtlSymbol::Initialize()
{
// necessary to allow us to create global symbols
static bool symbolsInitialized = false;
if (!symbolsInitialized)
{
s_pSymbolTable = new CUtlSymbolTable;
symbolsInitialized = true;
}
}
CUtlSymbolTable *CUtlSymbol::CurrTable()
{
Initialize();
return s_pSymbolTable;
}
CUtlSymbol::CUtlSymbol(const char *pStr)
{
m_Id = CurrTable()->AddString(pStr);
}
const char *CUtlSymbol::String() const
{
return CurrTable()->String(m_Id);
}
bool CUtlSymbol::operator==(const char *pStr) const
{
if (m_Id == UTL_INVAL_SYMBOL)
return false;
return Q_strcmp(String(), pStr) == 0;
}
bool CUtlSymbolTable::SymLess(const unsigned int &i1, const unsigned int &i2)
{
const char *str1 = g_LessCtx.m_pTable->String(i1);
const char *str2 = g_LessCtx.m_pTable->String(i2);
return Q_strcmp(str1, str2) < 0;
}
bool CUtlSymbolTable::SymLessi(const unsigned int &i1, const unsigned int &i2)
{
const char *str1 = g_LessCtx.m_pTable->String(i1);
const char *str2 = g_LessCtx.m_pTable->String(i2);
return Q_stricmp(str1, str2) < 0;
}
CUtlSymbolTable::CUtlSymbolTable(int growSize, int initSize, bool caseInsensitive) :
m_Lookup(growSize, initSize, caseInsensitive ? SymLessi : SymLess),
m_Strings(256)
{
;
}
CUtlSymbolTable::~CUtlSymbolTable()
{
// Release the stringpool string data
RemoveAll();
}
CUtlSymbol CUtlSymbolTable::Find(const char *pString) const
{
// Passing this special invalid symbol makes the comparison function
// use the string passed in the context
UtlSymId_t idx = m_Lookup.Find(UTL_INVAL_SYMBOL);
return CUtlSymbol(idx);
}
// Finds and/or creates a symbol based on the string
CUtlSymbol CUtlSymbolTable::AddString(const char *pString)
{
if (!pString)
return CUtlSymbol(UTL_INVAL_SYMBOL);
CUtlSymbol id = Find(pString);
if (id.IsValid())
return id;
int len = Q_strlen(pString) + 1;
int stridx = m_Strings.AddMultipleToTail(len);
UtlSymId_t idx = m_Lookup.Insert(stridx);
return CUtlSymbol(idx);
}
const char *CUtlSymbolTable::String(CUtlSymbol id) const
{
if (!id.IsValid())
return "";
assert(m_Lookup.IsValidIndex((UtlSymId_t)id));
return &m_Strings[id];
}
void CUtlSymbolTable::RemoveAll()
{
m_Lookup.RemoveAll();
m_Strings.RemoveAll();
}