summaryrefslogtreecommitdiff
path: root/src/core/common/VariantConverter.hpp
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-01-11 13:05:21 +0100
committerAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-01-11 13:05:21 +0100
commitfcd8e06ade6116730630d9800523637b96aedf32 (patch)
treed398b587aa665c2fb25db2c4e7bac227dcce2b17 /src/core/common/VariantConverter.hpp
parent498fd2737a32fde11062c7177d8326c665f7feef (diff)
Renamed Variant::Type to VariantType to allow forward declaration
Diffstat (limited to 'src/core/common/VariantConverter.hpp')
-rw-r--r--src/core/common/VariantConverter.hpp69
1 files changed, 60 insertions, 9 deletions
diff --git a/src/core/common/VariantConverter.hpp b/src/core/common/VariantConverter.hpp
index b683083..e5014bd 100644
--- a/src/core/common/VariantConverter.hpp
+++ b/src/core/common/VariantConverter.hpp
@@ -22,8 +22,10 @@
namespace ousia {
// Forward declaration
-class Variant;
class Logger;
+class RttiBase;
+class Variant;
+enum class VariantType : int16_t;
/**
* The VariantConverter class is used to convert a variant to a certain
@@ -31,21 +33,18 @@ class Logger;
* type, even if the conversion fails.
*/
class VariantConverter {
-
public:
/**
* Enumeration used to define the mode of conversion -- either only safe
* conversions (without any data loss) are performed, or all possible
* conversions are tried (with possible data loss).
*/
- enum class Mode {
- SAFE, ALL
- };
+ enum class Mode { SAFE, ALL };
/**
- * Makes sure the given variant is a boolean. If the "mode" parameter is
- * set to Mode::SAFE, only booleans can be converted to booleans. For all
- * other types the conversion fails. If "mode" is set to Mode::ALL, nullptr
+ * Converts the given variant to a boolean. If the "mode" parameter is set
+ * to Mode::SAFE, only booleans can be converted to booleans. For all other
+ * types the conversion fails. If "mode" is set to Mode::ALL, nullptr
* values and zero numeric values are treated as "false", all other values
* are treated as "true".
*
@@ -58,14 +57,66 @@ public:
*/
static bool toBool(Variant &var, Logger &logger, Mode mode = Mode::SAFE);
+ /**
+ * Converts the given variant to an integer. If the "mode" parameter is set
+ * to Mode::SAFE, only integers can be converted to integers. For all other
+ * types the conversion fails. If "mode" is set to Mode::ALL, booleans are
+ * converted to 0, 1, nullptr is converted to 0, doubles are truncated,
+ * strings are parsed and truncated, arrays with one element are converted
+ * to an integer. Conversion fails for objects, functions, maps and arrays
+ * with zero or more than one entry.
+ *
+ * @param var is instance of the Variant class that should be converted to
+ * the requested type.
+ * @param logger is a reference to the logger instance into which messages
+ * should be logged.
+ * @param mode is the conversion mode. See method description for the exact
+ * effect.
+ */
static bool toInt(Variant &var, Logger &logger, Mode mode = Mode::SAFE);
+ /**
+ * Converts the given variant to a double. If the "mode" parameter is set
+ * to Mode::SAFE, only integers and doubles can be converted to doubles. For
+ * all other types the conversion fails. If "mode" is set to Mode::ALL,
+ * booleans are converted to 0.0, 1.0, nullptr is converted to 0.0, strings
+ * are parsed, arrays with one element are converted to a double.
+ * Conversion fails for objects, functions, maps and arrays with zero or
+ * more than one entry.
+ *
+ * @param var is instance of the Variant class that should be converted to
+ * the requested type.
+ * @param logger is a reference to the logger instance into which messages
+ * should be logged.
+ * @param mode is the conversion mode. See method description for the exact
+ * effect.
+ */
static bool toDouble(Variant &var, Logger &logger, Mode mode = Mode::SAFE);
+ /**
+ * Converts the given variant to a double. If the "mode" parameter is set
+ * to Mode::SAFE, all primitive types can be converted to strings. For
+ * all other types the conversion fails. If "mode" is set to Mode::ALL,
+ * maps and arrays are converted to a JSON representation, objects and
+ * functions are converted to an informative string containing their pointer
+ * and type.
+ *
+ * @param var is instance of the Variant class that should be converted to
+ * the requested type.
+ * @param logger is a reference to the logger instance into which messages
+ * should be logged.
+ * @param mode is the conversion mode. See method description for the exact
+ * effect.
+ */
static bool toString(Variant &var, Logger &logger, Mode mode = Mode::SAFE);
-};
+ static bool convert(Variant &var, VariantType requestedType,
+ const RttiBase &rttiType, Logger &logger,
+ Mode mode = Mode::SAFE);
+ static bool convert(Variant &var, VariantType requestedType,
+ Logger &logger, Mode mode = Mode::SAFE);
+};
}
#endif /* _OUSIA_VARIANT_CONVERTER_HPP_ */