00001
00008 #ifndef __GVARIANT_H__
00009 #define __GVARIANT_H__
00010
00011 #include "GDom.h"
00012 #undef Bool
00013 #include "GDateTime.h"
00014 #include "GContainers.h"
00015 #include "GHashTable.h"
00016
00018 enum GVariantType
00019 {
00020
00021
00023 GV_NULL,
00025 GV_INT32,
00027 GV_INT64,
00029 GV_BOOL,
00031 GV_DOUBLE,
00033 GV_STRING,
00035 GV_BINARY,
00037 GV_LIST,
00039 GV_DOM,
00041 GV_DOMREF,
00043 GV_VOID_PTR,
00045 GV_DATETIME,
00047 GV_HASHTABLE,
00048
00049 GV_OPERATOR,
00050
00051 GV_CUSTOM,
00052
00053 GV_WSTRING,
00054
00055 GV_GSURFACE,
00057 GV_GVIEW,
00059 GV_GMOUSE,
00061 GV_GKEY
00062
00063 };
00064
00066 enum GOperator
00067 {
00068 OpNull,
00069 OpAssign,
00070 OpPlus,
00071 OpUnaryPlus,
00072 OpMinus,
00073 OpUnaryMinus,
00074 OpMul,
00075 OpDiv,
00076 OpMod,
00077 OpLessThan,
00078 OpLessThanEqual,
00079 OpGreaterThan,
00080 OpGreaterThanEqual,
00081 OpEquals,
00082 OpNotEquals,
00083 OpPlusEquals,
00084 OpMinusEquals,
00085 OpMulEquals,
00086 OpDivEquals,
00087 OpPostInc,
00088 OpPostDec,
00089 OpPreInc,
00090 OpPreDec,
00091 OpAnd,
00092 OpOr,
00093 OpNot,
00094 };
00095
00097 class LgiClass GVariant
00098 {
00099 public:
00101 GVariantType Type;
00103 uint32 User;
00104
00106 union
00107 {
00109 int Int;
00111 bool Bool;
00113 int64 Int64;
00115 double Dbl;
00117 char *String;
00119 char16 *WString;
00121 GDom *Dom;
00123 void *Ptr;
00125 struct _Binary
00126 {
00127 int Length;
00128 void *Data;
00129 } Binary;
00131 List<GVariant> *Lst;
00133 GHashTable *Hash;
00135 GDateTime *Date;
00137 struct _Custom
00138 {
00139 GDom *Dom;
00140 char *Data;
00141
00142 bool operator == (_Custom &c)
00143 {
00144 return Dom == c.Dom &&
00145 Data == c.Data;
00146 }
00147 } Custom;
00149 struct _DomRef
00150 {
00152 GDom *Dom;
00154 char *Name;
00155 } DomRef;
00157 GOperator Op;
00159 class GSurface *Surface;
00161 class GView *View;
00163 class GMouse *Mouse;
00165 class GKey *Key;
00166 } Value;
00167
00169 GVariant();
00171 GVariant(int i);
00173 GVariant(int64 i);
00175 GVariant(double i);
00177 GVariant(const char *s);
00179 GVariant(const char16 *s);
00181 GVariant(void *p);
00183 GVariant(GDom *p);
00185 GVariant(GDom *p, char *name);
00187 GVariant(GDateTime *d);
00189 GVariant(GVariant const &v);
00191 GVariant(GOperator Op);
00193 ~GVariant();
00194
00196 GVariant &operator =(int i);
00198 GVariant &operator =(bool i);
00200 GVariant &operator =(int64 i);
00202 GVariant &operator =(double i);
00204 GVariant &operator =(const char *s);
00206 GVariant &operator =(const char16 *s);
00208 GVariant &operator =(GVariant const &i);
00210 GVariant &operator =(void *p);
00212 GVariant &operator =(GDom *p);
00214 GVariant &operator =(GDateTime *d);
00215
00216 GVariant &operator =(class GView *p);
00217 GVariant &operator =(class GMouse *p);
00218 GVariant &operator =(class GKey *k);
00219
00220 bool operator ==(GVariant &v);
00221
00223 bool SetDomRef(GDom *obj, char *name);
00225 bool SetBinary(int Len, void *Data, bool Own = false);
00227 bool SetList(List<GVariant> *Lst = 0);
00229 bool SetHashTable(GHashTable *Table = 0, bool Copy = true);
00230
00232 char *Str();
00234 char16 *WStr();
00237 char *ReleaseStr();
00240 char16 *ReleaseWStr();
00242 void OwnStr(char *s);
00244 void OwnStr(char16 *s);
00246 void Empty();
00247
00249 bool IsInt();
00251 bool IsBool();
00253 bool IsDouble();
00255 bool IsString();
00257 bool IsBinary();
00259 bool IsNull();
00260
00263 GVariant &Cast(GVariantType NewType);
00266 int32 CastInt32();
00269 int64 CastInt64();
00272 double CastDouble();
00276 char *CastString();
00278 GDom *CastDom();
00280 bool CastBool();
00282 void *CastVoidPtr();
00283 };
00284
00285 #endif