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