VTK
vtkVariantExtract.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkVariantExtract.h
5 
6 -------------------------------------------------------------------------
7  Copyright 2008 Sandia Corporation.
8  Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9  the U.S. Government retains certain rights in this software.
10 -------------------------------------------------------------------------
11 
12  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
13  All rights reserved.
14  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
15 
16  This software is distributed WITHOUT ANY WARRANTY; without even
17  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
18  PURPOSE. See the above copyright notice for more information.
19 
20 =========================================================================*/
21 
22 #ifndef __vtkVariantExtract_h
23 #define __vtkVariantExtract_h
24 
25 
26 // .SECTION Thanks
27 // Developed by Timothy M. Shead (tshead@sandia.gov) at Sandia National Laboratories.
28 
29 // Description:
30 // Performs an explicit conversion from a vtkVariant to the type that it contains. Implicit
31 // conversions are *not* performed, so casting a vtkVariant containing one type (e.g. double)
32 // to a different type (e.g. string) will not convert between types.
33 //
34 // Callers should use the 'valid' flag to verify whether the extraction succeeded.
35 template<typename T>
36 T vtkVariantExtract(const vtkVariant& value, bool& valid = 0)
37 {
38  vtkGenericWarningMacro(
39  << "Cannot convert vtkVariant containing [" << value.GetTypeAsString() << "] "
40  << "to unsupported type [" << typeid(T).name() << "]. "
41  << "Create a vtkVariantExtract<> specialization to eliminate this warning."
42  );
43 
44  valid = false;
45 
46  static T dummy;
47  return dummy;
48 }
49 
50 template<>
51 inline char vtkVariantExtract<char>(const vtkVariant& value, bool& valid)
52 {
53  valid = value.IsChar();
54  return valid ? value.ToChar() : 0;
55 }
56 
57 template<>
58 inline unsigned char vtkVariantExtract<unsigned char>(const vtkVariant& value, bool& valid)
59 {
60  valid = value.IsUnsignedChar();
61  return valid ? value.ToUnsignedChar() : 0;
62 }
63 
64 template<>
65 inline short vtkVariantExtract<short>(const vtkVariant& value, bool& valid)
66 {
67  valid = value.IsShort();
68  return valid ? value.ToShort() : 0;
69 }
70 
71 template<>
72 inline unsigned short vtkVariantExtract<unsigned short>(const vtkVariant& value, bool& valid)
73 {
74  valid = value.IsUnsignedShort();
75  return valid ? value.ToUnsignedShort() : 0;
76 }
77 
78 template<>
79 inline int vtkVariantExtract<int>(const vtkVariant& value, bool& valid)
80 {
81  valid = value.IsInt();
82  return valid ? value.ToInt() : 0;
83 }
84 
85 template<>
86 inline unsigned int vtkVariantExtract<unsigned int>(const vtkVariant& value, bool& valid)
87 {
88  valid = value.IsUnsignedInt();
89  return valid ? value.ToUnsignedInt() : 0;
90 }
91 
92 template<>
93 inline long vtkVariantExtract<long>(const vtkVariant& value, bool& valid)
94 {
95  valid = value.IsLong();
96  return valid ? value.ToLong() : 0;
97 }
98 
99 template<>
100 inline unsigned long vtkVariantExtract<unsigned long>(const vtkVariant& value, bool& valid)
101 {
102  valid = value.IsUnsignedLong();
103  return valid ? value.ToUnsignedLong() : 0;
104 }
105 
106 #ifdef VTK_TYPE_USE___INT64
107 
108 template<>
109 inline __int64 vtkVariantExtract<__int64>(const vtkVariant& value, bool& valid)
110 {
111  valid = value.Is__Int64();
112  return valid ? value.To__Int64() : 0;
113 }
114 
115 template<>
116 inline unsigned __int64 vtkVariantExtract<unsigned __int64>(const vtkVariant& value, bool& valid)
117 {
118  valid = value.IsUnsigned__Int64();
119  return valid ? value.ToUnsigned__Int64() : 0;
120 }
121 
122 #endif
123 
124 
125 #ifdef VTK_TYPE_USE_LONG_LONG
126 
127 template<>
128 inline long long vtkVariantExtract<long long>(const vtkVariant& value, bool& valid)
129 {
130  valid = value.IsLongLong();
131  return valid ? value.ToLongLong() : 0;
132 }
133 
134 template<>
135 inline unsigned long long vtkVariantExtract<unsigned long long>(const vtkVariant& value, bool& valid)
136 {
137  valid = value.IsUnsignedLongLong();
138  return valid ? value.ToUnsignedLongLong() : 0;
139 }
140 
141 #endif
142 
143 template<>
144 inline float vtkVariantExtract<float>(const vtkVariant& value, bool& valid)
145 {
146  valid = value.IsFloat();
147  return valid ? value.ToFloat() : 0.0f;
148 }
149 
150 template<>
151 inline double vtkVariantExtract<double>(const vtkVariant& value, bool& valid)
152 {
153  valid = value.IsDouble();
154  return valid ? value.ToDouble() : 0.0;
155 }
156 
157 template<>
158 inline vtkStdString vtkVariantExtract<vtkStdString>(const vtkVariant& value, bool& valid)
159 {
160  valid = value.IsString();
161  return valid ? value.ToString() : vtkStdString();
162 }
163 
164 template<>
166 {
167  valid = value.IsUnicodeString();
168  return valid ? value.ToUnicodeString() : vtkUnicodeString();
169 }
170 
171 template<>
172 inline vtkVariant vtkVariantExtract<vtkVariant>(const vtkVariant& value, bool& valid)
173 {
174  valid = true;
175  return value;
176 }
177 
178 #endif
179 
unsigned long vtkVariantExtract< unsigned long >(const vtkVariant &value, bool &valid)
Wrapper around vtkstd::string to keep symbols short.
Definition: vtkStdString.h:45
float vtkVariantExtract< float >(const vtkVariant &value, bool &valid)
T vtkVariantExtract(const vtkVariant &value, bool &valid=0)
vtkUnicodeString vtkVariantExtract< vtkUnicodeString >(const vtkVariant &value, bool &valid)
unsigned short vtkVariantExtract< unsigned short >(const vtkVariant &value, bool &valid)
unsigned char vtkVariantExtract< unsigned char >(const vtkVariant &value, bool &valid)
char vtkVariantExtract< char >(const vtkVariant &value, bool &valid)
long vtkVariantExtract< long >(const vtkVariant &value, bool &valid)
unsigned int vtkVariantExtract< unsigned int >(const vtkVariant &value, bool &valid)
A atomic type representing the union of many types.
Definition: vtkVariant.h:72
int vtkVariantExtract< int >(const vtkVariant &value, bool &valid)
vtkVariant vtkVariantExtract< vtkVariant >(const vtkVariant &value, bool &valid)
double vtkVariantExtract< double >(const vtkVariant &value, bool &valid)
vtkStdString vtkVariantExtract< vtkStdString >(const vtkVariant &value, bool &valid)
const char * GetTypeAsString() const
String class that stores Unicode text.
short vtkVariantExtract< short >(const vtkVariant &value, bool &valid)