sourcepawn/include/sp_vm_api.h
author David Anderson <dvander@alliedmods.net>
Wed Sep 20 01:59:56 2006 +0000 (2006-09-20)
changeset 69 e23e2b0a2d7e
parent 67 2fae86728e54
child 93 b00ab8fec541
permissions -rw-r--r--
initial recleaning of this mess, preparing for merge of JIT proper
dvander@67
     1
#ifndef _INCLUDE_SOURCEPAWN_VM_API_H_
dvander@67
     2
#define _INCLUDE_SOURCEPAWN_VM_API_H_
dvander@67
     3
dvander@67
     4
#include <stdio.h>
dvander@67
     5
#include "sp_vm_types.h"
dvander@67
     6
#include "sp_vm_context.h"
dvander@67
     7
dvander@67
     8
namespace SourcePawn
dvander@67
     9
{
dvander@67
    10
	class IPluginContext;
dvander@67
    11
dvander@67
    12
	/**
dvander@67
    13
	 * Contains helper functions used by VMs and the host app
dvander@67
    14
	 */
dvander@67
    15
	class ISourcePawnEngine
dvander@67
    16
	{
dvander@67
    17
	public:
dvander@67
    18
		/**
dvander@67
    19
		* Loads a named file from a file pointer.  
dvander@67
    20
		* Using this means base memory will be allocated by the VM.
dvander@67
    21
		* 
dvander@67
    22
		* @param fp		File pointer.  May be at any offset.  Not closed on return.
dvander@67
    23
		* @param err		Optional error code pointer.
dvander@67
    24
		* @return			A new plugin structure.
dvander@67
    25
		*/	
dvander@67
    26
		virtual sp_plugin_t *LoadFromFilePointer(FILE *fp, int *err) =0;
dvander@67
    27
	
dvander@67
    28
		/**
dvander@67
    29
		 * Loads a file from a base memory address.
dvander@67
    30
		 *	
dvander@67
    31
		 * @param base		Base address of the plugin's memory region.
dvander@67
    32
		 * @param plugin	If NULL, a new plugin pointer is returned.
dvander@67
    33
		 *                  Otherwise, the passed pointer is used.
dvander@67
    34
		 * @param err		Optional error code pointer.
dvander@67
    35
		 * @return			The resulting plugin pointer.
dvander@67
    36
		 */
dvander@67
    37
		virtual sp_plugin_t *LoadFromMemory(void *base, sp_plugin_t *plugin, int *err) =0;
dvander@67
    38
dvander@67
    39
		/**
dvander@67
    40
		 * Frees all of the memory associated with a plugin file.
dvander@67
    41
		 * If allocated using SP_LoadFromMemory, the base and plugin pointer 
dvander@67
    42
		 *  itself are not freed (so this may end up doing nothing).
dvander@67
    43
		 */
dvander@67
    44
		virtual int FreeFromMemory(sp_plugin_t *plugin) =0;
dvander@67
    45
dvander@67
    46
		/**
dvander@67
    47
		 * Creates a new IContext from a context handle.
dvander@67
    48
		 *
dvander@67
    49
		 * @param ctx		Context to use as a basis for the IPluginContext.
dvander@67
    50
		 * @return			New IPluginContext handle.
dvander@67
    51
		 */
dvander@67
    52
		virtual IPluginContext *CreateBaseContext(sp_context_t *ctx) =0;
dvander@67
    53
dvander@67
    54
		/** 
dvander@67
    55
		 * Frees a context.
dvander@67
    56
		 *
dvander@67
    57
		 * @param ctx		Context pointer to free.
dvander@67
    58
		 */
dvander@67
    59
		virtual void FreeBaseContext(IPluginContext *ctx) =0;
dvander@67
    60
dvander@67
    61
		/**
dvander@67
    62
		 * Allocates memory.
dvander@67
    63
		 * 
dvander@67
    64
		 * @param size		Size of memory to allocate.
dvander@67
    65
		 * @return			Pointer to memory, NULL if allocation failed.
dvander@67
    66
		 */
dvander@67
    67
		virtual void *BaseAlloc(size_t size) =0;
dvander@67
    68
dvander@67
    69
		/**
dvander@67
    70
		 * Frees memory allocated with BaseAlloc.
dvander@67
    71
		 *
dvander@67
    72
		 * @param mem		Memory address to free.
dvander@67
    73
		 */
dvander@67
    74
		virtual void BaseFree(void *memory) =0;
dvander@67
    75
	};
dvander@67
    76
dvander@69
    77
	class ICompilation
dvander@69
    78
	{
dvander@69
    79
	public:
dvander@69
    80
		virtual ~ICompilation() { };
dvander@69
    81
	};
dvander@67
    82
dvander@67
    83
	class IVirtualMachine
dvander@67
    84
	{
dvander@67
    85
	public:
dvander@67
    86
		/**
dvander@67
    87
		 * Returns the string name of a VM implementation.
dvander@67
    88
		 */
dvander@67
    89
		virtual const char *GetVMName() =0;
dvander@67
    90
dvander@67
    91
		/**
dvander@67
    92
		 * Begins a new compilation
dvander@67
    93
		 * 
dvander@67
    94
		 * @param plugin	Pointer to a plugin structure.
dvander@67
    95
		 * @return			New compilation pointer.
dvander@67
    96
		 */
dvander@67
    97
		virtual ICompilation *StartCompilation(sp_plugin_t *plugin) =0;
dvander@67
    98
dvander@67
    99
		/**
dvander@67
   100
		 * Sets a compilation option.
dvander@67
   101
		 *
dvander@67
   102
		 * @param co		Pointer to a compilation.
dvander@67
   103
		 * @param key		Option key name.
dvander@67
   104
		 * @param val		Option value string.
dvander@67
   105
		 * @return			True if option could be set, false otherwise.
dvander@67
   106
		 */
dvander@67
   107
		virtual bool SetCompilationOption(ICompilation *co, const char *key, const char *val) =0;
dvander@67
   108
dvander@67
   109
		/**
dvander@67
   110
		 * Finalizes a compilation into a new IContext.
dvander@67
   111
		 * Note: This will free the ICompilation pointer.
dvander@67
   112
		 *
dvander@67
   113
		 * @param co		Compilation pointer.
dvander@69
   114
		 * @param err		Filled with error code on exit.
dvander@67
   115
		 * @return			New plugin context.
dvander@67
   116
		 */
dvander@69
   117
		virtual IPluginContext *CompileToContext(ICompilation *co, int *err) =0;
dvander@69
   118
dvander@69
   119
		/**
dvander@69
   120
		 * Aborts a compilation and frees the ICompilation pointer.
dvander@69
   121
		 *
dvander@69
   122
		 * @param co		Compilation pointer.
dvander@69
   123
		 */
dvander@69
   124
		virtual void AbortCompilation(ICompilation *co) =0;
dvander@67
   125
dvander@67
   126
		/**
dvander@67
   127
		 * Frees any internal variable usage on a context.
dvander@67
   128
		 *
dvander@67
   129
		 * @param ctx		Context structure pointer.
dvander@67
   130
		 */
dvander@67
   131
		virtual void FreeContextVars(sp_context_t *ctx) =0;
dvander@67
   132
dvander@67
   133
		/**
dvander@67
   134
		 * Calls the "execute" function on a context.
dvander@67
   135
		 *
dvander@67
   136
		 * @param ctx		Executes a function in a context.
dvander@67
   137
		 * @param code_idx	Index into the code section.
dvander@67
   138
		 * @param result	Pointer to store result in.
dvander@67
   139
		 * @return			Error code (if any).
dvander@67
   140
		 */
dvander@67
   141
		virtual int ContextExecute(sp_context_t *ctx, uint32_t code_idx, cell_t *result) =0;
dvander@67
   142
	};
dvander@67
   143
};
dvander@67
   144
dvander@67
   145
#endif //_INCLUDE_SOURCEPAWN_VM_API_H_