You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
4.4 KiB
C++
163 lines
4.4 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkVariantExtract.h
|
|
|
|
-------------------------------------------------------------------------
|
|
Copyright 2008 Sandia Corporation.
|
|
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
|
|
the U.S. Government retains certain rights in this software.
|
|
-------------------------------------------------------------------------
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
|
|
/**
|
|
* @class vtkVariantExtract
|
|
*
|
|
* Performs an explicit conversion from a vtkVariant to the type that it contains. Implicit
|
|
* conversions are *not* performed, so casting a vtkVariant containing one type (e.g. double)
|
|
* to a different type (e.g. string) will not convert between types.
|
|
*
|
|
* Callers should use the 'valid' flag to verify whether the extraction succeeded.
|
|
*
|
|
* @par Thanks:
|
|
* Developed by Timothy M. Shead (tshead@sandia.gov) at Sandia National Laboratories.
|
|
*/
|
|
|
|
#ifndef vtkVariantExtract_h
|
|
#define vtkVariantExtract_h
|
|
|
|
#include <typeinfo> // for typeid
|
|
|
|
template <typename T>
|
|
T vtkVariantExtract(const vtkVariant& value, bool& valid)
|
|
{
|
|
vtkGenericWarningMacro(
|
|
<< "Cannot convert vtkVariant containing [" << value.GetTypeAsString() << "] "
|
|
<< "to unsupported type [" << typeid(T).name() << "]. "
|
|
<< "Create a vtkVariantExtract<> specialization to eliminate this warning.");
|
|
|
|
valid = false;
|
|
|
|
static T dummy;
|
|
return dummy;
|
|
}
|
|
|
|
template <>
|
|
inline char vtkVariantExtract<char>(const vtkVariant& value, bool& valid)
|
|
{
|
|
valid = value.IsChar();
|
|
return valid ? value.ToChar() : 0;
|
|
}
|
|
|
|
template <>
|
|
inline unsigned char vtkVariantExtract<unsigned char>(const vtkVariant& value, bool& valid)
|
|
{
|
|
valid = value.IsUnsignedChar();
|
|
return valid ? value.ToUnsignedChar() : 0;
|
|
}
|
|
|
|
template <>
|
|
inline short vtkVariantExtract<short>(const vtkVariant& value, bool& valid)
|
|
{
|
|
valid = value.IsShort();
|
|
return valid ? value.ToShort() : 0;
|
|
}
|
|
|
|
template <>
|
|
inline unsigned short vtkVariantExtract<unsigned short>(const vtkVariant& value, bool& valid)
|
|
{
|
|
valid = value.IsUnsignedShort();
|
|
return valid ? value.ToUnsignedShort() : 0;
|
|
}
|
|
|
|
template <>
|
|
inline int vtkVariantExtract<int>(const vtkVariant& value, bool& valid)
|
|
{
|
|
valid = value.IsInt();
|
|
return valid ? value.ToInt() : 0;
|
|
}
|
|
|
|
template <>
|
|
inline unsigned int vtkVariantExtract<unsigned int>(const vtkVariant& value, bool& valid)
|
|
{
|
|
valid = value.IsUnsignedInt();
|
|
return valid ? value.ToUnsignedInt() : 0;
|
|
}
|
|
|
|
template <>
|
|
inline long vtkVariantExtract<long>(const vtkVariant& value, bool& valid)
|
|
{
|
|
valid = value.IsLong();
|
|
return valid ? value.ToLong() : 0;
|
|
}
|
|
|
|
template <>
|
|
inline unsigned long vtkVariantExtract<unsigned long>(const vtkVariant& value, bool& valid)
|
|
{
|
|
valid = value.IsUnsignedLong();
|
|
return valid ? value.ToUnsignedLong() : 0;
|
|
}
|
|
|
|
template <>
|
|
inline long long vtkVariantExtract<long long>(const vtkVariant& value, bool& valid)
|
|
{
|
|
valid = value.IsLongLong();
|
|
return valid ? value.ToLongLong() : 0;
|
|
}
|
|
|
|
template <>
|
|
inline unsigned long long vtkVariantExtract<unsigned long long>(
|
|
const vtkVariant& value, bool& valid)
|
|
{
|
|
valid = value.IsUnsignedLongLong();
|
|
return valid ? value.ToUnsignedLongLong() : 0;
|
|
}
|
|
|
|
template <>
|
|
inline float vtkVariantExtract<float>(const vtkVariant& value, bool& valid)
|
|
{
|
|
valid = value.IsFloat();
|
|
return valid ? value.ToFloat() : 0.0f;
|
|
}
|
|
|
|
template <>
|
|
inline double vtkVariantExtract<double>(const vtkVariant& value, bool& valid)
|
|
{
|
|
valid = value.IsDouble();
|
|
return valid ? value.ToDouble() : 0.0;
|
|
}
|
|
|
|
template <>
|
|
inline vtkStdString vtkVariantExtract<vtkStdString>(const vtkVariant& value, bool& valid)
|
|
{
|
|
valid = value.IsString();
|
|
return valid ? value.ToString() : vtkStdString();
|
|
}
|
|
|
|
template <>
|
|
inline vtkUnicodeString vtkVariantExtract<vtkUnicodeString>(const vtkVariant& value, bool& valid)
|
|
{
|
|
valid = value.IsUnicodeString();
|
|
return valid ? value.ToUnicodeString() : vtkUnicodeString();
|
|
}
|
|
|
|
template <>
|
|
inline vtkVariant vtkVariantExtract<vtkVariant>(const vtkVariant& value, bool& valid)
|
|
{
|
|
valid = true;
|
|
return value;
|
|
}
|
|
|
|
#endif
|
|
|
|
// VTK-HeaderTest-Exclude: vtkVariantExtract.h
|