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 
22 #ifndef __vtkVariantCast_h
23 #define __vtkVariantCast_h
24 
25 #include <vtkUnicodeString.h>
26 
27 // .SECTION Thanks
28 // Developed by Timothy M. Shead (tshead@sandia.gov) at Sandia National Laboratories.
29 
30 // Description:
31 // Converts a vtkVariant to some other type. Wherever possible, implicit conversions are
32 // performed, so this method can be used to convert from nearly any type to a string, or
33 // from a string to nearly any type. Note that some conversions may fail at runtime, such
34 // as a conversion from the string "abc" to a numeric type.
35 //
36 // The optional 'valid' flag can be used by callers to verify whether conversion succeeded.
37 template<typename T>
38 T vtkVariantCast(const vtkVariant& value, bool* valid = 0)
39 {
40  vtkGenericWarningMacro(
41  << "Cannot convert vtkVariant containing [" << value.GetTypeAsString() << "] "
42  << "to unsupported type [" << typeid(T).name() << "]. "
43  << "Create a vtkVariantCast<> specialization to eliminate this warning."
44  );
45 
46  if(valid)
47  *valid = false;
48 
49  static T dummy;
50  return dummy;
51 }
52 
53 template<>
54 inline char vtkVariantCast<char>(const vtkVariant& value, bool* valid)
55 {
56  return value.ToChar(valid);
57 }
58 
59 template<>
60 inline unsigned char vtkVariantCast<unsigned char>(const vtkVariant& value, bool* valid)
61 {
62  return value.ToUnsignedChar(valid);
63 }
64 
65 template<>
66 inline short vtkVariantCast<short>(const vtkVariant& value, bool* valid)
67 {
68  return value.ToShort(valid);
69 }
70 
71 template<>
72 inline unsigned short vtkVariantCast<unsigned short>(const vtkVariant& value, bool* valid)
73 {
74  return value.ToUnsignedShort(valid);
75 }
76 
77 template<>
78 inline int vtkVariantCast<int>(const vtkVariant& value, bool* valid)
79 {
80  return value.ToInt(valid);
81 }
82 
83 template<>
84 inline unsigned int vtkVariantCast<unsigned int>(const vtkVariant& value, bool* valid)
85 {
86  return value.ToUnsignedInt(valid);
87 }
88 
89 template<>
90 inline long vtkVariantCast<long>(const vtkVariant& value, bool* valid)
91 {
92  return value.ToLong(valid);
93 }
94 
95 template<>
96 inline unsigned long vtkVariantCast<unsigned long>(const vtkVariant& value, bool* valid)
97 {
98  return value.ToUnsignedLong(valid);
99 }
100 
101 #ifdef VTK_TYPE_USE___INT64
102 
103 template<>
104 inline __int64 vtkVariantCast<__int64>(const vtkVariant& value, bool* valid)
105 {
106  return value.To__Int64(valid);
107 }
108 
109 template<>
110 inline unsigned __int64 vtkVariantCast<unsigned __int64>(const vtkVariant& value, bool* valid)
111 {
112  return value.ToUnsigned__Int64(valid);
113 }
114 
115 #endif
116 
117 
118 #ifdef VTK_TYPE_USE_LONG_LONG
119 
120 template<>
121 inline long long vtkVariantCast<long long>(const vtkVariant& value, bool* valid)
122 {
123  return value.ToLongLong(valid);
124 }
125 
126 template<>
127 inline unsigned long long vtkVariantCast<unsigned long long>(const vtkVariant& value, bool* valid)
128 {
129  return value.ToUnsignedLongLong(valid);
130 }
131 
132 #endif
133 
134 template<>
135 inline float vtkVariantCast<float>(const vtkVariant& value, bool* valid)
136 {
137  return value.ToFloat(valid);
138 }
139 
140 template<>
141 inline double vtkVariantCast<double>(const vtkVariant& value, bool* valid)
142 {
143  return value.ToDouble(valid);
144 }
145 
146 template<>
147 inline vtkStdString vtkVariantCast<vtkStdString>(const vtkVariant& value, bool* valid)
148 {
149  if(valid)
150  *valid = true;
151 
152  return value.ToString();
153 }
154 
155 template<>
157 {
158  if(valid)
159  *valid = true;
160 
161  return value.ToUnicodeString();
162 }
163 
164 template<>
165 inline vtkVariant vtkVariantCast<vtkVariant>(const vtkVariant& value, bool* valid)
166 {
167  if(valid)
168  *valid = true;
169 
170  return value;
171 }
172 
173 #endif
174 
Wrapper around vtkstd::string to keep symbols short.
Definition: vtkStdString.h:45
vtkUnicodeString vtkVariantCast< vtkUnicodeString >(const vtkVariant &value, bool *valid)
unsigned long vtkVariantCast< unsigned long >(const vtkVariant &value, bool *valid)
A atomic type representing the union of many types.
Definition: vtkVariant.h:72
int vtkVariantCast< int >(const vtkVariant &value, bool *valid)
short vtkVariantCast< short >(const vtkVariant &value, bool *valid)
T vtkVariantCast(const vtkVariant &value, bool *valid=0)
unsigned short vtkVariantCast< unsigned short >(const vtkVariant &value, bool *valid)
float vtkVariantCast< float >(const vtkVariant &value, bool *valid)
char vtkVariantCast< char >(const vtkVariant &value, bool *valid)
vtkVariant vtkVariantCast< vtkVariant >(const vtkVariant &value, bool *valid)
long vtkVariantCast< long >(const vtkVariant &value, bool *valid)
unsigned int vtkVariantCast< unsigned int >(const vtkVariant &value, bool *valid)
double vtkVariantCast< double >(const vtkVariant &value, bool *valid)
const char * GetTypeAsString() const
String class that stores Unicode text.
unsigned char vtkVariantCast< unsigned char >(const vtkVariant &value, bool *valid)
vtkStdString vtkVariantCast< vtkStdString >(const vtkVariant &value, bool *valid)