VTK
vtkVariantCast.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkVariantCast.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 
38 #ifndef vtkVariantCast_h
39 #define vtkVariantCast_h
40 
41 #include "vtkUnicodeString.h"
42 #include <typeinfo> // for warnings
43 
44 template<typename T>
45 T vtkVariantCast(const vtkVariant& value, bool* valid = 0)
46 {
47  vtkGenericWarningMacro(
48  << "Cannot convert vtkVariant containing [" << value.GetTypeAsString() << "] "
49  << "to unsupported type [" << typeid(T).name() << "]. "
50  << "Create a vtkVariantCast<> specialization to eliminate this warning."
51  );
52 
53  if(valid)
54  *valid = false;
55 
56  static T dummy;
57  return dummy;
58 }
59 
60 template<>
61 inline char vtkVariantCast<char>(const vtkVariant& value, bool* valid)
62 {
63  return value.ToChar(valid);
64 }
65 
66 template<>
67 inline unsigned char vtkVariantCast<unsigned char>(const vtkVariant& value, bool* valid)
68 {
69  return value.ToUnsignedChar(valid);
70 }
71 
72 template<>
73 inline short vtkVariantCast<short>(const vtkVariant& value, bool* valid)
74 {
75  return value.ToShort(valid);
76 }
77 
78 template<>
79 inline unsigned short vtkVariantCast<unsigned short>(const vtkVariant& value, bool* valid)
80 {
81  return value.ToUnsignedShort(valid);
82 }
83 
84 template<>
85 inline int vtkVariantCast<int>(const vtkVariant& value, bool* valid)
86 {
87  return value.ToInt(valid);
88 }
89 
90 template<>
91 inline unsigned int vtkVariantCast<unsigned int>(const vtkVariant& value, bool* valid)
92 {
93  return value.ToUnsignedInt(valid);
94 }
95 
96 template<>
97 inline long vtkVariantCast<long>(const vtkVariant& value, bool* valid)
98 {
99  return value.ToLong(valid);
100 }
101 
102 template<>
103 inline unsigned long vtkVariantCast<unsigned long>(const vtkVariant& value, bool* valid)
104 {
105  return value.ToUnsignedLong(valid);
106 }
107 
108 #ifdef VTK_TYPE_USE___INT64
109 
110 template<>
111 inline __int64 vtkVariantCast<__int64>(const vtkVariant& value, bool* valid)
112 {
113  return value.To__Int64(valid);
114 }
115 
116 template<>
117 inline unsigned __int64 vtkVariantCast<unsigned __int64>(const vtkVariant& value, bool* valid)
118 {
119  return value.ToUnsigned__Int64(valid);
120 }
121 
122 #endif
123 
124 
125 #ifdef VTK_TYPE_USE_LONG_LONG
126 
127 template<>
128 inline long long vtkVariantCast<long long>(const vtkVariant& value, bool* valid)
129 {
130  return value.ToLongLong(valid);
131 }
132 
133 template<>
134 inline unsigned long long vtkVariantCast<unsigned long long>(const vtkVariant& value, bool* valid)
135 {
136  return value.ToUnsignedLongLong(valid);
137 }
138 
139 #endif
140 
141 template<>
142 inline float vtkVariantCast<float>(const vtkVariant& value, bool* valid)
143 {
144  return value.ToFloat(valid);
145 }
146 
147 template<>
148 inline double vtkVariantCast<double>(const vtkVariant& value, bool* valid)
149 {
150  return value.ToDouble(valid);
151 }
152 
153 template<>
155 {
156  if(valid)
157  *valid = true;
158 
159  return value.ToString();
160 }
161 
162 template<>
164 {
165  if(valid)
166  *valid = true;
167 
168  return value.ToUnicodeString();
169 }
170 
171 template<>
173 {
174  if(valid)
175  *valid = true;
176 
177  return value;
178 }
179 
180 #endif
181 
182 // VTK-HeaderTest-Exclude: vtkVariantCast.h
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:46
A atomic type representing the union of many types.
Definition: vtkVariant.h:78
T vtkVariantCast(const vtkVariant &value, bool *valid=0)
const char * GetTypeAsString() const
String class that stores Unicode text.