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