#pragma once #include "ifaces/ILink.h" #include "ifaces/INode.h" #include class BaseLink : public ILink { public: explicit BaseLink(NodePtr node) : owner_node_(node) {} NodePtr getNode() const override { return owner_node_.lock(); } NodePtr getParent() const override { return parent_.lock(); } void setParent(const NodePtr& parent) override { parent_ = parent; } const std::vector& getChildren() const override { return children_; } void removeChild(const NodePtr& child) override { children_.erase(std::remove(children_.begin(), children_.end(), child), children_.end()); } ~BaseLink() override { std::cout << "--- Destructor called for: " << "BaseLink" << "\n"; } protected: std::vector children_; std::weak_ptr owner_node_; std::weak_ptr parent_; };