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