diff options
author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-04-16 01:11:44 +0200 |
---|---|---|
committer | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2016-04-25 22:26:12 +0200 |
commit | 1e44e62ad33ac8e73af18de01b122e3c3198e438 (patch) | |
tree | 3e6bba32a57a339b96c082aae8fcb5afbdfcbef4 /src/core/common/VariantConverter.cpp | |
parent | cd0e0eaee10d6587a4547af4d86f261d34a54ee0 (diff) |
Generate unique IDs for XmlOutput and serialize those
Diffstat (limited to 'src/core/common/VariantConverter.cpp')
-rw-r--r-- | src/core/common/VariantConverter.cpp | 24 |
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: { |