1 /* 2 * OpenBOR - http://www.LavaLit.com 3 * ----------------------------------------------------------------------- 4 * All rights reserved, see LICENSE in OpenBOR root for details. 5 * 6 * Copyright (c) 2004 - 2011 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 36 extern CHAR** strcache; 37 extern int strcache_size; 38 extern int* strcache_index; 39 40 //clear the string cache 41 void StrCache_Clear(); 42 // int the string cache 43 //void StrCache_Init(); 44 void StrCache_Collect(int index); 45 int StrCache_Pop(); 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 HRESULT ScriptVariant_IntegerValue(ScriptVariant* var, LONG* pVal); 53 HRESULT ScriptVariant_DecimalValue(ScriptVariant* var, DOUBLE* pVal); 54 BOOL ScriptVariant_IsTrue(ScriptVariant* svar); 55 void ScriptVariant_ToString(ScriptVariant* svar, LPSTR buffer ); 56 57 // light version, for compiled call, faster than above, but not safe in some situations 58 // This function are used by compiled scripts 59 ScriptVariant* ScriptVariant_Assign(ScriptVariant* svar, ScriptVariant* rightChild ); 60 ScriptVariant* ScriptVariant_MulAssign(ScriptVariant* svar, ScriptVariant* rightChild ); 61 ScriptVariant* ScriptVariant_DivAssign(ScriptVariant* svar, ScriptVariant* rightChild ); 62 ScriptVariant* ScriptVariant_AddAssign(ScriptVariant* svar, ScriptVariant* rightChild ); 63 ScriptVariant* ScriptVariant_SubAssign(ScriptVariant* svar, ScriptVariant* rightChild ); 64 ScriptVariant* ScriptVariant_ModAssign(ScriptVariant* svar, ScriptVariant* rightChild ); 65 ScriptVariant* ScriptVariant_Or( ScriptVariant* svar, ScriptVariant* rightChild ); 66 ScriptVariant* ScriptVariant_And( ScriptVariant* svar, ScriptVariant* rightChild ); 67 ScriptVariant* ScriptVariant_Eq( ScriptVariant* svar, ScriptVariant* rightChild ); 68 ScriptVariant* ScriptVariant_Ne( ScriptVariant* svar, ScriptVariant* rightChild ); 69 ScriptVariant* ScriptVariant_Lt( ScriptVariant* svar, ScriptVariant* rightChild ); 70 ScriptVariant* ScriptVariant_Gt( ScriptVariant* svar, ScriptVariant* rightChild ); 71 ScriptVariant* ScriptVariant_Ge( ScriptVariant* svar, ScriptVariant* rightChild ); 72 ScriptVariant* ScriptVariant_Le( ScriptVariant* svar, ScriptVariant* rightChild ); 73 ScriptVariant* ScriptVariant_Add( ScriptVariant* svar, ScriptVariant* rightChild ); 74 ScriptVariant* ScriptVariant_Sub( ScriptVariant* svar, ScriptVariant* rightChild ); 75 ScriptVariant* ScriptVariant_Mul( ScriptVariant* svar, ScriptVariant* rightChild ); 76 ScriptVariant* ScriptVariant_Div( ScriptVariant* svar, ScriptVariant* rightChild ); 77 ScriptVariant* ScriptVariant_Mod( ScriptVariant* svar, ScriptVariant* rightChild ); 78 ScriptVariant* ScriptVariant_Inc_Op(ScriptVariant* svar ); 79 ScriptVariant* ScriptVariant_Inc_Op2(ScriptVariant* svar ); 80 ScriptVariant* ScriptVariant_Dec_Op(ScriptVariant* svar ); 81 ScriptVariant* ScriptVariant_Dec_Op2(ScriptVariant* svar ); 82 ScriptVariant* ScriptVariant_Pos( ScriptVariant* svar); 83 ScriptVariant* ScriptVariant_Neg( ScriptVariant* svar); 84 ScriptVariant* ScriptVariant_Boolean_Not(ScriptVariant* svar ); 85 86 #endif 87