//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //===========================================================================// #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 ) { } // Get data by the string itself: 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]; } // Get data by the string's symbol table ID - only used to retrieve a pre-existing symbol, not create a new one! 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 ); } // Clear all of the data from the map 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 // UTLSTRINGMAP_H