iters
Сергей Маринкевич 5 months ago
parent b9cf6623d1
commit dc9bfe51ab

@ -4,7 +4,6 @@
#include <mutex> #include <mutex>
#include <algorithm> #include <algorithm>
#include <stdexcept> #include <stdexcept>
#include <type_traits>
class INode; class INode;
class ILink; class ILink;
@ -134,7 +133,8 @@ private:
mutable std::mutex lock_; mutable std::mutex lock_;
}; };
// Типизированная связь один ко многим // Note: TypedOneToManyLink ensures type-safety on child linkage
template <typename TChild> template <typename TChild>
class TypedOneToManyLink : public OneToManyLink { class TypedOneToManyLink : public OneToManyLink {
public: public:
@ -149,7 +149,8 @@ public:
} }
}; };
// Базовая реализация LinkMixin // Note: BaseLinkMixin is used for direct eager link composition (non-lazy)
class BaseLinkMixin : public ILinkMixin { class BaseLinkMixin : public ILinkMixin {
public: public:
explicit BaseLinkMixin(NodePtr self) { explicit BaseLinkMixin(NodePtr self) {
@ -182,7 +183,8 @@ protected:
LinkPtr link_; LinkPtr link_;
}; };
// Ленивый LinkMixin с выбором стратегии по типу // Note: LazyLinkMixin starts with LeafLink and upgrades dynamically
template <typename TNode> template <typename TNode>
class LazyLinkMixin : public ILinkMixin { class LazyLinkMixin : public ILinkMixin {
public: public:
@ -243,7 +245,6 @@ private:
LinkPtr link_; LinkPtr link_;
}; };
// Пример узла
class SimpleNode : public INode, public std::enable_shared_from_this<SimpleNode> { class SimpleNode : public INode, public std::enable_shared_from_this<SimpleNode> {
public: public:
static std::shared_ptr<SimpleNode> create(std::string name) { static std::shared_ptr<SimpleNode> create(std::string name) {
@ -273,7 +274,6 @@ private:
LinkMixinPtr mixin_; LinkMixinPtr mixin_;
}; };
// Пример использования
void printTree(const LinkPtr& link, int indent = 0) { void printTree(const LinkPtr& link, int indent = 0) {
for (int i = 0; i < indent; ++i) std::cout << " "; for (int i = 0; i < indent; ++i) std::cout << " ";
auto node = link->getNode(); auto node = link->getNode();

Loading…
Cancel
Save