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(
00039 << "Cannot convert vtkVariant containing [" << value.GetTypeAsString() << "] "
00040 << "to unsupported type [" << typeid(T).name() << "]. "
00041 << "Create a vtkVariantExtract<> specialization to eliminate this warning."
00042 );
00043
00044 valid = false;
00045
00046 static T dummy;
00047 return dummy;
00048 }
00049
00050 template<>
00051 inline char vtkVariantExtract<char>(const vtkVariant& value, bool& valid)
00052 {
00053 valid = value.IsChar();
00054 return valid ? value.ToChar() : 0;
00055 }
00056
00057 template<>
00058 inline unsigned char vtkVariantExtract<unsigned char>(const vtkVariant& value, bool& valid)
00059 {
00060 valid = value.IsUnsignedChar();
00061 return valid ? value.ToUnsignedChar() : 0;
00062 }
00063
00064 template<>
00065 inline short vtkVariantExtract<short>(const vtkVariant& value, bool& valid)
00066 {
00067 valid = value.IsShort();
00068 return valid ? value.ToShort() : 0;
00069 }
00070
00071 template<>
00072 inline unsigned short vtkVariantExtract<unsigned short>(const vtkVariant& value, bool& valid)
00073 {
00074 valid = value.IsUnsignedShort();
00075 return valid ? value.ToUnsignedShort() : 0;
00076 }
00077
00078 template<>
00079 inline int vtkVariantExtract<int>(const vtkVariant& value, bool& valid)
00080 {
00081 valid = value.IsInt();
00082 return valid ? value.ToInt() : 0;
00083 }
00084
00085 template<>
00086 inline unsigned int vtkVariantExtract<unsigned int>(const vtkVariant& value, bool& valid)
00087 {
00088 valid = value.IsUnsignedInt();
00089 return valid ? value.ToUnsignedInt() : 0;
00090 }
00091
00092 template<>
00093 inline long vtkVariantExtract<long>(const vtkVariant& value, bool& valid)
00094 {
00095 valid = value.IsLong();
00096 return valid ? value.ToLong() : 0;
00097 }
00098
00099 template<>
00100 inline unsigned long vtkVariantExtract<unsigned long>(const vtkVariant& value, bool& valid)
00101 {
00102 valid = value.IsUnsignedLong();
00103 return valid ? value.ToUnsignedLong() : 0;
00104 }
00105
00106 #ifdef VTK_TYPE_USE___INT64
00107
00108 template<>
00109 inline __int64 vtkVariantExtract<__int64>(const vtkVariant& value, bool& valid)
00110 {
00111 valid = value.Is__Int64();
00112 return valid ? value.To__Int64() : 0;
00113 }
00114
00115 template<>
00116 inline unsigned __int64 vtkVariantExtract<unsigned __int64>(const vtkVariant& value, bool& valid)
00117 {
00118 valid = value.IsUnsigned__Int64();
00119 return valid ? value.ToUnsigned__Int64() : 0;
00120 }
00121
00122 #endif
00123
00124
00125 #ifdef VTK_TYPE_USE_LONG_LONG
00126
00127 template<>
00128 inline long long vtkVariantExtract<long long>(const vtkVariant& value, bool& valid)
00129 {
00130 valid = value.IsLongLong();
00131 return valid ? value.ToLongLong() : 0;
00132 }
00133
00134 template<>
00135 inline unsigned long long vtkVariantExtract<unsigned long long>(const vtkVariant& value, bool& valid)
00136 {
00137 valid = value.IsUnsignedLongLong();
00138 return valid ? value.ToUnsignedLongLong() : 0;
00139 }
00140
00141 #endif
00142
00143 template<>
00144 inline float vtkVariantExtract<float>(const vtkVariant& value, bool& valid)
00145 {
00146 valid = value.IsFloat();
00147 return valid ? value.ToFloat() : 0.0f;
00148 }
00149
00150 template<>
00151 inline double vtkVariantExtract<double>(const vtkVariant& value, bool& valid)
00152 {
00153 valid = value.IsDouble();
00154 return valid ? value.ToDouble() : 0.0;
00155 }
00156
00157 template<>
00158 inline vtkStdString vtkVariantExtract<vtkStdString>(const vtkVariant& value, bool& valid)
00159 {
00160 valid = value.IsString();
00161 return valid ? value.ToString() : vtkStdString();
00162 }
00163
00164 template<>
00165 inline vtkUnicodeString vtkVariantExtract<vtkUnicodeString>(const vtkVariant& value, bool& valid)
00166 {
00167 valid = value.IsUnicodeString();
00168 return valid ? value.ToUnicodeString() : vtkUnicodeString();
00169 }
00170
00171 template<>
00172 inline vtkVariant vtkVariantExtract<vtkVariant>(const vtkVariant& value, bool& valid)
00173 {
00174 valid = true;
00175 return value;
00176 }
00177
00178 #endif
00179