VTK  9.6.1
vtkVariant.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-FileCopyrightText: Copyright 2008 Sandia Corporation
3// SPDX-License-Identifier: LicenseRef-BSD-3-Clause-Sandia-USGov
18
19#ifndef vtkVariant_h
20#define vtkVariant_h
21
22#include "vtkCommonCoreModule.h" // For export macro
23#include "vtkObject.h" // For vtkObject's warning support
24#include "vtkSetGet.h" // For vtkNotUsed macro
25#include "vtkStdString.h"
26#include "vtkSystemIncludes.h" // To define ostream
27#include "vtkType.h" // To define type IDs and VTK_TYPE_USE_* flags
28
29//
30// The following should be eventually placed in vtkSetGet.h
31//
32
33// This is same as extended template macro with an additional case for VTK_VARIANT
34#define vtkExtraExtendedTemplateMacro(call) \
35 vtkExtendedTemplateMacro(call); \
36 vtkTemplateMacroCase(VTK_VARIANT, vtkVariant, call)
37
38// This is same as Iterator Template macro with an additional case for VTK_VARIANT
39#define vtkExtendedArrayIteratorTemplateMacro(call) \
40 vtkArrayIteratorTemplateMacro(call); \
41 vtkArrayIteratorTemplateMacroCase(VTK_VARIANT, vtkVariant, call)
42
43VTK_ABI_NAMESPACE_BEGIN
44class vtkStdString;
45class vtkObjectBase;
47class vtkVariant;
49
50VTKCOMMONCORE_EXPORT ostream& operator<<(ostream& os, const vtkVariant& val);
51
52class VTKCOMMONCORE_EXPORT vtkVariant
53{
54public:
59
66
70 vtkVariant(const vtkVariant& other);
71
76 vtkVariant(bool value);
77
81 vtkVariant(char value);
82
87 vtkVariant(unsigned char value);
88
92 vtkVariant(signed char value);
93
97 vtkVariant(short value);
98
103 vtkVariant(unsigned short value);
104
108 vtkVariant(int value);
109
114 vtkVariant(unsigned int value);
115
119 vtkVariant(long value);
120
125 vtkVariant(unsigned long value);
126
130 vtkVariant(long long value);
131
136 vtkVariant(unsigned long long value);
137
141 vtkVariant(float value);
142
146 vtkVariant(double value);
147
153 vtkVariant(const char* value);
154
160
167
174 vtkVariant(const vtkVariant& other, unsigned int type);
175
180
185 bool IsValid() const;
186
190 bool IsString() const;
191
195 bool IsNumeric() const;
196
200 bool IsFloat() const;
201
205 bool IsDouble() const;
206
210 bool IsChar() const;
211
215 bool IsUnsignedChar() const;
216
220 bool IsSignedChar() const;
221
225 bool IsShort() const;
226
230 bool IsUnsignedShort() const;
231
235 bool IsInt() const;
236
240 bool IsUnsignedInt() const;
241
245 bool IsLong() const;
246
250 bool IsUnsignedLong() const;
251
255 bool IsLongLong() const;
256
260 bool IsUnsignedLongLong() const;
261
265 bool IsVTKObject() const;
266
270 bool IsArray() const;
271
275 unsigned int GetType() const;
276
280 const char* GetTypeAsString() const;
281
288
297 vtkStdString ToString(int formatting = DEFAULT_FORMATTING, int precision = 6) const;
298
300
309 float ToFloat(bool* valid) const;
310 float ToFloat() const { return this->ToFloat(nullptr); }
311 double ToDouble(bool* valid) const;
312 double ToDouble() const { return this->ToDouble(nullptr); }
313 char ToChar(bool* valid) const;
314 char ToChar() const { return this->ToChar(nullptr); }
315 unsigned char ToUnsignedChar(bool* valid) const;
316 unsigned char ToUnsignedChar() const { return this->ToUnsignedChar(nullptr); }
317 signed char ToSignedChar(bool* valid) const;
318 signed char ToSignedChar() const { return this->ToSignedChar(nullptr); }
319 short ToShort(bool* valid) const;
320 short ToShort() const { return this->ToShort(nullptr); }
321 unsigned short ToUnsignedShort(bool* valid) const;
322 unsigned short ToUnsignedShort() const { return this->ToUnsignedShort(nullptr); }
323 int ToInt(bool* valid) const;
324 int ToInt() const { return this->ToInt(nullptr); }
325 unsigned int ToUnsignedInt(bool* valid) const;
326 unsigned int ToUnsignedInt() const { return this->ToUnsignedInt(nullptr); }
327 long ToLong(bool* valid) const;
328 long ToLong() const { return this->ToLong(nullptr); }
329 unsigned long ToUnsignedLong(bool* valid) const;
330 unsigned long ToUnsignedLong() const { return this->ToUnsignedLong(nullptr); }
331 long long ToLongLong(bool* valid) const;
332 long long ToLongLong() const { return this->ToLongLong(nullptr); }
333 unsigned long long ToUnsignedLongLong(bool* valid) const;
334 unsigned long long ToUnsignedLongLong() const { return this->ToUnsignedLongLong(nullptr); }
335 vtkTypeInt64 ToTypeInt64(bool* valid) const;
336 vtkTypeInt64 ToTypeInt64() const { return this->ToTypeInt64(nullptr); }
337 vtkTypeUInt64 ToTypeUInt64(bool* valid) const;
338 vtkTypeUInt64 ToTypeUInt64() const { return this->ToTypeUInt64(nullptr); }
340
345
350
361 bool IsEqual(const vtkVariant& other) const;
362
364
394 bool operator==(const vtkVariant& other) const;
395 bool operator!=(const vtkVariant& other) const;
396 bool operator<(const vtkVariant& other) const;
397 bool operator>(const vtkVariant& other) const;
398 bool operator<=(const vtkVariant& other) const;
399 bool operator>=(const vtkVariant& other) const;
401
402 friend VTKCOMMONCORE_EXPORT ostream& operator<<(ostream& os, const vtkVariant& val);
403
404private:
405 template <typename T>
406 T ToNumeric(bool* valid, T* vtkNotUsed(ignored)) const;
407
408 union
409 {
411 float Float;
412 double Double;
413 char Char;
414 unsigned char UnsignedChar;
415 signed char SignedChar;
416 short Short;
417 unsigned short UnsignedShort;
418 int Int;
419 unsigned int UnsignedInt;
420 long Long;
421 unsigned long UnsignedLong;
422 long long LongLong;
423 unsigned long long UnsignedLongLong;
425 } Data;
426
427 bool Valid;
428 unsigned int Type;
429
430 friend struct vtkVariantLessThan;
431 friend struct vtkVariantEqual;
434};
435
436VTK_ABI_NAMESPACE_END
437#include "vtkVariantInlineOperators.h" // needed for operator== and company
438
439// A STL-style function object so you can compare two variants using
440// comp(s1,s2) where comp is an instance of vtkVariantStrictWeakOrder.
441// This is a faster version of operator< that makes no attempt to
442// compare values. It satisfies the STL requirement for a comparison
443// function for ordered containers like map and set.
444
445VTK_ABI_NAMESPACE_BEGIN
446struct VTKCOMMONCORE_EXPORT vtkVariantLessThan
447{
448public:
449 bool operator()(const vtkVariant& s1, const vtkVariant& s2) const;
450};
451
452struct VTKCOMMONCORE_EXPORT vtkVariantEqual
453{
454public:
455 bool operator()(const vtkVariant& s1, const vtkVariant& s2) const;
456};
457
458struct VTKCOMMONCORE_EXPORT vtkVariantStrictWeakOrder
459{
460public:
461 bool operator()(const vtkVariant& s1, const vtkVariant& s2) const;
462};
463
464// Similarly, this is a fast version of operator== that requires that
465// the types AND the values be equal in order to admit equality.
466
467struct VTKCOMMONCORE_EXPORT vtkVariantStrictEquality
468{
469public:
470 bool operator()(const vtkVariant& s1, const vtkVariant& s2) const;
471};
472
473VTK_ABI_NAMESPACE_END
474#endif
475// VTK-HeaderTest-Exclude: vtkVariant.h
RealT s2
Definition PyrC2Basis.h:21
Abstract superclass for all arrays.
abstract base class for most VTK objects
Wrapper around std::string to keep symbols short.
A type representing the union of many types.
Definition vtkVariant.h:53
vtkTypeInt64 ToTypeInt64() const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
Definition vtkVariant.h:336
vtkVariant(float value)
Create a float variant.
bool IsArray() const
Get whether the variant is a VTK array (i.e.
long long ToLongLong(bool *valid) const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
vtkVariant & operator=(const vtkVariant &other)
Copy the value of one variant into another.
~vtkVariant()
Destruct the variant.
char ToChar() const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
Definition vtkVariant.h:314
unsigned long long UnsignedLongLong
Definition vtkVariant.h:423
double ToDouble(bool *valid) const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
long long ToLongLong() const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
Definition vtkVariant.h:332
vtkTypeUInt64 ToTypeUInt64(bool *valid) const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
unsigned short ToUnsignedShort(bool *valid) const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
vtkVariant(unsigned long value)
Create an unsigned long variant.
bool IsUnsignedChar() const
Get whether the variant is an unsigned char.
unsigned int GetType() const
Get the type of the variant.
unsigned char ToUnsignedChar(bool *valid) const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
unsigned char ToUnsignedChar() const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
Definition vtkVariant.h:316
vtkVariant(unsigned int value)
Create an unsigned integer variant.
vtkVariant(char value)
Create a char variant.
friend struct vtkVariantLessThan
Definition vtkVariant.h:430
@ DEFAULT_FORMATTING
Definition vtkVariant.h:284
@ SCIENTIFIC_FORMATTING
Definition vtkVariant.h:286
unsigned short UnsignedShort
Definition vtkVariant.h:417
char ToChar(bool *valid) const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
bool IsUnsignedLong() const
Get whether the variant is an unsigned long.
short Short
Definition vtkVariant.h:416
vtkVariant(int value)
Create an integer variant.
bool IsDouble() const
Get whether the variant is a double.
vtkVariant(vtkStdString value)
Create a string variant from a std string.
vtkVariant(unsigned long long value)
Create an unsigned long long variant.
long ToLong() const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
Definition vtkVariant.h:328
const char * GetTypeAsString() const
Get the type of the variant as a string.
signed char ToSignedChar() const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
Definition vtkVariant.h:318
double ToDouble() const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
Definition vtkVariant.h:312
friend struct vtkVariantEqual
Definition vtkVariant.h:431
bool IsInt() const
Get whether the variant is an int.
float Float
Definition vtkVariant.h:411
vtkObjectBase * ToVTKObject() const
Return the VTK object, or nullptr if not of that type.
bool IsUnsignedInt() const
Get whether the variant is an unsigned int.
friend struct vtkVariantStrictWeakOrder
Definition vtkVariant.h:432
unsigned long ToUnsignedLong(bool *valid) const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
friend VTKCOMMONCORE_EXPORT ostream & operator<<(ostream &os, const vtkVariant &val)
bool IsFloat() const
Get whether the variant is a float.
bool IsUnsignedShort() const
Get whether the variant is an unsigned short.
vtkVariant(long value)
Create an long variant.
float ToFloat() const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
Definition vtkVariant.h:310
long long LongLong
Definition vtkVariant.h:422
vtkVariant(signed char value)
Create a signed char variant.
vtkVariant(vtkObjectBase *value)
Create a vtkObjectBase variant.
vtkStdString ToString(int formatting=DEFAULT_FORMATTING, int precision=6) const
Convert the variant to a string.
bool IsChar() const
Get whether the variant is an char.
bool IsVTKObject() const
Get whether the variant is a VTK object pointer (i.e.
short ToShort() const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
Definition vtkVariant.h:320
vtkStdString * String
Definition vtkVariant.h:410
vtkVariant(long long value)
Create a long long variant.
bool IsLongLong() const
Get whether the variant is long long.
signed char ToSignedChar(bool *valid) const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
unsigned int ToUnsignedInt() const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
Definition vtkVariant.h:326
unsigned int UnsignedInt
Definition vtkVariant.h:419
float ToFloat(bool *valid) const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
bool IsValid() const
Get whether the variant value is valid.
int ToInt(bool *valid) const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
vtkVariant(bool value)
Create a bool variant.
vtkAbstractArray * ToArray() const
Return the array, or nullptr if not of that type.
unsigned long long ToUnsignedLongLong() const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
Definition vtkVariant.h:334
long ToLong(bool *valid) const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
bool IsSignedChar() const
Get whether the variant is an signed char.
vtkTypeInt64 ToTypeInt64(bool *valid) const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
bool IsString() const
Get whether the variant is a string.
unsigned int ToUnsignedInt(bool *valid) const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
vtkVariant(const vtkVariant &other)
Copy constructor.
vtkVariant(const vtkVariant &other, unsigned int type)
Create a new variant by copying the given variant but converting it to the given type.
unsigned long ToUnsignedLong() const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
Definition vtkVariant.h:330
vtkVariant(unsigned char value)
Create an unsigned char variant.
unsigned long UnsignedLong
Definition vtkVariant.h:421
unsigned char UnsignedChar
Definition vtkVariant.h:414
vtkVariant(short value)
Create a short variant.
vtkVariant(unsigned short value)
Create an unsigned short variant.
vtkVariant()
Create an invalid variant.
friend struct vtkVariantStrictEquality
Definition vtkVariant.h:433
bool IsLong() const
Get whether the variant is an long.
vtkVariant(double value)
Create a double variant.
unsigned short ToUnsignedShort() const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
Definition vtkVariant.h:322
bool IsEqual(const vtkVariant &other) const
Determines whether two variants have the same value.
double Double
Definition vtkVariant.h:412
vtkObjectBase * VTKObject
Definition vtkVariant.h:424
signed char SignedChar
Definition vtkVariant.h:415
bool IsNumeric() const
Get whether the variant is any numeric type.
int ToInt() const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
Definition vtkVariant.h:324
bool IsShort() const
Get whether the variant is an short.
vtkTypeUInt64 ToTypeUInt64() const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
Definition vtkVariant.h:338
short ToShort(bool *valid) const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
vtkVariant(const char *value)
Create a string variant from a const char*.
unsigned long long ToUnsignedLongLong(bool *valid) const
Convert the variant to a numeric type: If it holds a numeric, cast to the appropriate type.
bool IsUnsignedLongLong() const
Get whether the variant is unsigned long long.
bool operator()(const vtkVariant &s1, const vtkVariant &s2) const
bool operator()(const vtkVariant &s1, const vtkVariant &s2) const
bool operator()(const vtkVariant &s1, const vtkVariant &s2) const
bool operator()(const vtkVariant &s1, const vtkVariant &s2) const
@ Valid
Cell is in a good state.
bool VTKCOMMONCORE_EXPORT operator>=(const std::string &a, const vtkStringToken &b)
bool VTKCOMMONCORE_EXPORT operator==(const std::string &a, const vtkStringToken &b)
bool VTKCOMMONCORE_EXPORT operator>(const std::string &a, const vtkStringToken &b)
bool VTKCOMMONCORE_EXPORT operator<=(const std::string &a, const vtkStringToken &b)
bool VTKCOMMONCORE_EXPORT operator<(const std::string &a, const vtkStringToken &b)
bool VTKCOMMONCORE_EXPORT operator!=(const std::string &a, const vtkStringToken &b)
unsigned int Type
VTKCOMMONCORE_EXPORT ostream & operator<<(ostream &os, const vtkVariant &val)