summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-04-16 01:11:44 +0200
committerAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2016-04-25 22:26:12 +0200
commit1e44e62ad33ac8e73af18de01b122e3c3198e438 (patch)
tree3e6bba32a57a339b96c082aae8fcb5afbdfcbef4 /src/core
parentcd0e0eaee10d6587a4547af4d86f261d34a54ee0 (diff)
Generate unique IDs for XmlOutput and serialize those
Diffstat (limited to 'src/core')
-rw-r--r--src/core/common/VariantConverter.cpp24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/core/common/VariantConverter.cpp b/src/core/common/VariantConverter.cpp
index 699576b..ad0da83 100644
--- a/src/core/common/VariantConverter.cpp
+++ b/src/core/common/VariantConverter.cpp
@@ -304,15 +304,27 @@ bool VariantConverter::toString(Variant &var, Logger &logger, Mode mode)
return true;
}
case VariantType::OBJECT: {
- // Print object address and type
+ // Fetch the attached object, abort if it is a nullptr
Variant::objectType obj = var.asObject();
- std::stringstream ss;
- ss << "<object " << obj.get();
- if (obj.get() != nullptr) {
- ss << " (" << obj->type()->name << ")";
+ if (obj == nullptr) {
+ var = "<null>";
+ return true;
+ }
+
+ // Check whether the object has an id attached -- if yes, output
+ // that id
+ Rooted<ManagedVariant> id = obj->readData<ManagedVariant>("id");
+ if (id != nullptr && id->v.isString()) {
+ var = id->v;
+ return true;
}
- ss << ">";
+
+ // Otherwise print object address and type
+ std::stringstream ss;
+ ss << "<object " << obj.get() << " (" << obj->type()->name
+ << ")>";
var = ss.str().c_str();
+
return true;
}
case VariantType::FUNCTION: {