VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkVariantExtract.h,v $ 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 00022 #ifndef __vtkVariantExtract_h 00023 #define __vtkVariantExtract_h 00024 00025 00026 // .SECTION Thanks 00027 // Developed by Timothy M. Shead (tshead@sandia.gov) at Sandia National Laboratories. 00028 00029 // Description: 00030 // Performs an explicit conversion from a vtkVariant to the type that it contains. Implicit 00031 // conversions are *not* performed, so casting a vtkVariant containing one type (e.g. double) 00032 // to a different type (e.g. string) will not convert between types. 00033 // 00034 // Callers should use the 'valid' flag to verify whether the extraction succeeded. 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