#pragma once #include #include // Forward declarations class INode; class ILink; using NodePtr = std::shared_ptr; using LinkPtr = std::shared_ptr; class ILink { public: virtual ~ILink() = default; virtual NodePtr getNode() const = 0; virtual NodePtr getParent() const = 0; virtual void setParent(const NodePtr& parent) = 0; virtual const std::vector& getChildren() const = 0; virtual void addChild(const NodePtr& child) = 0; virtual void removeChild(const NodePtr& child) = 0; };