diff options
author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2014-12-20 18:20:08 +0100 |
---|---|---|
committer | Andreas Stöckel <andreas@somweyr.de> | 2014-12-20 18:20:08 +0100 |
commit | 06ed8e2548c1fcf3b613ec7b5e5b1b03a9c4280a (patch) | |
tree | adcecd780dac0b8f12ecec2fe3b05bd2d1676e92 /src/core/common/Variant.cpp | |
parent | 0bbfecaba5ae2afec230552fd106e98be61a91bf (diff) |
Variants can now store references to managed objects and act as a Rooted handle
Diffstat (limited to 'src/core/common/Variant.cpp')
-rw-r--r-- | src/core/common/Variant.cpp | 39 |
1 files changed, 28 insertions, 11 deletions
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 <sstream> +#include <core/managed/Managed.hpp> + #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<objectType>(o); + managed->getManager().addRef(o, nullptr); + ptrVal = managed; +} + +void Variant::destroyObject() +{ + Managed *managed = static_cast<objectType>(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 << "<object " << ptrVal << ">"; + return ss.str(); + } } return ""; } - } |