blob: 253fb768ececcb776d64d26d56e3aefcd8c6e8df [file] [log] [blame]
surmeh01bceff2f2018-03-29 16:29:27 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
surmeh01bceff2f2018-03-29 16:29:27 +01004//
5
6#pragma once
7
janeil013fec1ea2019-11-07 09:47:20 +00008#include <armnn/Types.hpp>
9
surmeh01bceff2f2018-03-29 16:29:27 +010010#include <ostream>
11#include <vector>
12#include <memory>
13
14namespace armnn
15{
16
17class DotBase
18{
19public:
20 explicit DotBase(std::ostream& stream)
21 : m_Stream(stream) {}
22
23 std::ostream& GetStream() { return m_Stream; }
24
25private:
26 std::ostream& m_Stream;
27};
28
29class HtmlSection : public DotBase
30{
31public:
32 explicit HtmlSection(std::ostream& stream)
33 : DotBase(stream) { GetStream() << "<";}
34 ~HtmlSection() { GetStream() << ">"; }
35};
36
37class HtmlSimpleTag : public DotBase
38{
39public:
40 explicit HtmlSimpleTag(std::ostream& stream, const char* name)
41 : DotBase(stream)
42 , m_Name(name){ GetStream() << "<" << m_Name << ">"; }
43 ~HtmlSimpleTag() { GetStream() << "</" << m_Name << ">"; }
44
45private:
46 const char* m_Name;
47};
48
49class HtmlBold : public HtmlSimpleTag
50{
51public:
52 explicit HtmlBold(std::ostream &stream)
53 : HtmlSimpleTag(stream, "B") {}
54};
55
56class HtmlFont : public DotBase
57{
58public:
59 explicit HtmlFont(std::ostream& stream, int fontSize, const char* color, const char* face);
60 explicit HtmlFont(std::ostream& stream);
61 ~HtmlFont();
62};
63
64class DotAttributeSet : public DotBase
65{
66public:
67 explicit DotAttributeSet(std::ostream& stream);
68 ~DotAttributeSet();
69
70 DotAttributeSet & AddAttribute(const std::string& name, const std::stringstream& value);
71 DotAttributeSet & AddAttribute(const std::string& name, int value);
72 DotAttributeSet & AddAttribute(const std::string& name, const std::string& value);
73private:
74 std::vector<std::string> m_Attributes;
75};
76
77class DotEdge : public DotBase
78{
79public:
janeil013fec1ea2019-11-07 09:47:20 +000080 explicit DotEdge(std::ostream& stream, LayerGuid fromNodeId, LayerGuid toNodeId);
surmeh01bceff2f2018-03-29 16:29:27 +010081 ~DotEdge();
82
83 DotAttributeSet& GetAttributeSet() { return *m_Attributes.get(); }
84private:
85 std::unique_ptr<DotAttributeSet> m_Attributes;
86};
87
88class NodeContent : public DotBase
89{
90public:
91 explicit NodeContent(std::ostream& stream);
92 NodeContent & SetName(const std::string & name);
93 NodeContent & AddContent(const std::string & content);
94
95 ~NodeContent();
96private:
97 std::string m_Name;
98 std::vector<std::string> m_Contents;
99};
100
101class DotNode : public DotBase
102{
103public:
janeil013fec1ea2019-11-07 09:47:20 +0000104 explicit DotNode(std::ostream& stream, LayerGuid nodeId, const char* label);
surmeh01bceff2f2018-03-29 16:29:27 +0100105 ~DotNode();
106
107 NodeContent& GetContents() { return *m_Contents.get(); }
108 DotAttributeSet& GetAttributeSet() { return *m_Attributes.get(); }
109private:
110 std::unique_ptr<NodeContent> m_Contents;
111 std::unique_ptr<DotAttributeSet> m_Attributes;
112};
113
114class DotDefaults : public DotBase
115{
116public:
117 explicit DotDefaults(std::ostream& stream, const char* type);
118 ~DotDefaults();
119
120 DotAttributeSet& GetAttributeSet() { return *m_Attributes.get(); }
121private:
122 std::unique_ptr<DotAttributeSet> m_Attributes;
123};
124
125class DotGraph : public DotBase
126{
127public:
128 explicit DotGraph(std::ostream& stream, const char* name);
129 ~DotGraph();
130private:
131};
132
133} //namespace armnn