sourcepawn/vm/sp_vm_engine.h
author David Anderson <dvander@alliedmods.net>
Sun Sep 24 06:17:10 2006 +0000 (2006-09-24)
changeset 93 b00ab8fec541
parent 67 2fae86728e54
child 106 7f4b004fb227
permissions -rw-r--r--
reorganized ungen opcode stuff
fixed mislabeled ungen ops, then added appropriate notes
added executable memory functions to API
compilation results in an sp_context_t, not a BaseContext now
renamed FreeContextVars() to FreeContext()
other minor changes
dvander@67
     1
#ifndef _INCLUDE_SOURCEPAWN_VM_ENGINE_H_
dvander@67
     2
#define _INCLUDE_SOURCEPAWN_VM_ENGINE_H_
dvander@67
     3
dvander@67
     4
#include "sp_vm_api.h"
dvander@67
     5
dvander@67
     6
namespace SourcePawn
dvander@67
     7
{
dvander@67
     8
	class SourcePawnEngine : public ISourcePawnEngine
dvander@67
     9
	{
dvander@67
    10
	public:
dvander@67
    11
		/**
dvander@67
    12
		 * Loads a named file from a file pointer.  
dvander@67
    13
		 * Using this means base memory will be allocated by the VM.
dvander@67
    14
		 * Note: The file handle position may be undefined on entry, and is
dvander@67
    15
		 *  always undefined on conclusion.
dvander@67
    16
		 * 
dvander@67
    17
		 * @param fp			File pointer.  May be at any offset.  Not closed on return.
dvander@67
    18
		 * @param err		Optional error code pointer.
dvander@67
    19
		 * @return			A new plugin structure.
dvander@67
    20
		 */	
dvander@67
    21
		sp_plugin_t *LoadFromFilePointer(FILE *fp, int *err);
dvander@67
    22
dvander@67
    23
		/**
dvander@67
    24
		 * Loads a file from a base memory address.
dvander@67
    25
		 *	
dvander@67
    26
		 * @param base		Base address of the plugin's memory region.
dvander@67
    27
		 * @param plugin	If NULL, a new plugin pointer is returned.
dvander@67
    28
		 *                  Otherwise, the passed pointer is used.
dvander@67
    29
		 * @param err		Optional error code pointer.
dvander@67
    30
		 * @return			The resulting plugin pointer.
dvander@67
    31
		 */
dvander@67
    32
		sp_plugin_t *LoadFromMemory(void *base, sp_plugin_t *plugin, int *err);
dvander@67
    33
dvander@67
    34
		/**
dvander@67
    35
		 * Frees all of the memory associated with a plugin file.
dvander@67
    36
		 * If allocated using SP_LoadFromMemory, the base and plugin pointer 
dvander@67
    37
		 *  itself are not freed (so this may end up doing nothing).
dvander@67
    38
		 */
dvander@67
    39
		int FreeFromMemory(sp_plugin_t *plugin);
dvander@67
    40
dvander@67
    41
		/**
dvander@67
    42
		 * Creates a new IContext from a context handle.
dvander@67
    43
		 *
dvander@67
    44
		 * @param ctx		Context to use as a basis for the IPluginContext.
dvander@67
    45
		 * @return			New IPluginContext handle.
dvander@67
    46
		 */
dvander@67
    47
		IPluginContext *CreateBaseContext(sp_context_t *ctx);
dvander@67
    48
dvander@67
    49
		/** 
dvander@67
    50
		 * Frees a context.
dvander@67
    51
		 *
dvander@67
    52
		 * @param ctx		Context pointer to free.
dvander@67
    53
		 */
dvander@67
    54
		void FreeBaseContext(IPluginContext *ctx);
dvander@67
    55
dvander@67
    56
		/**
dvander@67
    57
		 * Allocates memory.
dvander@67
    58
		 * 
dvander@67
    59
		 * @param size		Size of memory to allocate.
dvander@67
    60
		 * @return			Pointer to memory, NULL if allocation failed.
dvander@67
    61
		 */
dvander@67
    62
		void *BaseAlloc(size_t size);
dvander@67
    63
dvander@67
    64
		/**
dvander@67
    65
		 * Frees memory allocated with BaseAlloc.
dvander@67
    66
		 *
dvander@67
    67
		 * @param mem		Memory address to free.
dvander@67
    68
		 */
dvander@67
    69
		void BaseFree(void *memory);
dvander@93
    70
dvander@93
    71
dvander@93
    72
		/**
dvander@93
    73
		* Allocates executable memory.
dvander@93
    74
		*
dvander@93
    75
		* @param size		Size of memory to allocate.
dvander@93
    76
		* @return			Pointer to memory, NULL if allocation failed.
dvander@93
    77
		*/
dvander@93
    78
		void *ExecAlloc(size_t size);
dvander@93
    79
dvander@93
    80
		/**
dvander@93
    81
		* Frees executable memory.
dvander@93
    82
		*
dvander@93
    83
		* @param mem		Address to free.
dvander@93
    84
		*/
dvander@93
    85
		void ExecFree(void *address);
dvander@67
    86
	};
dvander@67
    87
};
dvander@67
    88
dvander@67
    89
#endif //_INCLUDE_SOURCEPAWN_VM_ENGINE_H_