//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: A registry of strings and associated ints // // $Workfile: $ // $Date: $ // //----------------------------------------------------------------------------- // $Log: $ // // $NoKeywords: $ //=============================================================================// #include #include #include "stringregistry.h" #include "utldict.h" // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" #if !defined(_STATIC_LINKED) || defined(CLIENT_DLL) //----------------------------------------------------------------------------- // Purpose: This class wraps the containers that do the actual work //----------------------------------------------------------------------------- struct StringTable_t : public CUtlDict { }; //----------------------------------------------------------------------------- // Purpose: Add null terminated string to the string registry // Input : // Output : //----------------------------------------------------------------------------- unsigned short CStringRegistry::AddString(const char *stringText, int stringID) { return m_pStringList->Insert( stringText, stringID ); } //----------------------------------------------------------------------------- // Purpose: Given string text get the string ID // Input : Text of string to find // Output : Return string id or -1 if no such string exists //----------------------------------------------------------------------------- int CStringRegistry::GetStringID( const char *stringText ) { unsigned short index = m_pStringList->Find( stringText ); if ( m_pStringList->IsValidIndex( index ) ) { return (*m_pStringList)[index]; } return -1; } //----------------------------------------------------------------------------- // Purpose: Given a string ID return the string text // Input : ID of string to find // Output : Return string text of NULL of no such ID exists //----------------------------------------------------------------------------- char const *CStringRegistry::GetStringText( int stringID ) { for( unsigned short index = m_pStringList->First() ; index != m_pStringList->InvalidIndex(); index = m_pStringList->Next( index ) ) { if ( (*m_pStringList)[index] == stringID ) { return m_pStringList->GetElementName( index ); } } return NULL; } //----------------------------------------------------------------------------- // Purpose: Given a key return the string text //----------------------------------------------------------------------------- char const *CStringRegistry::GetStringForKey( unsigned short key ) { if ( !m_pStringList->IsValidIndex( key ) ) return NULL; return m_pStringList->GetElementName( key ); } //----------------------------------------------------------------------------- // Purpose: Given a key return the string text //----------------------------------------------------------------------------- int CStringRegistry::GetIDForKey( unsigned short key ) { if ( !m_pStringList->IsValidIndex( key ) ) return 0; return (*m_pStringList)[key]; } //----------------------------------------------------------------------------- // Purpose: Clear all strings from the string registry //----------------------------------------------------------------------------- void CStringRegistry::ClearStrings(void) { m_pStringList->RemoveAll(); } //----------------------------------------------------------------------------- // Purpose: Destructor - delete the list of strings and maps // Input : // Output : //----------------------------------------------------------------------------- CStringRegistry::~CStringRegistry(void) { delete m_pStringList; } //----------------------------------------------------------------------------- // Purpose: Constructor // Input : // Output : //----------------------------------------------------------------------------- CStringRegistry::CStringRegistry(void) { m_pStringList = new StringTable_t; } unsigned short CStringRegistry::First() const { return m_pStringList->First(); } unsigned short CStringRegistry::Next( unsigned short key ) const { return m_pStringList->Next( key ); } unsigned short CStringRegistry::InvalidIndex() const { return m_pStringList->InvalidIndex(); } #endif // _STATIC_LINKED && CLIENT_DLL