From 06ed8e2548c1fcf3b613ec7b5e5b1b03a9c4280a Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Sat, 20 Dec 2014 18:20:08 +0100 Subject: Variants can now store references to managed objects and act as a Rooted handle --- src/core/common/Variant.cpp | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) (limited to 'src/core/common/Variant.cpp') diff --git a/src/core/common/Variant.cpp b/src/core/common/Variant.cpp index 53286a2..78fdfce 100644 --- a/src/core/common/Variant.cpp +++ b/src/core/common/Variant.cpp @@ -18,6 +18,8 @@ #include +#include + #include "Utils.hpp" #include "Variant.hpp" @@ -37,6 +39,19 @@ Variant::TypeException::TypeException(Type actualType, Type requestedType) /* Class Variant */ +void Variant::copyObject(objectType o) +{ + Managed *managed = static_cast(o); + managed->getManager().addRef(o, nullptr); + ptrVal = managed; +} + +void Variant::destroyObject() +{ + Managed *managed = static_cast(ptrVal); + managed->getManager().deleteRef(managed, nullptr); +} + const char *Variant::getTypeName(Type type) { switch (type) { @@ -54,6 +69,8 @@ const char *Variant::getTypeName(Type type) return "array"; case Type::MAP: return "map"; + case Type::OBJECT: + return "object"; } return "unknown"; } @@ -69,11 +86,7 @@ Variant::boolType Variant::toBool() const return asInt() != 0; case Type::DOUBLE: return asDouble() != 0.0; - case Type::STRING: - return true; - case Type::ARRAY: - return true; - case Type::MAP: + default: return true; } return false; @@ -91,12 +104,12 @@ Variant::intType Variant::toInt() const case Type::DOUBLE: return asDouble(); case Type::STRING: - return 0; // TODO: Parse string as int + return 0; // TODO: Parse string as int case Type::ARRAY: { const arrayType &a = asArray(); return (a.size() == 1) ? a[0].toInt() : 0; } - case Type::MAP: + default: return 0; } return false; @@ -114,13 +127,13 @@ Variant::doubleType Variant::toDouble() const case Type::DOUBLE: return asDouble(); case Type::STRING: - return 0.0; // TODO: Parse string as double + return 0.0; // TODO: Parse string as double case Type::ARRAY: { const arrayType &a = asArray(); return (a.size() == 1) ? a[0].toDouble() : 0; } - case Type::MAP: - return 0; + default: + return 0.0; } return false; } @@ -156,9 +169,13 @@ Variant::stringType Variant::toString(bool escape) const return Utils::join(asArray(), ", ", "[", "]"); case Type::MAP: return Utils::join(asMap(), ", ", "{", "}"); + case Type::OBJECT: { + std::stringstream ss; + ss << ""; + return ss.str(); + } } return ""; } - } -- cgit v1.2.3