unlink the links

This commit is contained in:
Сергей Маринкевич
2025-07-23 17:44:25 +07:00
parent d17c80a195
commit 55ef99c848
10 changed files with 58 additions and 44 deletions
+8 -9
View File
@@ -1,17 +1,16 @@
#pragma once
#include <memory>
#include <vector>
#include "ifaces/INode.h"
using LinkPtr = std::shared_ptr<ILink>;
#include "ifaces/ILinkMixin.h"
template <class TElem>
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<NodePtr>& getChildren() const = 0;
virtual void addChild(const NodePtr& child) = 0;
virtual void removeChild(const NodePtr& child) = 0;
virtual std::shared_ptr<TElem> getNode() const = 0;
virtual std::shared_ptr<TElem> getParent() const = 0;
virtual void setParent(const std::shared_ptr<TElem>& parent) = 0;
virtual const std::vector<std::shared_ptr<TElem>>& getChildren() const = 0;
virtual void addChild(const std::shared_ptr<TElem>& child) = 0;
virtual void removeChild(const std::shared_ptr<TElem>& child) = 0;
};
+7 -2
View File
@@ -1,11 +1,16 @@
#pragma once
#include <memory>
#include "decls.h"
#include "ifaces/ILink.h"
class ILinkMixin;
using MixinPtr = std::shared_ptr<ILinkMixin>;
using LinkPtr = std::shared_ptr<ILink<ILinkMixin>>;
class ILinkMixin {
public:
virtual ~ILinkMixin() = default;
virtual void linkChild(const NodePtr& child) = 0;
virtual void linkChild(const MixinPtr& child) = 0;
virtual void unlinkParent() = 0;
virtual LinkPtr getLink() = 0;
};
+2
View File
@@ -2,6 +2,8 @@
#include "ifaces/ILinkMixin.h"
#include <string>
class INode;
using NodePtr = std::shared_ptr<INode>;
class INode : public virtual ILinkMixin {