aboutsummaryrefslogtreecommitdiff
path: root/src/armnnUtils/DotSerializer.cpp
diff options
context:
space:
mode:
authorsurmeh01 <surabhi.mehta@arm.com>2018-03-29 16:29:27 +0100
committersurmeh01 <surabhi.mehta@arm.com>2018-03-29 16:29:27 +0100
commitbceff2fb3fc68bb0aa88b886900c34b77340c826 (patch)
treed867d3e090d58d3012dfbbac456e9ea8c7f789bc /src/armnnUtils/DotSerializer.cpp
parent4fcda0101ec3d110c1d6d7bee5c83416b645528a (diff)
downloadarmnn-bceff2fb3fc68bb0aa88b886900c34b77340c826.tar.gz
Release 18.03
Diffstat (limited to 'src/armnnUtils/DotSerializer.cpp')
-rw-r--r--src/armnnUtils/DotSerializer.cpp219
1 files changed, 219 insertions, 0 deletions
diff --git a/src/armnnUtils/DotSerializer.cpp b/src/armnnUtils/DotSerializer.cpp
new file mode 100644
index 0000000000..1feea54dbd
--- /dev/null
+++ b/src/armnnUtils/DotSerializer.cpp
@@ -0,0 +1,219 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// See LICENSE file in the project root for full license information.
+//
+
+#include "DotSerializer.hpp"
+
+#include <boost/assert.hpp>
+#include <sstream>
+#include <cstring>
+
+namespace armnn
+{
+
+namespace
+{
+std::string Indent(int numSpaces)
+{
+ std::stringstream ss;
+ for (int i = 0; i < numSpaces; i++)
+ {
+ ss << " ";
+ }
+ return ss.str();
+}
+} //namespace
+
+
+HtmlFont::HtmlFont(std::ostream& stream, int fontSize, const char *color, const char *face)
+ : DotBase(stream)
+{
+ GetStream() << "<FONT";
+
+ if (fontSize > -1)
+ {
+ GetStream() << " POINT-SIZE=" << "\"" << fontSize << "\"";
+ }
+
+ if (color && std::strlen(color) != 0)
+ {
+ GetStream() << " COLOR=\"" << color << "\" ";
+ }
+
+ if (face && std::strlen(face) != 0)
+ {
+ GetStream() << " FACE=\"" << face << "\" ";
+ }
+
+ GetStream() << ">";
+}
+
+
+HtmlFont::HtmlFont(std::ostream& stream)
+ : HtmlFont(stream, -1, nullptr, nullptr)
+{}
+
+HtmlFont::~HtmlFont()
+{
+ GetStream() << "</FONT>";
+}
+
+
+DotAttributeSet::DotAttributeSet(std::ostream& stream)
+ : DotBase(stream)
+{
+ GetStream() << "[";
+}
+
+DotAttributeSet::~DotAttributeSet()
+{
+ bool doSpace=false;
+ for (auto attrib : m_Attributes)
+ {
+ if (doSpace)
+ {
+ GetStream() << " ";
+ }
+
+ GetStream() << attrib;
+ doSpace=true;
+ }
+
+ GetStream() << "]";
+}
+
+DotAttributeSet & DotAttributeSet::AddAttribute(const std::string& name, const std::stringstream& value)
+{
+ std::stringstream ss;
+ ss << name <<"=" << value.str();
+ m_Attributes.push_back(ss.str());
+ return *this;
+}
+
+DotAttributeSet & DotAttributeSet::AddAttribute(const std::string& name, int value)
+{
+ std::stringstream ss;
+ ss << name <<"=" << value;
+ m_Attributes.push_back(ss.str());
+ return *this;
+}
+
+DotAttributeSet & DotAttributeSet::AddAttribute(const std::string& name, const std::string& value)
+{
+ std::stringstream ss;
+ ss << name <<"=\"" << value << "\"";
+ m_Attributes.push_back(ss.str());
+ return *this;
+}
+
+DotEdge::DotEdge(std::ostream& stream, unsigned int fromNodeId, unsigned int toNodeId)
+ : DotBase(stream)
+{
+ std::stringstream ss;
+ ss << Indent(4) << fromNodeId << " -> " << toNodeId << " ";
+ GetStream() << ss.str();
+
+ m_Attributes = std::make_unique<DotAttributeSet>(stream);
+}
+
+DotEdge::~DotEdge()
+{
+ m_Attributes.reset(nullptr);
+ GetStream() << ";" << std::endl;
+}
+
+
+NodeContent::NodeContent(std::ostream& stream)
+ : DotBase(stream)
+{
+}
+
+NodeContent & NodeContent::SetName(const std::string & name)
+{
+ m_Name = name;
+ return *this;
+}
+
+NodeContent & NodeContent::AddContent(const std::string & content)
+{
+ m_Contents.push_back(content);
+ return *this;
+}
+
+NodeContent::~NodeContent()
+{
+ std::stringstream ss;
+ ss << "label=\"{" << m_Name;
+ if (!m_Contents.empty())
+ {
+ ss << "|";
+ }
+ for (auto & content : m_Contents)
+ {
+ ss << content;
+ ss << "\\l";
+ }
+ ss << "}\"";
+ GetStream() << ss.str();
+}
+
+DotNode::DotNode(std::ostream& stream, unsigned int nodeId, const char* label)
+ : DotBase(stream)
+{
+ std::stringstream ss;
+ ss << Indent(4) << nodeId;
+
+ GetStream() << ss.str() << " ";
+
+ m_Contents = std::make_unique<NodeContent>(stream);
+ m_Attributes = std::make_unique<DotAttributeSet>(stream);
+
+ if (std::strlen(label) != 0)
+ {
+ m_Contents->SetName(label);
+ }
+ else
+ {
+ m_Contents->SetName("<noname>");
+ }
+}
+
+DotNode::~DotNode()
+{
+ m_Contents.reset(nullptr);
+ m_Attributes.reset(nullptr);
+ GetStream() << ";" << std::endl;
+}
+
+
+DotDefaults::DotDefaults(std::ostream& stream, const char* type)
+ : DotBase(stream)
+{
+ std::stringstream ss;
+ ss << Indent(4) << type;
+
+ GetStream() << ss.str() << " ";
+ m_Attributes = std::make_unique<DotAttributeSet>(stream);
+}
+
+DotDefaults::~DotDefaults()
+{
+ m_Attributes.reset(nullptr);
+ GetStream() << ";" << std::endl;
+}
+
+DotGraph::DotGraph(std::ostream& stream, const char* name)
+ : DotBase(stream)
+{
+ GetStream() << "digraph " << name << " {" << std::endl;
+}
+
+DotGraph::~DotGraph()
+{
+ GetStream() << "}" << std::endl;
+}
+
+} //namespace armnn
+
+