1
0
mirror of https://github.com/alliedmodders/hl2sdk.git synced 2026-10-10 11:53:05 +08:00

Update KeyValues

This commit is contained in:
Nicholas Hastings
2026-05-23 13:15:43 -04:00
parent 781db6525f
commit cc2a96a6f9
3 changed files with 42 additions and 5 deletions
+2
View File
@@ -93,6 +93,8 @@ class SDKConfig(object):
'-Wno-tautological-overlap-compare', '-Wno-tautological-overlap-compare',
'-Wno-tautological-constant-out-of-range-compare', '-Wno-tautological-constant-out-of-range-compare',
'-Wno-undefined-bool-conversion', '-Wno-undefined-bool-conversion',
'-Wno-nontrivial-memcall',
'-Wno-sync-alignment',
'-msse', '-msse',
'-fPIC' '-fPIC'
] ]
+6 -1
View File
@@ -109,11 +109,14 @@ public:
KeyValues( const char *setName, const char *firstKey, int firstValue ); KeyValues( const char *setName, const char *firstKey, int firstValue );
KeyValues( const char *setName, const char *firstKey, const char *firstValue, const char *secondKey, const char *secondValue ); KeyValues( const char *setName, const char *firstKey, const char *firstValue, const char *secondKey, const char *secondValue );
KeyValues( const char *setName, const char *firstKey, int firstValue, const char *secondKey, int secondValue ); KeyValues( const char *setName, const char *firstKey, int firstValue, const char *secondKey, int secondValue );
KeyValues( const char *setName, bool bUsesLocalStorage );
// Section name // Section name
const char *GetName() const; const char *GetName() const;
void SetName( const char *setName); void SetName( const char *setName);
bool IsUsingLocalStorage() const { return m_bIsUsingLocalStringTable != 0; }
// gets the name as a unique int // gets the name as a unique int
int GetNameSymbol() const { return m_iKeyName; } int GetNameSymbol() const { return m_iKeyName; }
@@ -330,12 +333,14 @@ private:
char m_iDataType; char m_iDataType;
char m_bHasEscapeSequences; // true, if while parsing this KeyValue, Escape Sequences are used (default false) char m_bHasEscapeSequences; // true, if while parsing this KeyValue, Escape Sequences are used (default false)
char m_bEvaluateConditionals; // true, if while parsing this KeyValue, conditionals blocks are evaluated (default true) char m_bEvaluateConditionals; // true, if while parsing this KeyValue, conditionals blocks are evaluated (default true)
char unused[1]; char m_bIsUsingLocalStringTable; // true if this node uses a per-instance growable string table
KeyValues *m_pPeer; // pointer to next key in list KeyValues *m_pPeer; // pointer to next key in list
KeyValues *m_pSub; // pointer to Start of a new sub key list KeyValues *m_pSub; // pointer to Start of a new sub key list
KeyValues *m_pChain;// Search here if it's not in our list KeyValues *m_pChain;// Search here if it's not in our list
CKeyValuesGrowableStringTable *m_pLocalStringTable;
private: private:
// Statics to implement the optional growable string table // Statics to implement the optional growable string table
// Function pointers that will determine which mode we are in // Function pointers that will determine which mode we are in
+34 -4
View File
@@ -229,7 +229,7 @@ static CLeakTrack track;
class CKeyValuesGrowableStringTable class CKeyValuesGrowableStringTable
{ {
public: public:
// Constructor // Constructor for global singleton string table
CKeyValuesGrowableStringTable() : CKeyValuesGrowableStringTable() :
m_hashLookup( 2048, 0, 0, m_Functor, m_Functor ), m_hashLookup( 2048, 0, 0, m_Functor, m_Functor ),
#ifdef PLATFORM_64BITS #ifdef PLATFORM_64BITS
@@ -241,6 +241,14 @@ public:
m_vecStrings.AddToTail( '\0' ); m_vecStrings.AddToTail( '\0' );
} }
// Constructor for per-instance string table
CKeyValuesGrowableStringTable( int nInitialStringCapacity ) :
m_hashLookup( 16, 0, 0, m_Functor, m_Functor ),
m_vecStrings( 0, nInitialStringCapacity )
{
m_vecStrings.AddToTail( '\0' );
}
// Translates a string to an index // Translates a string to an index
int GetSymbolForString( const char *name, bool bCreate = true ) int GetSymbolForString( const char *name, bool bCreate = true )
{ {
@@ -381,6 +389,22 @@ KeyValues::KeyValues( const char *setName )
SetName ( setName ); SetName ( setName );
} }
//-----------------------------------------------------------------------------
// Purpose: Constructor with optional per-instance string table
//-----------------------------------------------------------------------------
KeyValues::KeyValues( const char *setName, bool bUsesLocalStorage )
{
TRACK_KV_ADD( this, setName );
Init();
if ( bUsesLocalStorage )
{
m_pLocalStringTable = new CKeyValuesGrowableStringTable( 256 );
m_bIsUsingLocalStringTable = true;
}
SetName( setName );
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Purpose: Constructor // Purpose: Constructor
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -461,9 +485,8 @@ void KeyValues::Init()
m_bHasEscapeSequences = false; m_bHasEscapeSequences = false;
m_bEvaluateConditionals = true; m_bEvaluateConditionals = true;
m_bIsUsingLocalStringTable = false;
// for future proof m_pLocalStringTable = NULL;
memset( unused, 0, sizeof(unused) );
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -501,6 +524,8 @@ void KeyValues::RemoveEverything()
m_sValue = NULL; m_sValue = NULL;
delete [] m_wsValue; delete [] m_wsValue;
m_wsValue = NULL; m_wsValue = NULL;
delete m_pLocalStringTable;
m_pLocalStringTable = NULL;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -528,6 +553,11 @@ void KeyValues::ChainKeyValue( KeyValues* pChain )
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
const char *KeyValues::GetName( void ) const const char *KeyValues::GetName( void ) const
{ {
if ( m_bIsUsingLocalStringTable )
{
Assert( m_pLocalStringTable );
return m_pLocalStringTable->GetStringForSymbol( m_iKeyName );
}
return s_pfGetStringForSymbol( m_iKeyName ); return s_pfGetStringForSymbol( m_iKeyName );
} }