poperdolilo

This commit is contained in:
Сергей Маринкевич
2025-07-21 18:14:27 +07:00
parent 8b60fc0183
commit b2be9b51ca
10 changed files with 230 additions and 0 deletions
+20
View File
@@ -0,0 +1,20 @@
#pragma once
#include <memory>
#include <vector>
// Forward declarations
class INode;
class ILink;
using NodePtr = std::shared_ptr<INode>;
using LinkPtr = std::shared_ptr<ILink>;
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<LinkPtr>& getChildren() const = 0;
virtual void addChild(const LinkPtr& child) = 0;
virtual void removeChild(const LinkPtr& child) = 0;
};
+16
View File
@@ -0,0 +1,16 @@
#pragma once
#include <memory>
// Forward declarations для избежания циклических #include
class INode;
class ILink;
using NodePtr = std::shared_ptr<INode>;
using LinkPtr = std::shared_ptr<ILink>;
class ILinkMixin {
public:
virtual ~ILinkMixin() = default;
virtual void linkChild(const NodePtr& child) = 0;
virtual void unlinkParent() = 0;
virtual LinkPtr getLink() = 0;
};
+11
View File
@@ -0,0 +1,11 @@
#pragma once
#include "ifaces/ILinkMixin.h"
#include <string>
// INode является ILinkMixin, поэтому полный #include здесь оправдан
class INode : public ILinkMixin {
public:
~INode() override = default;
virtual const std::string& name() const = 0;
virtual NodePtr getSelf() = 0;
};