00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __vtkVariantCast_h
00023 #define __vtkVariantCast_h
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 template<typename T>
00037 T vtkVariantCast(const vtkVariant& value, bool* valid = 0)
00038 {
00039 vtkGenericWarningMacro(<< "cannot cast vtkVariant containing " << value.GetTypeAsString() << " to unsupported type.");
00040
00041 if(valid)
00042 *valid = false;
00043
00044 static T dummy;
00045 return dummy;
00046 }
00047
00048 template<>
00049 inline char vtkVariantCast<char>(const vtkVariant& value, bool* valid)
00050 {
00051 return value.ToChar(valid);
00052 }
00053
00054 template<>
00055 inline unsigned char vtkVariantCast<unsigned char>(const vtkVariant& value, bool* valid)
00056 {
00057 return value.ToUnsignedChar(valid);
00058 }
00059
00060 template<>
00061 inline short vtkVariantCast<short>(const vtkVariant& value, bool* valid)
00062 {
00063 return value.ToShort(valid);
00064 }
00065
00066 template<>
00067 inline unsigned short vtkVariantCast<unsigned short>(const vtkVariant& value, bool* valid)
00068 {
00069 return value.ToUnsignedShort(valid);
00070 }
00071
00072 template<>
00073 inline int vtkVariantCast<int>(const vtkVariant& value, bool* valid)
00074 {
00075 return value.ToInt(valid);
00076 }
00077
00078 template<>
00079 inline unsigned int vtkVariantCast<unsigned int>(const vtkVariant& value, bool* valid)
00080 {
00081 return value.ToUnsignedInt(valid);
00082 }
00083
00084 template<>
00085 inline long vtkVariantCast<long>(const vtkVariant& value, bool* valid)
00086 {
00087 return value.ToLong(valid);
00088 }
00089
00090 template<>
00091 inline unsigned long vtkVariantCast<unsigned long>(const vtkVariant& value, bool* valid)
00092 {
00093 return value.ToUnsignedLong(valid);
00094 }
00095
00096 #ifdef VTK_TYPE_USE___INT64
00097
00098 template<>
00099 inline __int64 vtkVariantCast<__int64>(const vtkVariant& value, bool* valid)
00100 {
00101 return value.To__Int64(valid);
00102 }
00103
00104 template<>
00105 inline unsigned __int64 vtkVariantCast<unsigned __int64>(const vtkVariant& value, bool* valid)
00106 {
00107 return value.ToUnsigned__Int64(valid);
00108 }
00109
00110 #endif
00111
00112
00113 #ifdef VTK_TYPE_USE_LONG_LONG
00114
00115 template<>
00116 inline long long vtkVariantCast<long long>(const vtkVariant& value, bool* valid)
00117 {
00118 return value.ToLongLong(valid);
00119 }
00120
00121 template<>
00122 inline unsigned long long vtkVariantCast<unsigned long long>(const vtkVariant& value, bool* valid)
00123 {
00124 return value.ToUnsignedLongLong(valid);
00125 }
00126
00127 #endif
00128
00129 template<>
00130 inline float vtkVariantCast<float>(const vtkVariant& value, bool* valid)
00131 {
00132 return value.ToFloat(valid);
00133 }
00134
00135 template<>
00136 inline double vtkVariantCast<double>(const vtkVariant& value, bool* valid)
00137 {
00138 return value.ToDouble(valid);
00139 }
00140
00141 template<>
00142 inline vtkStdString vtkVariantCast<vtkStdString>(const vtkVariant& value, bool* valid)
00143 {
00144 if(valid)
00145 *valid = true;
00146
00147 return value.ToString();
00148 }
00149
00150 template<>
00151 inline vtkVariant vtkVariantCast<vtkVariant>(const vtkVariant& value, bool* valid)
00152 {
00153 if(valid)
00154 *valid = true;
00155
00156 return value;
00157 }
00158
00159 #endif
00160