This is the base class for all Variant types.
If the actual type is known at compile-time then you should use a specific Variant<>, such as Variant<int>. Otherwise, you may use get_type(), is_of_type(), or cast_dynamic().
- Since glibmm 2.28:
| void Glib::VariantBase::byteswap |
( |
VariantBase& |
result | ) |
const |
Performs a byteswapping operation on the contents of this variant.
The result is that all multi-byte numeric data contained in the variant is byteswapped. That includes 16, 32, and 64bit signed and unsigned integers as well as file handles and double precision floating point values.
This function is an identity mapping on any value that does not contain multi-byte numeric data. That include strings, booleans, bytes and containers containing only these things (recursively).
The returned value is always in normal form and is marked as trusted.
- Parameters
-
| result | A location in which to store the byteswapped form of this variant. |
- Since glibmm 2.24:
| bool Glib::VariantBase::check_format_string |
( |
const std::string & |
format_string, |
|
|
bool |
copy_only = false |
|
) |
| const |
Checks if calling g_variant_get() with format_string on value would be valid from a type-compatibility standpoint.
format_string is assumed to be a valid format string (from a syntactic standpoint).
If copy_only is true then this function additionally checks that it would be safe to call g_variant_unref() on value immediately after the call to g_variant_get() without invalidating the result. This is only possible if deep copies are made (ie: there are no pointers to the data inside of the soon-to-be-freed Variant instance). If this check fails then a g_critical() is printed and false is returned.
This function is meant to be used by functions that wish to provide varargs accessors to Variant values of uncertain values (eg: g_variant_lookup() or Glib::menu_model_get_item_attribute()).
- Since glibmm 2.34:
- Parameters
-
| format_string | A valid Variant format string. |
| copy_only | true to ensure the format string makes deep copies. |
- Returns
true if format_string is safe to use.
| gconstpointer Glib::VariantBase::get_data |
( |
| ) |
|
Returns a pointer to the serialised form of a Variant instance.
The returned data may not be in fully-normalised form if read from an untrusted source. The returned data must not be freed; it remains valid for as long as value exists.
If value is a fixed-sized value that was deserialised from a corrupted serialised container then nullptr may be returned. In this case, the proper thing to do is typically to use the appropriate number of nul bytes in place of value. If value is not fixed-sized then nullptr is never returned.
In the case that value is already in serialised form, this function is O(1). If the value is not already in serialised form, serialisation occurs implicitly and is approximately O(n) in the size of the result.
To deserialise the data returned by this function, in addition to the serialised data, you must know the type of the Variant, and (if the machine might be different) the endianness of the machine that stored it. As a result, file formats or network messages that incorporate serialised Variants must include this information either implicitly (for instance "the file always contains a
G_VARIANT_TYPE_VARIANT and it is always in little-endian order") or explicitly (by storing the type and/or endianness in addition to the serialised data).
- Since glibmm 2.24:
- Deprecated:
- Use the const version instead.
- Returns
- The serialised form of value, or
nullptr.
| gconstpointer Glib::VariantBase::get_data |
( |
| ) |
const |
Returns a pointer to the serialised form of a Variant instance.
The returned data may not be in fully-normalised form if read from an untrusted source. The returned data must not be freed; it remains valid for as long as value exists.
If value is a fixed-sized value that was deserialised from a corrupted serialised container then nullptr may be returned. In this case, the proper thing to do is typically to use the appropriate number of nul bytes in place of value. If value is not fixed-sized then nullptr is never returned.
In the case that value is already in serialised form, this function is O(1). If the value is not already in serialised form, serialisation occurs implicitly and is approximately O(n) in the size of the result.
To deserialise the data returned by this function, in addition to the serialised data, you must know the type of the Variant, and (if the machine might be different) the endianness of the machine that stored it. As a result, file formats or network messages that incorporate serialised Variants must include this information either implicitly (for instance "the file always contains a
G_VARIANT_TYPE_VARIANT and it is always in little-endian order") or explicitly (by storing the type and/or endianness in addition to the serialised data).
- Since glibmm 2.46:
- Returns
- The serialised form of value, or
nullptr.
| void Glib::VariantBase::get_normal_form |
( |
VariantBase& |
result | ) |
const |
Gets a VariantBase instance that has the same value as this variant and is trusted to be in normal form.
If this variant is already trusted to be in normal form then a new reference to the variant is returned.
If this variant is not already trusted, then it is scanned to check if it is in normal form. If it is found to be in normal form then it is marked as trusted and a new reference to it is returned.
If this variant is found not to be in normal form then a new trusted VariantBase is created with the same value as this variant.
It makes sense to call this function if you've received variant data from untrusted sources and you want to ensure your serialised output is definitely in normal form.
- Parameters
-
| result | A location in which to store the trusted VariantBase. |
- Since glibmm 2.24:
| gsize Glib::VariantBase::get_size |
( |
| ) |
const |
Determines the number of bytes that would be required to store value with g_variant_store().
If value has a fixed-sized type then this function always returned that fixed size.
In the case that value is already in serialised form or the size has already been calculated (ie: this function has been called before) then this function is O(1). Otherwise, the size is calculated, an operation which is approximately O(n) in the number of values involved.
- Since glibmm 2.24:
- Returns
- The serialised size of value.
| bool Glib::VariantBase::is_floating |
( |
| ) |
const |
Checks whether value has a floating reference count.
This function should only ever be used to assert that a given variant is or is not floating, or for debug purposes. To acquire a reference to a variant that might be floating, always use g_variant_ref_sink() or g_variant_take_ref().
See g_variant_ref_sink() for more information about floating reference counts.
- Since glibmm 2.26:
- Returns
- Whether value is floating.
| void Glib::VariantBase::store |
( |
gpointer |
data | ) |
const |
Stores the serialised form of value at data.
data should be large enough. See g_variant_get_size().
The stored data is in machine native byte order but may not be in fully-normalised form if read from an untrusted source. See g_variant_get_normal_form() for a solution.
As with g_variant_get_data(), to be able to deserialise the serialised variant successfully, its type and (if the destination machine might be different) its endianness must also be available.
This function is approximately O(n) in the size of data.
- Since glibmm 2.24:
- Parameters
-
| data | The location to store the serialised data at. |