#ifndef UTLSTRINGMAP_H #define UTLSTRINGMAP_H #ifdef _WIN32 #pragma once #endif #include "utlsymbol.h" template class CUtlStringMap { public: CUtlStringMap(bool caseInsensitive = true) : m_SymbolTable(0, 32, caseInsensitive) { } T& operator[](const char* pString) { CUtlSymbol symbol = m_SymbolTable.AddString(pString); int index = (int)(UtlSymId_t)symbol; if (m_Vector.Count() <= index) { m_Vector.EnsureCount(index + 1); } return m_Vector[index]; } T& operator[](UtlSymId_t n) { Assert(n >= 0 && n <= m_Vector.Count()); return m_Vector[n]; } const T& operator[](UtlSymId_t n) const { Assert(n >= 0 && n <= m_Vector.Count()); return m_Vector[n]; } bool Defined(const char* pString) const { return m_SymbolTable.Find(pString) != UTL_INVAL_SYMBOL; } UtlSymId_t Find(const char* pString) const { return m_SymbolTable.Find(pString); } static UtlSymId_t InvalidIndex() { return UTL_INVAL_SYMBOL; } int GetNumStrings(void) const { return m_SymbolTable.GetNumStrings(); } const char* String(int n) const { return m_SymbolTable.String(n); } void Clear() { m_Vector.RemoveAll(); m_SymbolTable.RemoveAll(); } void Purge() { m_Vector.Purge(); m_SymbolTable.RemoveAll(); } void PurgeAndDeleteElements() { m_Vector.PurgeAndDeleteElements(); m_SymbolTable.RemoveAll(); } private: CUtlVector m_Vector; CUtlSymbolTable m_SymbolTable; }; #endif