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