From 632c7d05dd0ce2ee98c17a123408cf94939722a4 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Thu, 17 Sep 2015 19:54:39 -0700 Subject: [PATCH] Remove the forward cache and simplify CForward construction. --- core/logic/ForwardSys.cpp | 86 ++++++++++++--------------------------- core/logic/ForwardSys.h | 10 ++--- 2 files changed, 30 insertions(+), 66 deletions(-) diff --git a/core/logic/ForwardSys.cpp b/core/logic/ForwardSys.cpp index 73f800b3e..61beac37c 100644 --- a/core/logic/ForwardSys.cpp +++ b/core/logic/ForwardSys.cpp @@ -32,22 +32,13 @@ #include "DebugReporter.h" #include "common_logic.h" #include +#include CForwardManager g_Forwards; // Genesis turns to its source, reduction occurs stepwise although the essence // is all one. End of line. FTL system check. -CForwardManager::~CForwardManager() -{ - CStack::iterator iter; - for (iter=m_FreeForwards.begin(); iter!=m_FreeForwards.end(); iter++) - { - delete (*iter); - } - m_FreeForwards.popall(); -} - void CForwardManager::OnSourceModAllInitialized() { scripts->AddPluginsListener(this); @@ -166,34 +157,12 @@ IForward *CForwardManager::FindForward(const char *name, IChangeableForward **if return NULL; } -void CForwardManager::ReleaseForward(IForward *forward) +void CForwardManager::ReleaseForward(IForward *aForward) { - ForwardFree(static_cast(forward)); -} - -void CForwardManager::ForwardFree(CForward *fwd) -{ - if (fwd == NULL) - { - return; - } - - m_FreeForwards.push(fwd); + CForward *fwd = static_cast(aForward); m_managed.remove(fwd); m_unmanaged.remove(fwd); -} - -CForward *CForwardManager::ForwardMake() -{ - CForward *fwd; - if (m_FreeForwards.empty()) - { - fwd = new CForward; - } else { - fwd = m_FreeForwards.front(); - m_FreeForwards.pop(); - } - return fwd; + delete fwd; } void CForwardManager::OnPluginPauseChange(IPlugin *plugin, bool paused) @@ -221,6 +190,28 @@ void CForwardManager::OnPluginPauseChange(IPlugin *plugin, bool paused) * ACTUAL FORWARD API IMPLEMENTATION * *************************************/ +CForward::CForward(ExecType et, const char *name, const ParamType *types, unsigned num_params) + : m_IterGuard(nullptr), + m_numparams(0), + m_varargs(0), + m_ExecType(et), + m_curparam(0), + m_errstate(SP_ERROR_NONE) +{ + ke::SafeStrcpy(m_name, sizeof(m_name), name ? name : ""); + + for (unsigned i = 0; i < num_params; i++) + m_types[i] = types[i]; + + if (num_params && types[num_params - 1] == Param_VarArgs) { + m_varargs = num_params; + m_numparams = num_params - 1; + } else { + m_varargs = 0; + m_numparams = num_params; + } +} + CForward *CForward::CreateForward(const char *name, ExecType et, unsigned int num_params, const ParamType *types, va_list ap) { ParamType _types[SP_MAX_EXEC_PARAMS]; @@ -258,30 +249,7 @@ CForward *CForward::CreateForward(const char *name, ExecType et, unsigned int nu return NULL; } - CForward *pForward = g_Forwards.ForwardMake(); - pForward->m_IterGuard = NULL; - pForward->m_curparam = 0; - pForward->m_ExecType = et; - snprintf(pForward->m_name, FORWARDS_NAME_MAX, "%s", name ? name : ""); - - for (unsigned int i=0; im_types[i] = _types[i]; - } - - if (num_params && _types[num_params-1] == Param_VarArgs) - { - pForward->m_varargs = num_params--; - } else { - pForward->m_varargs = false; - } - - pForward->m_numparams = num_params; - pForward->m_errstate = SP_ERROR_NONE; - - pForward->m_functions.clear(); - - return pForward; + return new CForward(et, name, _types, num_params); } int CForward::Execute(cell_t *result, IForwardFilter *filter) diff --git a/core/logic/ForwardSys.h b/core/logic/ForwardSys.h index 85bc0ab4d..bada7c27d 100644 --- a/core/logic/ForwardSys.h +++ b/core/logic/ForwardSys.h @@ -32,7 +32,6 @@ #include #include "common_logic.h" #include -#include #include "ISourceMod.h" using namespace SourceHook; @@ -116,6 +115,9 @@ public: va_list ap); bool IsFunctionRegistered(IPluginFunction *func); private: + CForward(ExecType et, const char *name, + const ParamType *types, unsigned num_params); + void _Int_PushArray(cell_t *inarray, unsigned int cells, int flags); void _Int_PushString(cell_t *inarray, unsigned int cells, int sz_flags, int cp_flags); inline int SetError(int err) @@ -150,8 +152,6 @@ class CForwardManager : public SMGlobalClass { friend class CForward; -public: - ~CForwardManager(); public: //IForwardManager IForward *CreateForward(const char *name, ExecType et, @@ -171,11 +171,7 @@ public: //IPluginsListener void OnPluginPauseChange(IPlugin *plugin, bool paused); public: //SMGlobalClass void OnSourceModAllInitialized(); -protected: - CForward *ForwardMake(); - void ForwardFree(CForward *fwd); private: - CStack m_FreeForwards; List m_managed; List m_unmanaged; };