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 
37 #ifndef __vtkVariantExtract_h
38 #define __vtkVariantExtract_h
39 
40 template<typename T>
41 T vtkVariantExtract(const vtkVariant& value, bool& valid = 0)
42 {
43  vtkGenericWarningMacro(
44  << "Cannot convert vtkVariant containing [" << value.GetTypeAsString() << "] "
45  << "to unsupported type [" << typeid(T).name() << "]. "
46  << "Create a vtkVariantExtract<> specialization to eliminate this warning."
47  );
48 
49  valid = false;
50 
51  static T dummy;
52  return dummy;
53 }
54 
55 template<>
56 inline char vtkVariantExtract<char>(const vtkVariant& value, bool& valid)
57 {
58  valid = value.IsChar();
59  return valid ? value.ToChar() : 0;
60 }
61 
62 template<>
63 inline unsigned char vtkVariantExtract<unsigned char>(const vtkVariant& value, bool& valid)
64 {
65  valid = value.IsUnsignedChar();
66  return valid ? value.ToUnsignedChar() : 0;
67 }
68 
69 template<>
70 inline short vtkVariantExtract<short>(const vtkVariant& value, bool& valid)
71 {
72  valid = value.IsShort();
73  return valid ? value.ToShort() : 0;
74 }
75 
76 template<>
77 inline unsigned short vtkVariantExtract<unsigned short>(const vtkVariant& value, bool& valid)
78 {
79  valid = value.IsUnsignedShort();
80  return valid ? value.ToUnsignedShort() : 0;
81 }
82 
83 template<>
84 inline int vtkVariantExtract<int>(const vtkVariant& value, bool& valid)
85 {
86  valid = value.IsInt();
87  return valid ? value.ToInt() : 0;
88 }
89 
90 template<>
91 inline unsigned int vtkVariantExtract<unsigned int>(const vtkVariant& value, bool& valid)
92 {
93  valid = value.IsUnsignedInt();
94  return valid ? value.ToUnsignedInt() : 0;
95 }
96 
97 template<>
98 inline long vtkVariantExtract<long>(const vtkVariant& value, bool& valid)
99 {
100  valid = value.IsLong();
101  return valid ? value.ToLong() : 0;
102 }
103 
104 template<>
105 inline unsigned long vtkVariantExtract<unsigned long>(const vtkVariant& value, bool& valid)
106 {
107  valid = value.IsUnsignedLong();
108  return valid ? value.ToUnsignedLong() : 0;
109 }
110 
111 #ifdef VTK_TYPE_USE___INT64
112 
113 template<>
114 inline __int64 vtkVariantExtract<__int64>(const vtkVariant& value, bool& valid)
115 {
116  valid = value.Is__Int64();
117  return valid ? value.To__Int64() : 0;
118 }
119 
120 template<>
121 inline unsigned __int64 vtkVariantExtract<unsigned __int64>(const vtkVariant& value, bool& valid)
122 {
123  valid = value.IsUnsigned__Int64();
124  return valid ? value.ToUnsigned__Int64() : 0;
125 }
126 
127 #endif
128 
129 
130 #ifdef VTK_TYPE_USE_LONG_LONG
131 
132 template<>
133 inline long long vtkVariantExtract<long long>(const vtkVariant& value, bool& valid)
134 {
135  valid = value.IsLongLong();
136  return valid ? value.ToLongLong() : 0;
137 }
138 
139 template<>
140 inline unsigned long long vtkVariantExtract<unsigned long long>(const vtkVariant& value, bool& valid)
141 {
142  valid = value.IsUnsignedLongLong();
143  return valid ? value.ToUnsignedLongLong() : 0;
144 }
145 
146 #endif
147 
148 template<>
149 inline float vtkVariantExtract<float>(const vtkVariant& value, bool& valid)
150 {
151  valid = value.IsFloat();
152  return valid ? value.ToFloat() : 0.0f;
153 }
154 
155 template<>
156 inline double vtkVariantExtract<double>(const vtkVariant& value, bool& valid)
157 {
158  valid = value.IsDouble();
159  return valid ? value.ToDouble() : 0.0;
160 }
161 
162 template<>
164 {
165  valid = value.IsString();
166  return valid ? value.ToString() : vtkStdString();
167 }
168 
169 template<>
171 {
172  valid = value.IsUnicodeString();
173  return valid ? value.ToUnicodeString() : vtkUnicodeString();
174 }
175 
176 template<>
178 {
179  valid = true;
180  return value;
181 }
182 
183 #endif
184 
185 // VTK-HeaderTest-Exclude: vtkVariantExtract.h