Stores a varying type values. If you use Variant type item multiple time(in loop, for example) don't forget to clear it before each use to prevent appearing of waste data from prev state.
You can find more information in comments below.
class Variant
{
public:
enum class VariantType // Variant data types
{
Pointer, // void*
Bool, // bool
Integer, // int
UnsignedInteger, // unsigned int
Float, // float
String, // String
Map, // A list of key -> value associations. Where key is a String and value is Variant
Array // An array of variants
};
public:
Variant(); // Create empty(type is vtPointer and value is nullptr)
Variant(void *value); // Create with specified pointer value
Variant(const bool value); // Create with specified bool value
Variant(const int value); // Create with specified int value
Variant(const unsigned int value); // Create with specified unsigned int value
Variant(const float value); // Create with specified float value
Variant(const String &value); // Create with specified String value
Variant(const Variant &other) = default;
Variant(Variant &&other) = default;
VariantType getType() const; // Return type
bool isSet(const String &key) const; // Check whether element with specified name exists
bool inArray(const Variant &value) const; // Check whether specified value is in array of elements
bool operator==(const Variant &other) const; // Check whether variants are equal
bool operator!=(const Variant &other) const; // Check whether variants are not equal
void operator=(void *value); // Set pointer value
void operator=(const bool value); // Set bool value
void operator=(const int value); // Set int value
void operator=(const unsigned int value); // Set unsigned int value
void operator=(const float value); // Set float value
void operator=(const String &value); // Set String value
Variant &operator=(const Variant &other) = default;
Variant &operator=(Variant &&other) = default;
operator void*() const; // Return as pointer
operator bool() const; // Return as bool
operator int() const; // Return as int
operator unsigned int() const; // Return as unsigned int
operator float() const; // Return as float
operator String() const; // Return as String
Variant &operator[](const wchar_t *key); // Get element by name. Create new empty one if not found
Variant operator[](const int key); // // Get element by index. Create new empty one if not found or Variant isn't an array or a map
// Standard iterators
Map::iterator begin();
Map::iterator end();
Map::const_iterator begin() const;
Map::const_iterator end() const;
Map::const_iterator cbegin() const;
Map::const_iterator cend() const;
// Standard reverse iterators
Map::reverse_iterator rbegin();
Map::reverse_iterator rend();
Map::const_reverse_iterator rbegin() const;
Map::const_reverse_iterator rend() const;
Map::const_reverse_iterator crbegin() const;
Map::const_reverse_iterator crend() const;
Map::size_type size() const; // Return number of elements
bool empty() const; // Make it empty
Map::iterator erase(Map::const_iterator _Where); // Erase element at specified position
Map::iterator erase(Map::const_iterator _First, Map::const_iterator _Last); // Erase specified range of elements
void clear(); // Clear all elements
Map::const_iterator find(const String &_Keyval) const; // Find element by name
void push_back(const Variant &value); // Add element
Variant get(const wchar_t *key) const; // Safely get map/array item by name. If doesn't exist, return null variant
Variant get(const int index) const; // Safely get map/array item by index. If doesn't exist, return null variant
void Reset(); // Remove all elements, set type to Pointer, and set value to nullptr
String Stringify(); // Return json encoded string representing the Variant
#ifdef _DEBUG
void Print(const AnsiString &spaces = "") const;
#endif
};
Namespace: | nitisa |
Include: | Nitisa/Core/Variant.h |