Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __ASEBA_NATIVES_H
00022 #define __ASEBA_NATIVES_H
00023
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027
00028 #include "../common/types.h"
00029 #include "vm.h"
00030
00031 #ifdef _MSC_VER
00032 #pragma warning( disable: 4200) // disable 0 size arrays warning
00033 #define inline __inline // msvc does not support the standart C99/C++ static inline construct
00034 #endif
00035
00043
00044
00045
00047 typedef struct
00048 {
00049 uint16 size;
00050 const char* name;
00051 } AsebaVariableDescription;
00052
00054 typedef struct
00055 {
00056 const char* name;
00057 AsebaVariableDescription variables[];
00058 } AsebaVMDescription;
00059
00061 typedef struct
00062 {
00063 const char* name;
00064 const char* doc;
00065 } AsebaLocalEventDescription;
00066
00068 typedef void (*AsebaNativeFunctionPointer)(AsebaVMState *vm);
00069
00071 typedef struct
00072 {
00073 sint16 size;
00074 const char* name;
00075 } AsebaNativeFunctionArgumentDescription;
00076
00078 typedef struct
00079 {
00080 const char* name;
00081 const char* doc;
00082 AsebaNativeFunctionArgumentDescription arguments[];
00083 } AsebaNativeFunctionDescription;
00084
00085
00086
00088 static inline sint16 AsebaNativePopArg(AsebaVMState *vm)
00089 {
00090 return vm->stack[vm->sp--];
00091 }
00092
00093
00094
00096 void AsebaNative_veccopy(AsebaVMState *vm);
00098 extern const AsebaNativeFunctionDescription AsebaNativeDescription_veccopy;
00099
00101 void AsebaNative_vecfill(AsebaVMState *vm);
00103 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecfill;
00104
00106 void AsebaNative_vecaddscalar(AsebaVMState *vm);
00108 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecaddscalar;
00109
00111 void AsebaNative_vecadd(AsebaVMState *vm);
00113 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecadd;
00114
00116 void AsebaNative_vecsub(AsebaVMState *vm);
00118 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecsub;
00119
00121 void AsebaNative_vecmul(AsebaVMState *vm);
00123 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecmul;
00124
00126 void AsebaNative_vecdiv(AsebaVMState *vm);
00128 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecdiv;
00129
00131 void AsebaNative_vecmin(AsebaVMState *vm);
00133 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecmin;
00134
00136 void AsebaNative_vecmax(AsebaVMState *vm);
00138 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecmax;
00139
00141 void AsebaNative_vecdot(AsebaVMState *vm);
00143 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecdot;
00144
00146 void AsebaNative_vecstat(AsebaVMState *vm);
00148 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecstat;
00149
00151 void AsebaNative_vecargbounds(AsebaVMState *vm);
00153 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecargbounds;
00154
00156 void AsebaNative_vecsort(AsebaVMState *vm);
00158 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecsort;
00159
00161 void AsebaNative_mathmuldiv(AsebaVMState *vm);
00163 extern const AsebaNativeFunctionDescription AsebaNativeDescription_mathmuldiv;
00164
00166 void AsebaNative_mathatan2(AsebaVMState *vm);
00168 extern const AsebaNativeFunctionDescription AsebaNativeDescription_mathatan2;
00169
00171 void AsebaNative_mathsin(AsebaVMState *vm);
00173 extern const AsebaNativeFunctionDescription AsebaNativeDescription_mathsin;
00174
00176 void AsebaNative_mathcos(AsebaVMState *vm);
00178 extern const AsebaNativeFunctionDescription AsebaNativeDescription_mathcos;
00179
00181 void AsebaNative_mathrot2(AsebaVMState *vm);
00183 extern const AsebaNativeFunctionDescription AsebaNativeDescription_mathrot2;
00184
00186 void AsebaNative_mathsqrt(AsebaVMState *vm);
00188 extern const AsebaNativeFunctionDescription AsebaNativeDescription_mathsqrt;
00189
00191 void AsebaNative_vecnonzerosequence(AsebaVMState *vm);
00193 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecnonzerosequence;
00194
00196 void AsebaSetRandomSeed(uint16 seed);
00198 uint16 AsebaGetRandom();
00200 void AsebaNative_rand(AsebaVMState *vm);
00202 extern const AsebaNativeFunctionDescription AsebaNativeDescription_rand;
00203
00205 #define ASEBA_NATIVES_STD_COUNT 21
00206
00208 #define ASEBA_NATIVES_STD_FUNCTIONS \
00209 AsebaNative_veccopy, \
00210 AsebaNative_vecfill, \
00211 AsebaNative_vecaddscalar, \
00212 AsebaNative_vecadd, \
00213 AsebaNative_vecsub, \
00214 AsebaNative_vecmul, \
00215 AsebaNative_vecdiv, \
00216 AsebaNative_vecmin, \
00217 AsebaNative_vecmax, \
00218 AsebaNative_vecdot, \
00219 AsebaNative_vecstat, \
00220 AsebaNative_vecargbounds, \
00221 AsebaNative_vecsort, \
00222 AsebaNative_mathmuldiv, \
00223 AsebaNative_mathatan2, \
00224 AsebaNative_mathsin, \
00225 AsebaNative_mathcos, \
00226 AsebaNative_mathrot2, \
00227 AsebaNative_mathsqrt, \
00228 AsebaNative_vecnonzerosequence, \
00229 AsebaNative_rand
00230
00232 #define ASEBA_NATIVES_STD_DESCRIPTIONS \
00233 &AsebaNativeDescription_veccopy, \
00234 &AsebaNativeDescription_vecfill, \
00235 &AsebaNativeDescription_vecaddscalar, \
00236 &AsebaNativeDescription_vecadd, \
00237 &AsebaNativeDescription_vecsub, \
00238 &AsebaNativeDescription_vecmul, \
00239 &AsebaNativeDescription_vecdiv, \
00240 &AsebaNativeDescription_vecmin, \
00241 &AsebaNativeDescription_vecmax, \
00242 &AsebaNativeDescription_vecdot, \
00243 &AsebaNativeDescription_vecstat, \
00244 &AsebaNativeDescription_vecargbounds, \
00245 &AsebaNativeDescription_vecsort, \
00246 &AsebaNativeDescription_mathmuldiv, \
00247 &AsebaNativeDescription_mathatan2, \
00248 &AsebaNativeDescription_mathsin, \
00249 &AsebaNativeDescription_mathcos, \
00250 &AsebaNativeDescription_mathrot2, \
00251 &AsebaNativeDescription_mathsqrt, \
00252 &AsebaNativeDescription_vecnonzerosequence, \
00253 &AsebaNativeDescription_rand
00254
00257 #ifdef __cplusplus
00258 }
00259 #endif
00260
00261 #endif