summaryrefslogtreecommitdiffstats
path: root/staging_vespalib/src/vespa/vespalib/trace/slime_trace_deserializer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'staging_vespalib/src/vespa/vespalib/trace/slime_trace_deserializer.cpp')
-rw-r--r--staging_vespalib/src/vespa/vespalib/trace/slime_trace_deserializer.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/staging_vespalib/src/vespa/vespalib/trace/slime_trace_deserializer.cpp b/staging_vespalib/src/vespa/vespalib/trace/slime_trace_deserializer.cpp
new file mode 100644
index 00000000000..fc28dfbb40b
--- /dev/null
+++ b/staging_vespalib/src/vespa/vespalib/trace/slime_trace_deserializer.cpp
@@ -0,0 +1,68 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include <vespa/vespalib/trace/slime_trace_deserializer.h>
+#include <vespa/vespalib/trace/slime_trace_serializer.h>
+#include <vespa/vespalib/trace/tracenode.h>
+
+using namespace vespalib::slime;
+
+namespace vespalib {
+
+SlimeTraceDeserializer::SlimeTraceDeserializer(const Inspector & inspector)
+ : _inspector(inspector)
+{
+}
+
+TraceNode
+SlimeTraceDeserializer::deserialize() const
+{
+ return deserialize(_inspector);
+}
+
+TraceNode
+SlimeTraceDeserializer::deserialize(const Inspector & inspector)
+{
+ TraceNode node(deserializeTraceNode(inspector));
+ deserializeChildren(inspector[SlimeTraceSerializer::CHILDREN], node);
+ return node;
+}
+
+TraceNode
+SlimeTraceDeserializer::deserializeTraceNode(const Inspector & inspector)
+{
+ int64_t timestamp(decodeTimestamp(inspector));
+ if (hasPayload(inspector)) {
+ std::string note(decodePayload(inspector));
+ return TraceNode(note, timestamp);
+ }
+ return TraceNode(timestamp);
+}
+
+bool
+SlimeTraceDeserializer::hasPayload(const Inspector & inspector)
+{
+ return inspector[SlimeTraceSerializer::PAYLOAD].valid();
+}
+
+vespalib::string
+SlimeTraceDeserializer::decodePayload(const Inspector & inspector)
+{
+ return inspector[SlimeTraceSerializer::PAYLOAD].asString().make_string();
+}
+
+int64_t
+SlimeTraceDeserializer::decodeTimestamp(const Inspector & inspector)
+{
+ return inspector[SlimeTraceSerializer::TIMESTAMP].asLong();
+}
+
+void
+SlimeTraceDeserializer::deserializeChildren(const Inspector & inspector, TraceNode & node)
+{
+ for (size_t i(0); i < inspector.children(); i++) {
+ Inspector & child(inspector[i]);
+ TraceNode childNode(deserialize(child));
+ node.addChild(childNode);
+ }
+}
+
+}