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