blob: dfb8c7f22e8b0142d2b7f1a961d54dc05bebde36 [file] [log] [blame]
//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//
#pragma once
#include <ostream>
#include <vector>
#include <memory>
namespace armnn
{
class DotBase
{
public:
explicit DotBase(std::ostream& stream)
: m_Stream(stream) {}
std::ostream& GetStream() { return m_Stream; }
private:
std::ostream& m_Stream;
};
class HtmlSection : public DotBase
{
public:
explicit HtmlSection(std::ostream& stream)
: DotBase(stream) { GetStream() << "<";}
~HtmlSection() { GetStream() << ">"; }
};
class HtmlSimpleTag : public DotBase
{
public:
explicit HtmlSimpleTag(std::ostream& stream, const char* name)
: DotBase(stream)
, m_Name(name){ GetStream() << "<" << m_Name << ">"; }
~HtmlSimpleTag() { GetStream() << "</" << m_Name << ">"; }
private:
const char* m_Name;
};
class HtmlBold : public HtmlSimpleTag
{
public:
explicit HtmlBold(std::ostream &stream)
: HtmlSimpleTag(stream, "B") {}
};
class HtmlFont : public DotBase
{
public:
explicit HtmlFont(std::ostream& stream, int fontSize, const char* color, const char* face);
explicit HtmlFont(std::ostream& stream);
~HtmlFont();
};
class DotAttributeSet : public DotBase
{
public:
explicit DotAttributeSet(std::ostream& stream);
~DotAttributeSet();
DotAttributeSet & AddAttribute(const std::string& name, const std::stringstream& value);
DotAttributeSet & AddAttribute(const std::string& name, int value);
DotAttributeSet & AddAttribute(const std::string& name, const std::string& value);
private:
std::vector<std::string> m_Attributes;
};
class DotEdge : public DotBase
{
public:
explicit DotEdge(std::ostream& stream, unsigned int fromNodeId, unsigned int toNodeId);
~DotEdge();
DotAttributeSet& GetAttributeSet() { return *m_Attributes.get(); }
private:
std::unique_ptr<DotAttributeSet> m_Attributes;
};
class NodeContent : public DotBase
{
public:
explicit NodeContent(std::ostream& stream);
NodeContent & SetName(const std::string & name);
NodeContent & AddContent(const std::string & content);
~NodeContent();
private:
std::string m_Name;
std::vector<std::string> m_Contents;
};
class DotNode : public DotBase
{
public:
explicit DotNode(std::ostream& stream, unsigned int nodeId, const char* label);
~DotNode();
NodeContent& GetContents() { return *m_Contents.get(); }
DotAttributeSet& GetAttributeSet() { return *m_Attributes.get(); }
private:
std::unique_ptr<NodeContent> m_Contents;
std::unique_ptr<DotAttributeSet> m_Attributes;
};
class DotDefaults : public DotBase
{
public:
explicit DotDefaults(std::ostream& stream, const char* type);
~DotDefaults();
DotAttributeSet& GetAttributeSet() { return *m_Attributes.get(); }
private:
std::unique_ptr<DotAttributeSet> m_Attributes;
};
class DotGraph : public DotBase
{
public:
explicit DotGraph(std::ostream& stream, const char* name);
~DotGraph();
private:
};
} //namespace armnn