1 /* 2 * OpenBOR - http://www.chronocrash.com 3 * ----------------------------------------------------------------------- 4 * All rights reserved, see LICENSE in OpenBOR root for details. 5 * 6 * Copyright (c) 2004 - 2014 OpenBOR Team 7 */ 8 9 #ifndef SCRIPTVARIANT_H 10 #define SCRIPTVARIANT_H 11 12 #include "depends.h" 13 14 typedef enum VariantType 15 { 16 VT_EMPTY = 0, //not initialized 17 VT_INTEGER = 1, //int/long 18 VT_DECIMAL = 2, //double 19 VT_PTR = 5, //void* 20 VT_STR = 6, //char* 21 } VARTYPE; 22 23 typedef struct ScriptVariant 24 { 25 union//value 26 { 27 LONG lVal; 28 VOID *ptrVal; 29 DOUBLE dblVal; 30 int strVal; 31 }; 32 VARTYPE vt;//variatn type 33 } ScriptVariant; 34 35 //clear the string cache 36 inline void StrCache_Clear(); 37 // int the string cache 38 //void StrCache_Init(); 39 inline void StrCache_Collect(int index); 40 inline int StrCache_Pop(); 41 inline CHAR *StrCache_Get(int index); 42 void StrCache_Copy(int index, CHAR *str); 43 void StrCache_NCopy(int index, CHAR *str, int n); 44 inline void ScriptVariant_Clear(ScriptVariant *var); 45 46 inline void ScriptVariant_Init(ScriptVariant *var); 47 inline void ScriptVariant_Copy(ScriptVariant *svar, ScriptVariant *rightChild ); // faster in some situations 48 inline void ScriptVariant_ChangeType(ScriptVariant *var, VARTYPE cvt); 49 void ScriptVariant_ParseStringConstant(ScriptVariant *var, CHAR *str); 50 inline HRESULT ScriptVariant_IntegerValue(ScriptVariant *var, LONG *pVal); 51 inline HRESULT ScriptVariant_DecimalValue(ScriptVariant *var, DOUBLE *pVal); 52 inline BOOL ScriptVariant_IsTrue(ScriptVariant *svar); 53 inline void ScriptVariant_ToString(ScriptVariant *svar, LPSTR buffer ); 54 55 // light version, for compiled call, faster than above, but not safe in some situations 56 // This function are used by compiled scripts 57 inline ScriptVariant *ScriptVariant_Assign(ScriptVariant *svar, ScriptVariant *rightChild ); 58 inline ScriptVariant *ScriptVariant_MulAssign(ScriptVariant *svar, ScriptVariant *rightChild ); 59 inline ScriptVariant *ScriptVariant_DivAssign(ScriptVariant *svar, ScriptVariant *rightChild ); 60 inline ScriptVariant *ScriptVariant_AddAssign(ScriptVariant *svar, ScriptVariant *rightChild ); 61 inline ScriptVariant *ScriptVariant_SubAssign(ScriptVariant *svar, ScriptVariant *rightChild ); 62 inline ScriptVariant *ScriptVariant_ModAssign(ScriptVariant *svar, ScriptVariant *rightChild ); 63 inline ScriptVariant *ScriptVariant_Or( ScriptVariant *svar, ScriptVariant *rightChild ); 64 inline ScriptVariant *ScriptVariant_And( ScriptVariant *svar, ScriptVariant *rightChild ); 65 inline ScriptVariant *ScriptVariant_Bit_Or( ScriptVariant *svar, ScriptVariant *rightChild ); 66 inline ScriptVariant *ScriptVariant_Xor( ScriptVariant *svar, ScriptVariant *rightChild ); 67 inline ScriptVariant *ScriptVariant_Bit_And( ScriptVariant *svar, ScriptVariant *rightChild ); 68 inline ScriptVariant *ScriptVariant_Eq( ScriptVariant *svar, ScriptVariant *rightChild ); 69 inline ScriptVariant *ScriptVariant_Ne( ScriptVariant *svar, ScriptVariant *rightChild ); 70 inline ScriptVariant *ScriptVariant_Lt( ScriptVariant *svar, ScriptVariant *rightChild ); 71 inline ScriptVariant *ScriptVariant_Gt( ScriptVariant *svar, ScriptVariant *rightChild ); 72 inline ScriptVariant *ScriptVariant_Ge( ScriptVariant *svar, ScriptVariant *rightChild ); 73 inline ScriptVariant *ScriptVariant_Le( ScriptVariant *svar, ScriptVariant *rightChild ); 74 inline ScriptVariant *ScriptVariant_Add( ScriptVariant *svar, ScriptVariant *rightChild ); 75 inline ScriptVariant *ScriptVariant_Sub( ScriptVariant *svar, ScriptVariant *rightChild ); 76 inline ScriptVariant *ScriptVariant_Shl( ScriptVariant *svar, ScriptVariant *rightChild ); 77 inline ScriptVariant *ScriptVariant_Shr( ScriptVariant *svar, ScriptVariant *rightChild ); 78 inline ScriptVariant *ScriptVariant_Mul( ScriptVariant *svar, ScriptVariant *rightChild ); 79 inline ScriptVariant *ScriptVariant_Div( ScriptVariant *svar, ScriptVariant *rightChild ); 80 inline ScriptVariant *ScriptVariant_Mod( ScriptVariant *svar, ScriptVariant *rightChild ); 81 inline void ScriptVariant_Inc_Op(ScriptVariant *svar ); 82 inline ScriptVariant *ScriptVariant_Inc_Op2(ScriptVariant *svar ); 83 inline void ScriptVariant_Dec_Op(ScriptVariant *svar ); 84 inline ScriptVariant *ScriptVariant_Dec_Op2(ScriptVariant *svar ); 85 inline void ScriptVariant_Pos( ScriptVariant *svar); 86 inline void ScriptVariant_Neg( ScriptVariant *svar); 87 inline void ScriptVariant_Boolean_Not(ScriptVariant *svar ); 88 89 #endif 90