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