VTK
dox/Common/vtkVariantExtract.h
Go to the documentation of this file.
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