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