00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00033 #ifndef __vtkVariant_h
00034 #define __vtkVariant_h
00035
00036 #include "vtkType.h"
00037 #include "vtkSystemIncludes.h"
00038 #include "vtkSetGet.h"
00039 #include "vtkStdString.h"
00040 #include "vtkUnicodeString.h"
00041
00042
00043
00044
00045
00046
00047 #define vtkExtraExtendedTemplateMacro(call) \
00048 vtkExtendedTemplateMacro(call); \
00049 vtkTemplateMacroCase(VTK_VARIANT, vtkVariant, call)
00050
00051
00052 #define vtkExtendedArrayIteratorTemplateMacro(call) \
00053 vtkArrayIteratorTemplateMacro(call); \
00054 vtkArrayIteratorTemplateMacroCase(VTK_VARIANT, vtkVariant, call);
00055
00056 class vtkStdString;
00057 class vtkUnicodeString;
00058 class vtkObjectBase;
00059 class vtkAbstractArray;
00060 class vtkVariant;
00061 struct vtkVariantLessThan;
00062
00063 VTK_COMMON_EXPORT ostream& operator << ( ostream& os, const vtkVariant& val );
00064
00065
00066 class VTK_COMMON_EXPORT vtkVariant
00067 {
00068 public:
00069
00071 vtkVariant();
00072
00074 ~vtkVariant();
00075
00077 vtkVariant(const vtkVariant & other);
00078
00080 vtkVariant(bool value);
00081
00083 vtkVariant(char value);
00084
00086 vtkVariant(unsigned char value);
00087
00089 vtkVariant(signed char value);
00090
00092 vtkVariant(short value);
00093
00095 vtkVariant(unsigned short value);
00096
00098 vtkVariant(int value);
00099
00101 vtkVariant(unsigned int value);
00102
00104 vtkVariant(long value);
00105
00107 vtkVariant(unsigned long value);
00108
00109 #if defined(VTK_TYPE_USE___INT64)
00110
00111 vtkVariant(__int64 value);
00112
00114 vtkVariant(unsigned __int64 value);
00115 #endif
00116 #if defined(VTK_TYPE_USE_LONG_LONG)
00117
00118 vtkVariant(long long value);
00119
00121 vtkVariant(unsigned long long value);
00122 #endif
00123
00125 vtkVariant(float value);
00126
00128 vtkVariant(double value);
00129
00131 vtkVariant(const char* value);
00132
00134 vtkVariant(vtkStdString value);
00135
00137 vtkVariant(const vtkUnicodeString& value);
00138
00140 vtkVariant(vtkObjectBase* value);
00141
00143 const vtkVariant & operator= (const vtkVariant & other);
00144
00146 bool IsValid() const;
00147
00149 bool IsString() const;
00150
00152 bool IsUnicodeString() const;
00153
00155 bool IsNumeric() const;
00156
00158 bool IsFloat() const;
00159
00161 bool IsDouble() const;
00162
00164 bool IsChar() const;
00165
00167 bool IsUnsignedChar() const;
00168
00170 bool IsSignedChar() const;
00171
00173 bool IsShort() const;
00174
00176 bool IsUnsignedShort() const;
00177
00179 bool IsInt() const;
00180
00182 bool IsUnsignedInt() const;
00183
00185 bool IsLong() const;
00186
00188 bool IsUnsignedLong() const;
00189
00191 bool Is__Int64() const;
00192
00194 bool IsUnsigned__Int64() const;
00195
00197 bool IsLongLong() const;
00198
00200 bool IsUnsignedLongLong() const;
00201
00203 bool IsVTKObject() const;
00204
00207 bool IsArray() const;
00208
00210 unsigned int GetType() const;
00211
00213 const char* GetTypeAsString() const;
00214
00216 vtkStdString ToString() const;
00217
00219 vtkUnicodeString ToUnicodeString() const;
00220
00222
00228 float ToFloat(bool* valid = 0) const;
00229 double ToDouble(bool* valid = 0) const;
00230 char ToChar(bool* valid = 0) const;
00231 unsigned char ToUnsignedChar(bool* valid = 0) const;
00232 signed char ToSignedChar(bool* valid = 0) const;
00233 short ToShort(bool* valid = 0) const;
00234 unsigned short ToUnsignedShort(bool* valid = 0) const;
00235 int ToInt(bool* valid = 0) const;
00236 unsigned int ToUnsignedInt(bool* valid = 0) const;
00237 long ToLong(bool* valid = 0) const;
00238 unsigned long ToUnsignedLong(bool* valid = 0) const;
00239 #if defined(VTK_TYPE_USE___INT64)
00240 __int64 To__Int64(bool* valid = 0) const;
00241 unsigned __int64 ToUnsigned__Int64(bool* valid = 0) const;
00243 #endif
00244 #if defined(VTK_TYPE_USE_LONG_LONG)
00245 long long ToLongLong(bool* valid = 0) const;
00246 unsigned long long ToUnsignedLongLong(bool* valid = 0) const;
00247 #endif
00248 vtkTypeInt64 ToTypeInt64(bool* valid = 0) const;
00249 vtkTypeUInt64 ToTypeUInt64(bool* valid = 0) const;
00250
00252 vtkObjectBase* ToVTKObject() const;
00253
00255 vtkAbstractArray* ToArray() const;
00256
00257 template <typename T>
00258 T ToNumeric(bool* valid, T* vtkNotUsed(ignored)) const;
00259
00266 bool IsEqual(const vtkVariant& other) const;
00267
00269
00289 bool operator==(const vtkVariant &other) const;
00290 bool operator!=(const vtkVariant &other) const;
00291 bool operator<(const vtkVariant &other) const;
00292 bool operator>(const vtkVariant &other) const;
00293 bool operator<=(const vtkVariant &other) const;
00294 bool operator>=(const vtkVariant &other) const;
00296
00297 friend VTK_COMMON_EXPORT ostream& operator << ( ostream& os, const vtkVariant& val );
00298
00299
00300 private:
00301 union
00302 {
00303 vtkStdString* String;
00304 vtkUnicodeString* UnicodeString;
00305 float Float;
00306 double Double;
00307 char Char;
00308 unsigned char UnsignedChar;
00309 signed char SignedChar;
00310 short Short;
00311 unsigned short UnsignedShort;
00312 int Int;
00313 unsigned int UnsignedInt;
00314 long Long;
00315 unsigned long UnsignedLong;
00316 #if defined(VTK_TYPE_USE___INT64)
00317 __int64 __Int64;
00318 unsigned __int64 Unsigned__Int64;
00319 #endif
00320 #if defined(VTK_TYPE_USE_LONG_LONG)
00321 long long LongLong;
00322 unsigned long long UnsignedLongLong;
00323 #endif
00324 vtkObjectBase* VTKObject;
00325 } Data;
00326
00327 unsigned char Valid;
00328 unsigned char Type;
00329
00330 friend struct vtkVariantLessThan;
00331 friend struct vtkVariantEqual;
00332 friend struct vtkVariantStrictWeakOrder;
00333 friend struct vtkVariantStrictEquality;
00334 };
00335
00336 #include "vtkVariantInlineOperators.h"
00337
00338
00339
00340
00341
00342
00343
00344 struct VTK_COMMON_EXPORT vtkVariantLessThan
00345 {
00346 public:
00347 bool operator()(const vtkVariant &s1, const vtkVariant &s2) const;
00348 };
00349
00350 struct VTK_COMMON_EXPORT vtkVariantEqual
00351 {
00352 public:
00353 bool operator()(const vtkVariant &s1, const vtkVariant &s2) const;
00354 };
00355
00356 struct VTK_COMMON_EXPORT vtkVariantStrictWeakOrder
00357 {
00358 public:
00359 bool operator()(const vtkVariant& s1, const vtkVariant& s2) const;
00360 };
00361
00362
00363
00364
00365 struct VTK_COMMON_EXPORT vtkVariantStrictEquality
00366 {
00367 public:
00368 bool operator()(const vtkVariant &s1, const vtkVariant &s2) const;
00369 };
00370
00371 #endif