#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 LinkPtr getParent() const = 0; virtual void setParent(const LinkPtr& parent) = 0; virtual const std::vector& getChildren() const = 0; virtual void addChild(const LinkPtr& child) = 0; virtual void removeChild(const LinkPtr& child) = 0; };