#ifndef NODE_H #define NODE_H #include #include #include #include #include "DefinitionKind.h" #include "Edge.h" #include "Token.h" #include "NameHierarchy.h" #include "NodeType.h" class Node : public Token { public: Node(Id id, NodeType type, NameHierarchy nameHierarchy, DefinitionKind definitionKind); Node(const Node& other); virtual ~Node(); NodeType getType() const; void setType(NodeType type); bool isType(NodeType::TypeMask mask) const; std::wstring getName() const; std::wstring getFullName() const; const NameHierarchy& getNameHierarchy() const; bool isDefined() const; bool isImplicit() const; bool isExplicit() const; size_t getChildCount() const; void setChildCount(size_t childCount); size_t getEdgeCount() const; void addEdge(Edge* edge); void removeEdge(Edge* edge); Node* getParentNode() const; Node* getLastParentNode(); Edge* getMemberEdge() const; bool isParentOf(const Node* node) const; Edge* findEdge(std::function func) const; Edge* findEdgeOfType(Edge::TypeMask mask) const; Edge* findEdgeOfType(Edge::TypeMask mask, std::function func) const; Node* findChildNode(std::function func) const; void forEachEdge(std::function func) const; void forEachEdgeOfType(Edge::TypeMask mask, std::function func) const; void forEachChildNode(std::function func) const; void forEachNodeRecursive(std::function func) const; // Token implementation. virtual bool isNode() const override; virtual bool isEdge() const override; // Logging. virtual std::wstring getReadableTypeString() const override; std::wstring getAsString() const; private: void operator=(const Node&); std::map m_edges; NodeType m_type; const NameHierarchy m_nameHierarchy; DefinitionKind m_definitionKind; size_t m_childCount; }; std::wostream& operator<<(std::wostream& ostream, const Node& node); #endif // NODE_H