faluco@739: /** faluco@739: * vim: set ts=4 : faluco@739: * =============================================================== faluco@739: * SourceMod, Copyright (C) 2004-2007 AlliedModders LLC. faluco@739: * All rights reserved. faluco@739: * =============================================================== faluco@739: * faluco@739: * This file is part of the SourceMod/SourcePawn SDK. This file may only be faluco@739: * used or modified under the Terms and Conditions of its License Agreement, faluco@739: * which is found in public/licenses/LICENSE.txt. As of this notice, derivative faluco@739: * works must be licensed under the GNU General Public License (version 2 or faluco@739: * greater). A copy of the GPL is included under public/licenses/GPL.txt. faluco@739: * faluco@739: * To view the latest information, see: http://www.sourcemod.net/license.php faluco@739: * faluco@739: * Version: $Id$ faluco@739: */ faluco@739: faluco@739: #include "extension.h" faluco@739: #include "CallWrapper.h" faluco@739: faluco@739: CallWrapper::CallWrapper(CallConvention cv, const PassInfo *paramInfo, const PassInfo *retInfo, unsigned int numParams) faluco@739: { faluco@739: m_Cv = cv; faluco@739: faluco@739: if (numParams) faluco@739: { faluco@739: m_Params = new PassEncode[numParams]; faluco@739: for (size_t i=0; iExecFree(m_Addrs[ADDR_CODEBASE]); faluco@739: } faluco@739: faluco@739: CallConvention CallWrapper::GetCallConvention() faluco@739: { faluco@739: return m_Cv; faluco@739: } faluco@739: faluco@739: const PassEncode *CallWrapper::GetParamInfo(unsigned int num) faluco@739: { faluco@739: return (num+1 > m_NumParams) ? NULL : &m_Params[num]; faluco@739: } faluco@739: faluco@739: const PassInfo *CallWrapper::GetReturnInfo() faluco@739: { faluco@739: return m_RetParam; faluco@739: } faluco@739: faluco@739: unsigned int CallWrapper::GetParamCount() faluco@739: { faluco@739: return m_NumParams; faluco@739: } faluco@739: faluco@739: void CallWrapper::Execute(void *vParamStack, void *retBuffer) faluco@739: { faluco@739: typedef void (*CALL_EXECUTE)(void *, void *); faluco@739: CALL_EXECUTE fn = (CALL_EXECUTE)m_Addrs[ADDR_CODEBASE]; faluco@739: fn(vParamStack, retBuffer); faluco@739: }