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