Add templated helper class to promote type-safety (#965)

This commit is contained in:
Michael Flaherty
2019-04-12 12:10:37 -07:00
committed by GitHub
parent dd81d7c78f
commit e2eac382c0
6 changed files with 141 additions and 260 deletions
+3 -15
View File
@@ -32,6 +32,7 @@
#include "extension.h"
#include "variant-t.h"
#include <datamap.h>
#include <sm_argbuffer.h>
ICallWrapper *g_pAcceptInput = NULL;
@@ -79,9 +80,6 @@ static cell_t AcceptEntityInput(IPluginContext *pContext, const cell_t *params)
CBaseEntity *pActivator, *pCaller, *pDest;
char *inputname;
unsigned char vstk[sizeof(void *) + sizeof(const char *) + sizeof(CBaseEntity *)*2 + SIZEOF_VARIANT_T + sizeof(int)];
unsigned char *vptr = vstk;
ENTINDEX_TO_CBASEENTITY(params[1], pDest);
pContext->LocalToString(params[2], &inputname);
if (params[3] == -1)
@@ -97,19 +95,9 @@ static cell_t AcceptEntityInput(IPluginContext *pContext, const cell_t *params)
ENTINDEX_TO_CBASEENTITY(params[4], pCaller);
}
*(void **)vptr = pDest;
vptr += sizeof(void *);
*(const char **)vptr = inputname;
vptr += sizeof(const char *);
*(CBaseEntity **)vptr = pActivator;
vptr += sizeof(CBaseEntity *);
*(CBaseEntity **)vptr = pCaller;
vptr += sizeof(CBaseEntity *);
memcpy(vptr, g_Variant_t, SIZEOF_VARIANT_T);
vptr += SIZEOF_VARIANT_T;
*(int *)vptr = params[5];
ArgBuffer<void*, const char*, CBaseEntity*, CBaseEntity*, decltype(g_Variant_t), int> vstk(pDest, inputname, pActivator, pCaller, g_Variant_t, params[5]);
bool ret;
bool ret = false;
g_pAcceptInput->Execute(vstk, &ret);
_init_variant_t();
+3 -13
View File
@@ -32,6 +32,7 @@
#include "extension.h"
#include "variant-t.h"
#include "output.h"
#include <sm_argbuffer.h>
ICallWrapper *g_pFireOutput = NULL;
@@ -365,9 +366,6 @@ static cell_t FireEntityOutput(IPluginContext *pContext, const cell_t *params)
void *pOutput = NULL;
char *outputname;
unsigned char vstk[sizeof(void *) + sizeof(CBaseEntity *)*2 + SIZEOF_VARIANT_T + sizeof(float)];
unsigned char *vptr = vstk;
ENTINDEX_TO_CBASEENTITY(params[1], pCaller);
pContext->LocalToString(params[2], &outputname);
@@ -382,17 +380,9 @@ static cell_t FireEntityOutput(IPluginContext *pContext, const cell_t *params)
ENTINDEX_TO_CBASEENTITY(params[3], pActivator);
}
*(void **)vptr = pOutput;
vptr += sizeof(void *);
memcpy(vptr, g_Variant_t, SIZEOF_VARIANT_T);
vptr += SIZEOF_VARIANT_T;
*(CBaseEntity **)vptr = pActivator;
vptr += sizeof(CBaseEntity *);
*(CBaseEntity **)vptr = pCaller;
vptr += sizeof(CBaseEntity *);
*(float *)vptr = sp_ctof(params[4]);
ArgBuffer<void*, decltype(g_Variant_t), CBaseEntity*, CBaseEntity*, float> vstk(pOutput, g_Variant_t, pActivator, pCaller, sp_ctof(params[4]));
g_pFireOutput->Execute(vstk, NULL);
g_pFireOutput->Execute(vstk, nullptr);
_init_variant_t();
return 1;