From be93929b26b609ba578a2e8c9ee226efd3445d7d Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Sun, 2 Jul 2023 02:51:12 +0200 Subject: [PATCH] Map out CKeyValuesSystem class Mapped out members of the CKeyValuesSystem class. Singleton accessor has also been declared inline in this commit. --- r5dev/vstdlib/keyvaluessystem.cpp | 8 ----- r5dev/vstdlib/keyvaluessystem.h | 52 ++++++++++++++++++++++--------- 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/r5dev/vstdlib/keyvaluessystem.cpp b/r5dev/vstdlib/keyvaluessystem.cpp index 5ef73e4c..c27e0bf4 100644 --- a/r5dev/vstdlib/keyvaluessystem.cpp +++ b/r5dev/vstdlib/keyvaluessystem.cpp @@ -8,14 +8,6 @@ #include "core/stdafx.h" #include "vstdlib/keyvaluessystem.h" -//----------------------------------------------------------------------------- -// Instance singleton and expose interface to rest of code -//----------------------------------------------------------------------------- -CKeyValuesSystem* KeyValuesSystem() -{ - return &(*g_pKeyValuesSystem); -} - //----------------------------------------------------------------------------- // Purpose: registers the size of the KeyValues in the specified instance // so it can build a properly sized memory pool for the KeyValues objects diff --git a/r5dev/vstdlib/keyvaluessystem.h b/r5dev/vstdlib/keyvaluessystem.h index 66540381..a778790d 100644 --- a/r5dev/vstdlib/keyvaluessystem.h +++ b/r5dev/vstdlib/keyvaluessystem.h @@ -1,6 +1,10 @@ #pragma once #include "public/ikeyvaluessystem.h" +#include "tier1/memstack.h" +#include "tier1/mempool.h" +#include "tier1/utlvector.h" +#include "tier1/utlmap.h" class CKeyValuesSystem : public IKeyValuesSystem// VTABLE @ 0x1413AA1E8 in R5pc_r5launch_N1094_CL456479_2019_10_30_05_20_PM { @@ -16,28 +20,46 @@ public: bool GetKeyValuesExpressionSymbol(const char* szName); HKeySymbol GetSymbolForStringCaseSensitive(HKeySymbol& hCaseInsensitiveSymbol, const char* szName, bool bCreate = true); - // Datatypes aren't accurate. But full fill the actual byte distance. -public: - int64_t m_iMaxKeyValuesSize; // 0x0008 private: - char gap10[240]; // 0x0010 -public: - int m_KvConditionalSymbolTable; // 0x0100 -private: - char gap104[4]; // 0x0104 -public: - int64_t field_108; // 0x0108 -private: - char gap110[32]; // 0x0110 -public: - int m_mutex; // 0x0130 + int64 m_iMaxKeyValuesSize; + CMemoryStack m_Strings; + + struct hash_item_t + { + int stringIndex; + hash_item_t* next; + }; + + CUtlMemoryPool m_HashItemMemPool; + CUtlVector m_HashTable; + + struct MemoryLeakTracker_t + { + int nameIndex; + void* pMem; + }; + + // Unknown less func. + void* m_pCompareFunc; + + CUtlRBTree m_KeyValuesTrackingList; + CUtlMap m_KvConditionalSymbolTable; + + CThreadFastMutex m_Mutex; }; -CKeyValuesSystem* KeyValuesSystem(); /* ==== KEYVALUESSYSTEM ================================================================================================================================================= */ inline void* g_pKeyValuesMemPool = nullptr; inline CKeyValuesSystem* g_pKeyValuesSystem = nullptr; +//----------------------------------------------------------------------------- +// Instance singleton and expose interface to rest of code +//----------------------------------------------------------------------------- +FORCEINLINE CKeyValuesSystem* KeyValuesSystem() +{ + return g_pKeyValuesSystem; +} + /////////////////////////////////////////////////////////////////////////////// class HKeyValuesSystem : public IDetour {