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 //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