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