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