2 * ================================================================
3 * SourcePawn (C)2004-2007 AlliedModders LLC. All rights reserved.
4 * ================================================================
6 * This file is not open source and may not be copied without explicit
7 * written permission of AlliedModders LLC. This file may not be redistributed
8 * in whole or significant part.
9 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
14 #ifndef _INCLUDE_SOURCEPAWN_BASECONTEXT_H_
15 #define _INCLUDE_SOURCEPAWN_BASECONTEXT_H_
17 #include "sp_vm_api.h"
18 #include "sp_vm_function.h"
21 * :TODO: Make functions allocate as a lump instead of individual allocations!
27 public IPluginContext,
28 public IPluginDebugInfo
31 BaseContext(sp_context_t *ctx);
33 public: //IPluginContext
34 IVirtualMachine *GetVirtualMachine();
35 sp_context_t *GetContext();
37 int SetDebugBreak(SPVM_DEBUGBREAK newpfn, SPVM_DEBUGBREAK *oldpfn);
38 IPluginDebugInfo *GetDebugInfo();
39 virtual int HeapAlloc(unsigned int cells, cell_t *local_addr, cell_t **phys_addr);
40 virtual int HeapPop(cell_t local_addr);
41 virtual int HeapRelease(cell_t local_addr);
42 virtual int FindNativeByName(const char *name, uint32_t *index);
43 virtual int GetNativeByIndex(uint32_t index, sp_native_t **native);
44 virtual uint32_t GetNativesNum();
45 virtual int FindPublicByName(const char *name, uint32_t *index);
46 virtual int GetPublicByIndex(uint32_t index, sp_public_t **publicptr);
47 virtual uint32_t GetPublicsNum();
48 virtual int GetPubvarByIndex(uint32_t index, sp_pubvar_t **pubvar);
49 virtual int FindPubvarByName(const char *name, uint32_t *index);
50 virtual int GetPubvarAddrs(uint32_t index, cell_t *local_addr, cell_t **phys_addr);
51 virtual uint32_t GetPubVarsNum();
52 virtual int LocalToPhysAddr(cell_t local_addr, cell_t **phys_addr);
53 virtual int LocalToString(cell_t local_addr, char **addr);
54 virtual int StringToLocal(cell_t local_addr, size_t chars, const char *source);
55 virtual int StringToLocalUTF8(cell_t local_addr, size_t maxbytes, const char *source, size_t *wrtnbytes);
56 virtual int PushCell(cell_t value);
57 virtual int PushCellArray(cell_t *local_addr, cell_t **phys_addr, cell_t array[], unsigned int numcells);
58 virtual int PushString(cell_t *local_addr, char **phys_addr, const char *string);
59 virtual int PushCellsFromArray(cell_t array[], unsigned int numcells);
60 virtual int BindNatives(const sp_nativeinfo_t *natives, unsigned int num, int overwrite);
61 virtual int BindNative(const sp_nativeinfo_t *native);
62 virtual int BindNativeToAny(SPVM_NATIVE_FUNC native);
63 virtual int Execute(uint32_t code_addr, cell_t *result);
64 virtual void ThrowNativeErrorEx(int error, const char *msg, ...);
65 virtual cell_t ThrowNativeError(const char *msg, ...);
66 virtual IPluginFunction *GetFunctionByName(const char *public_name);
67 virtual IPluginFunction *GetFunctionById(funcid_t func_id);
68 #if defined SOURCEMOD_BUILD
69 virtual SourceMod::IdentityToken_t *GetIdentity();
70 void SetIdentity(SourceMod::IdentityToken_t *token);
72 void SetRunnable(bool runnable);
74 public: //IPluginDebugInfo
75 virtual int LookupFile(ucell_t addr, const char **filename);
76 virtual int LookupFunction(ucell_t addr, const char **name);
77 virtual int LookupLine(ucell_t addr, uint32_t *line);
79 void SetContext(sp_context_t *_ctx);
81 void SetErrorMessage(const char *msg, va_list ap);
82 void FlushFunctionCache();
85 #if defined SOURCEMOD_BUILD
86 SourceMod::IdentityToken_t *m_pToken;
88 char m_MsgCache[1024];
92 unsigned int m_funcsnum;
93 CFunction **m_priv_funcs;
94 CFunction **m_pub_funcs;
98 #endif //_INCLUDE_SOURCEPAWN_BASECONTEXT_H_