VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkVariantExtract.h 00005 00006 ------------------------------------------------------------------------- 00007 Copyright 2008 Sandia Corporation. 00008 Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, 00009 the U.S. Government retains certain rights in this software. 00010 ------------------------------------------------------------------------- 00011 00012 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00013 All rights reserved. 00014 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00015 00016 This software is distributed WITHOUT ANY WARRANTY; without even 00017 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00018 PURPOSE. See the above copyright notice for more information. 00019 00020 =========================================================================*/ 00021 00037 #ifndef __vtkVariantExtract_h 00038 #define __vtkVariantExtract_h 00039 00040 template<typename T> 00041 T vtkVariantExtract(const vtkVariant& value, bool& valid = 0) 00042 { 00043 vtkGenericWarningMacro( 00044 << "Cannot convert vtkVariant containing [" << value.GetTypeAsString() << "] " 00045 << "to unsupported type [" << typeid(T).name() << "]. " 00046 << "Create a vtkVariantExtract<> specialization to eliminate this warning." 00047 ); 00048 00049 valid = false; 00050 00051 static T dummy; 00052 return dummy; 00053 } 00054 00055 template<> 00056 inline char vtkVariantExtract<char>(const vtkVariant& value, bool& valid) 00057 { 00058 valid = value.IsChar(); 00059 return valid ? value.ToChar() : 0; 00060 } 00061 00062 template<> 00063 inline unsigned char vtkVariantExtract<unsigned char>(const vtkVariant& value, bool& valid) 00064 { 00065 valid = value.IsUnsignedChar(); 00066 return valid ? value.ToUnsignedChar() : 0; 00067 } 00068 00069 template<> 00070 inline short vtkVariantExtract<short>(const vtkVariant& value, bool& valid) 00071 { 00072 valid = value.IsShort(); 00073 return valid ? value.ToShort() : 0; 00074 } 00075 00076 template<> 00077 inline unsigned short vtkVariantExtract<unsigned short>(const vtkVariant& value, bool& valid) 00078 { 00079 valid = value.IsUnsignedShort(); 00080 return valid ? value.ToUnsignedShort() : 0; 00081 } 00082 00083 template<> 00084 inline int vtkVariantExtract<int>(const vtkVariant& value, bool& valid) 00085 { 00086 valid = value.IsInt(); 00087 return valid ? value.ToInt() : 0; 00088 } 00089 00090 template<> 00091 inline unsigned int vtkVariantExtract<unsigned int>(const vtkVariant& value, bool& valid) 00092 { 00093 valid = value.IsUnsignedInt(); 00094 return valid ? value.ToUnsignedInt() : 0; 00095 } 00096 00097 template<> 00098 inline long vtkVariantExtract<long>(const vtkVariant& value, bool& valid) 00099 { 00100 valid = value.IsLong(); 00101 return valid ? value.ToLong() : 0; 00102 } 00103 00104 template<> 00105 inline unsigned long vtkVariantExtract<unsigned long>(const vtkVariant& value, bool& valid) 00106 { 00107 valid = value.IsUnsignedLong(); 00108 return valid ? value.ToUnsignedLong() : 0; 00109 } 00110 00111 #ifdef VTK_TYPE_USE___INT64 00112 00113 template<> 00114 inline __int64 vtkVariantExtract<__int64>(const vtkVariant& value, bool& valid) 00115 { 00116 valid = value.Is__Int64(); 00117 return valid ? value.To__Int64() : 0; 00118 } 00119 00120 template<> 00121 inline unsigned __int64 vtkVariantExtract<unsigned __int64>(const vtkVariant& value, bool& valid) 00122 { 00123 valid = value.IsUnsigned__Int64(); 00124 return valid ? value.ToUnsigned__Int64() : 0; 00125 } 00126 00127 #endif 00128 00129 00130 #ifdef VTK_TYPE_USE_LONG_LONG 00131 00132 template<> 00133 inline long long vtkVariantExtract<long long>(const vtkVariant& value, bool& valid) 00134 { 00135 valid = value.IsLongLong(); 00136 return valid ? value.ToLongLong() : 0; 00137 } 00138 00139 template<> 00140 inline unsigned long long vtkVariantExtract<unsigned long long>(const vtkVariant& value, bool& valid) 00141 { 00142 valid = value.IsUnsignedLongLong(); 00143 return valid ? value.ToUnsignedLongLong() : 0; 00144 } 00145 00146 #endif 00147 00148 template<> 00149 inline float vtkVariantExtract<float>(const vtkVariant& value, bool& valid) 00150 { 00151 valid = value.IsFloat(); 00152 return valid ? value.ToFloat() : 0.0f; 00153 } 00154 00155 template<> 00156 inline double vtkVariantExtract<double>(const vtkVariant& value, bool& valid) 00157 { 00158 valid = value.IsDouble(); 00159 return valid ? value.ToDouble() : 0.0; 00160 } 00161 00162 template<> 00163 inline vtkStdString vtkVariantExtract<vtkStdString>(const vtkVariant& value, bool& valid) 00164 { 00165 valid = value.IsString(); 00166 return valid ? value.ToString() : vtkStdString(); 00167 } 00168 00169 template<> 00170 inline vtkUnicodeString vtkVariantExtract<vtkUnicodeString>(const vtkVariant& value, bool& valid) 00171 { 00172 valid = value.IsUnicodeString(); 00173 return valid ? value.ToUnicodeString() : vtkUnicodeString(); 00174 } 00175 00176 template<> 00177 inline vtkVariant vtkVariantExtract<vtkVariant>(const vtkVariant& value, bool& valid) 00178 { 00179 valid = true; 00180 return value; 00181 } 00182 00183 #endif 00184