Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
144
Src/Wasabi/api/script/objecttable.h
Normal file
144
Src/Wasabi/api/script/objecttable.h
Normal file
|
@ -0,0 +1,144 @@
|
|||
#ifndef __OBJECTTABLE
|
||||
#define __OBJECTTABLE
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
#include <wasabicfg.h>
|
||||
|
||||
#include <bfc/ptrlist.h>
|
||||
class ScriptObjectController;
|
||||
|
||||
#ifdef _NOSTUDIO
|
||||
//CUT #include "../../scriptcompiler/compiler.h"
|
||||
//CUT #include "../../scriptcompiler/ctrlblock.h"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#include <api/script/vcputypes.h>
|
||||
|
||||
#define CLASS_ID_BASE 0x100
|
||||
|
||||
|
||||
#define MAKE_NEW_OBJECT(class, objclass) \
|
||||
case class: \
|
||||
s = new objclass; \
|
||||
objclass::instantiate((objclass *)s); \
|
||||
break;
|
||||
|
||||
// For type names table
|
||||
typedef struct {
|
||||
wchar_t *name;
|
||||
int type;
|
||||
int instantiable;
|
||||
int referenceable;
|
||||
} typenames;
|
||||
|
||||
// This is the table that link type names as they are
|
||||
// recognized in scripts to actual basic types.
|
||||
|
||||
// Non instantiable means you can't do v = new <type>
|
||||
// Non referenceable means you can't do <type> v;
|
||||
// Not a ref means content is not a reference to an object but rather the actual
|
||||
// content itself
|
||||
// * special case for strings which is a ref to a char *, but not an object
|
||||
#define DEFINE_TYPES \
|
||||
typenames types[] = { \
|
||||
{L"", SCRIPT_VOID, 0, 0}, /* Non instantiable, non referenceable */ \
|
||||
{L"Event", SCRIPT_EVENT, 0, 0}, /* Non instantiable, non referenceable */ \
|
||||
{L"Int", SCRIPT_INT, 0, 1}, /* Not a ref */ \
|
||||
{L"Float", SCRIPT_FLOAT, 0, 1}, /* Not a ref */ \
|
||||
{L"Double", SCRIPT_DOUBLE, 0, 1}, /* Not a ref */ \
|
||||
{L"Boolean", SCRIPT_BOOLEAN, 0, 1}, /* Not a ref */ \
|
||||
{L"String", SCRIPT_STRING, 0, 1}, /* Not a ref (* special case) */ \
|
||||
{L"Any", SCRIPT_ANY, 0, 1}, /* Non instantiable, non referenceable */ \
|
||||
}; \
|
||||
int ntypes = sizeof(types)/sizeof(typenames);
|
||||
|
||||
extern typenames types[];
|
||||
extern int ntypes;
|
||||
|
||||
#define SVC_CLASS_BASE 1024
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
class class_entry {
|
||||
public:
|
||||
const wchar_t *classname;
|
||||
int classid;
|
||||
int ancestorclassid;
|
||||
ScriptObjectController *controller;
|
||||
GUID classGuid;
|
||||
int instantiable;
|
||||
int referenceable;
|
||||
int external;
|
||||
waServiceFactory *sf;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
void *ptr;
|
||||
int nargs;
|
||||
void *host;
|
||||
} hostrefstruct;
|
||||
|
||||
class SystemObject;
|
||||
|
||||
class ObjectTable {
|
||||
|
||||
public :
|
||||
|
||||
static void start(); // initialize tables, internal objects...
|
||||
static void shutdown(); // free tables
|
||||
static void unloadExternalClasses(); // unload external classes
|
||||
static void loadExternalClasses(); // reload external classes
|
||||
|
||||
static int registerClass(ScriptObjectController *c, waServiceFactory *sf = NULL); // returns classid. ancestorclass = 0 = Object
|
||||
|
||||
// static void instantiate(ScriptObject *o, int classid);
|
||||
static int addrefDLF(VCPUdlfEntry *dlf, int id);
|
||||
static void delrefDLF(VCPUdlfEntry *dlf);
|
||||
static void resetDLF(VCPUdlfEntry *dlf);
|
||||
|
||||
static int getClassFromName(const wchar_t *classname);
|
||||
static int getClassFromGuid(GUID g);
|
||||
static const wchar_t *getClassName(int classid);
|
||||
static int isExternal(int classid);
|
||||
static int getNumGuids();
|
||||
static GUID enumGuid(int i);
|
||||
static const wchar_t *enumClassName(int n);
|
||||
static int getClassEntryIdx(int classid);
|
||||
static int isDescendant(int class1, int classid);
|
||||
static int isClassInstantiable(int classid);
|
||||
static int isClassReferenceable(int classid);
|
||||
static ScriptObject *instantiate(int classid);
|
||||
static void *encapsulate(int classid, ScriptObject *o);
|
||||
static void destroy(ScriptObject *o);
|
||||
static void deencapsulate(int classid, void *o);
|
||||
static const wchar_t *getFunction(int dlfid, int *n, ScriptObjectController **p);
|
||||
static scriptVar callFunction(ScriptObject *obj, int dlfid, scriptVar **params);
|
||||
static int dlfAddRef(ScriptObjectController *o, const wchar_t *function_name, void *host);
|
||||
static int dlfAddRef(ScriptObjectController *o, int i, void *host);
|
||||
static void dlfAddClassRef(ScriptObjectController *o, void *host);
|
||||
static void dlfRemRef(void *host);
|
||||
static int checkScript(SystemObject *o);
|
||||
static ScriptObjectController *getController(GUID g);
|
||||
static class_entry *getClassEntry(int classid);
|
||||
static void unlinkClass(class_entry *e);
|
||||
|
||||
#ifdef _NOSTUDIO
|
||||
static int validateMember(int classid, wchar_t *member, ControlBlock *parms, int *ret);
|
||||
#endif
|
||||
|
||||
private:
|
||||
|
||||
static PtrList < class_entry > classes;
|
||||
static PtrList < hostrefstruct > hostrefs;
|
||||
static int classidx;
|
||||
static int externalloaded;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue