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 #pragma pack(4) 24 25 typedef struct ScriptVariant 26 { 27 union//value 28 { 29 LONG lVal; 30 VOID *ptrVal; 31 DOUBLE dblVal; 32 int strVal; 33 }; 34 VARTYPE vt;//variatn type 35 } ScriptVariant; 36 37 #pragma pack() 38 39 //clear the string cache 40 void StrCache_Clear(); 41 // int the string cache 42 //void StrCache_Init(); 43 void StrCache_Collect(int index); 44 int StrCache_Pop(); 45 int StrCache_CreateNewFrom(const CHAR *str); 46 CHAR *StrCache_Get(int index); 47 void ScriptVariant_Clear(ScriptVariant *var); 48 49 void ScriptVariant_Init(ScriptVariant *var); 50 void ScriptVariant_Copy(ScriptVariant *svar, ScriptVariant *rightChild ); // faster in some situations 51 void ScriptVariant_ChangeType(ScriptVariant *var, VARTYPE cvt); 52 void ScriptVariant_ParseStringConstant(ScriptVariant *var, CHAR *str); 53 HRESULT ScriptVariant_IntegerValue(ScriptVariant *var, LONG *pVal); 54 HRESULT ScriptVariant_DecimalValue(ScriptVariant *var, DOUBLE *pVal); 55 BOOL ScriptVariant_IsTrue(ScriptVariant *svar); 56 void ScriptVariant_ToString(ScriptVariant *svar, LPSTR buffer ); 57 58 // light version, for compiled call, faster than above, but not safe in some situations 59 // This function are used by compiled scripts 60 ScriptVariant *ScriptVariant_Assign(ScriptVariant *svar, ScriptVariant *rightChild ); 61 ScriptVariant *ScriptVariant_MulAssign(ScriptVariant *svar, ScriptVariant *rightChild ); 62 ScriptVariant *ScriptVariant_DivAssign(ScriptVariant *svar, ScriptVariant *rightChild ); 63 ScriptVariant *ScriptVariant_AddAssign(ScriptVariant *svar, ScriptVariant *rightChild ); 64 ScriptVariant *ScriptVariant_SubAssign(ScriptVariant *svar, ScriptVariant *rightChild ); 65 ScriptVariant *ScriptVariant_ModAssign(ScriptVariant *svar, ScriptVariant *rightChild ); 66 ScriptVariant *ScriptVariant_Or( ScriptVariant *svar, ScriptVariant *rightChild ); 67 ScriptVariant *ScriptVariant_And( ScriptVariant *svar, ScriptVariant *rightChild ); 68 ScriptVariant *ScriptVariant_Bit_Or( ScriptVariant *svar, ScriptVariant *rightChild ); 69 ScriptVariant *ScriptVariant_Xor( ScriptVariant *svar, ScriptVariant *rightChild ); 70 ScriptVariant *ScriptVariant_Bit_And( ScriptVariant *svar, ScriptVariant *rightChild ); 71 ScriptVariant *ScriptVariant_Eq( ScriptVariant *svar, ScriptVariant *rightChild ); 72 ScriptVariant *ScriptVariant_Ne( ScriptVariant *svar, ScriptVariant *rightChild ); 73 ScriptVariant *ScriptVariant_Lt( ScriptVariant *svar, ScriptVariant *rightChild ); 74 ScriptVariant *ScriptVariant_Gt( ScriptVariant *svar, ScriptVariant *rightChild ); 75 ScriptVariant *ScriptVariant_Ge( ScriptVariant *svar, ScriptVariant *rightChild ); 76 ScriptVariant *ScriptVariant_Le( ScriptVariant *svar, ScriptVariant *rightChild ); 77 ScriptVariant *ScriptVariant_Add( ScriptVariant *svar, ScriptVariant *rightChild ); 78 ScriptVariant *ScriptVariant_Sub( ScriptVariant *svar, ScriptVariant *rightChild ); 79 ScriptVariant *ScriptVariant_Shl( ScriptVariant *svar, ScriptVariant *rightChild ); 80 ScriptVariant *ScriptVariant_Shr( ScriptVariant *svar, ScriptVariant *rightChild ); 81 ScriptVariant *ScriptVariant_Mul( ScriptVariant *svar, ScriptVariant *rightChild ); 82 ScriptVariant *ScriptVariant_Div( ScriptVariant *svar, ScriptVariant *rightChild ); 83 ScriptVariant *ScriptVariant_Mod( ScriptVariant *svar, ScriptVariant *rightChild ); 84 void ScriptVariant_Inc_Op(ScriptVariant *svar ); 85 ScriptVariant *ScriptVariant_Inc_Op2(ScriptVariant *svar ); 86 void ScriptVariant_Dec_Op(ScriptVariant *svar ); 87 ScriptVariant *ScriptVariant_Dec_Op2(ScriptVariant *svar ); 88 void ScriptVariant_Pos( ScriptVariant *svar); 89 void ScriptVariant_Neg( ScriptVariant *svar); 90 void ScriptVariant_Boolean_Not(ScriptVariant *svar ); 91 92 #endif 93