00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __MACROS_H
00024 #define __MACROS_H
00025
00026 #include "onstartup.h"
00027 #include "carray.h"
00028 #include "ctypes.h"
00029
00030
00031
00037
00047 #define Define_Network(NAME) \
00048 EXECUTE_ON_STARTUP(NAME##__net, networks.instance()->add(new NAME(#NAME));)
00049
00055 #define Define_Channel(NAME) \
00056 EXECUTE_ON_STARTUP(NAME##__channelt, channeltypes.instance()->add(new NAME(#NAME));)
00057
00068 #define Define_Function(NAME,ARGCOUNT) \
00069 EXECUTE_ON_STARTUP(NAME##__##ARGCOUNT##__func, functions.instance()->add(new cFunctionType(#NAME,NAME,ARGCOUNT));)
00070
00078 #define Define_Function2(NAME,FUNCTION,ARGCOUNT) \
00079 EXECUTE_ON_STARTUP(NAME##__##ARGCOUNT##__func, functions.instance()->add(new cFunctionType(#NAME,FUNCTION,ARGCOUNT));)
00080
00089 #define Register_Class(CLASSNAME) \
00090 cPolymorphic *CLASSNAME##__create() {return new CLASSNAME;} \
00091 EXECUTE_ON_STARTUP(CLASSNAME##__class, classes.instance()->add(new cClassRegister(#CLASSNAME,CLASSNAME##__create));)
00092
00094
00095
00096
00102
00114 #define Define_Module(CLASSNAME) \
00115 static cModule *CLASSNAME##__create() {return new CLASSNAME();} \
00116 EXECUTE_ON_STARTUP(CLASSNAME##__mod, modtypes.instance()->add(new cModuleType(#CLASSNAME,#CLASSNAME,(ModuleCreateFunc)CLASSNAME##__create));)
00117
00129 #define Define_Module_Like(CLASSNAME,INTERFACENAME) \
00130 static cModule *CLASSNAME##__create() {return new CLASSNAME();} \
00131 EXECUTE_ON_STARTUP(CLASSNAME##__mod, modtypes.instance()->add(new cModuleType(#CLASSNAME,#INTERFACENAME,(ModuleCreateFunc)CLASSNAME##__create));)
00132
00150
00151 #define Module_Class_Members(CLASSNAME,BASECLASS,STACK) \
00152 public: \
00153 CLASSNAME(const char *dummy1=0, cModule *dummy2=0, unsigned stk=STACK) : BASECLASS(0,0,stk) {}
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166 #define ModuleInterface(CLASSNAME) static cModuleInterface::DeclarationItem CLASSNAME##__descr[] = {
00167 #define Gate(NAME,TYPE) {'G', #NAME, NULL, TYPE},
00168 #define Parameter(NAME,TYPES) {'P', #NAME, TYPES, 0 },
00169 #define EndInterface {'E', NULL, NULL, 0 }};
00170
00171
00172 #define Register_ModuleInterface(CLASSNAME) \
00173 EXECUTE_ON_STARTUP(CLASSNAME##__if, modinterfaces.instance()->add(new cModuleInterface(#CLASSNAME, CLASSNAME##__descr));)
00174
00175
00176 #define GateDir_Input 'I'
00177 #define GateDir_Output 'O'
00178
00179
00180 #define ParType_Const "#"
00181 #define ParType_Any "*"
00182 #define ParType_Numeric "LDCXFTB"
00183 #define ParType_Bool "LDCXFTB"
00184 #define ParType_String "S"
00185 #define ParType_XML "M"
00186
00187 #endif
00188