• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

dox/Common/vtkVariantExtract.h

Go to the documentation of this file.
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 

Generated by  doxygen 1.7.1