This repository has been archived on 2023-09-10. You can view files and clone it, but cannot push or open issues/pull-requests.
joko/lib/Node.cpp

58 lines
990 B
C++
Raw Normal View History

2023-09-09 13:09:43 +00:00
#include "Node.hpp"
namespace jk
{
/*explicit*/ Node::Node(NodeType type,
std::string const& repr,
Loc const& loc)
: m_type { type }
, m_repr { repr }
, m_loc { loc }
{
}
/*virtual*/ Node::~Node()
{
}
void Node::add_child(std::shared_ptr<Node> child)
{
m_children.push_back(child);
}
std::weak_ptr<Node> Node::child(size_t index) const
{
assert(index < size());
return m_children[index];
}
std::string Node::string() const
{
std::stringstream ss;
ss << std::string(NodeTypeStr[m_type])
.substr(std::string("NODE_").size());
if (m_repr.empty() == false)
{
ss << "[" << m_repr << "]";
}
if (size() > 0)
{
ss << "(";
std::string sep;
for (auto child: m_children)
{
ss << sep << child->string();
sep = ",";
}
ss << ")";
}
return ss.str();
}
}