Compare commits
19 Commits
e49c3fd4a1
..
iters
| Author | SHA1 | Date | |
|---|---|---|---|
| 08f7b59aa7 | |||
| 038cbb73f4 | |||
| 0f93988fb6 | |||
| 0f9d73366b | |||
| e5dc6f7502 | |||
| c228caaa45 | |||
| 55ef99c848 | |||
| d17c80a195 | |||
| f994303cb5 | |||
| 0912566c5f | |||
| f5f78308bd | |||
| 3801a5dc0b | |||
| 44480a7128 | |||
| b2be9b51ca | |||
| 8b60fc0183 | |||
| fd34b335c1 | |||
| 60bbaae0c0 | |||
| dc9bfe51ab | |||
| b9cf6623d1 |
@@ -0,0 +1,21 @@
|
||||
#pragma once
|
||||
|
||||
#include "iterators/BaseIterator.h"
|
||||
|
||||
template <typename T>
|
||||
struct IteratorForward : public BaseIterator<T> {
|
||||
explicit IteratorForward(T* ptr) : Iterator<T>(first(ptr)) {}
|
||||
|
||||
static T* first(T* node) {
|
||||
return node;
|
||||
}
|
||||
|
||||
static T* next(T* node) {
|
||||
return node ? node->get_next() : nullptr;
|
||||
}
|
||||
|
||||
Iterator<T>& operator++() override {
|
||||
this->current = next(this->current);
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
@@ -16,4 +16,5 @@ public:
|
||||
virtual const std::vector<ElemPtr>& children() = 0;
|
||||
virtual ElemPtr parent() = 0;
|
||||
virtual LinkPtr getLink() = 0;
|
||||
//virtual operator ElemPtr() const = 0;
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#pragma once
|
||||
#include <queue>
|
||||
#include <stack>
|
||||
|
||||
#include "iterators/BaseIterator.h"
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#pragma once
|
||||
#include <tuple>
|
||||
|
||||
#include "ifaces/IIterator.h"
|
||||
|
||||
|
||||
@@ -1,27 +1,22 @@
|
||||
#pragma once
|
||||
#include <queue>
|
||||
|
||||
#include "ifaces/INode.h"
|
||||
|
||||
#include "iterators/DFSIterator.h"
|
||||
#include "iterators/BFSIterator.h"
|
||||
|
||||
namespace traversal {
|
||||
/// \brief Фабрика итераторов узлов дерева.
|
||||
/// \tparam T Тип алгоритма для обхода дерева.
|
||||
/// Конструирует итерируемый объект с заданным алгоритмом обхода. Например, в ширину
|
||||
/// или глубину.
|
||||
template<typename Policy>
|
||||
class Traversal {
|
||||
INode* start;
|
||||
template<typename Policy>
|
||||
class Traversal {
|
||||
INode* start;
|
||||
|
||||
public:
|
||||
explicit Traversal(INode* start) : start(start) {}
|
||||
explicit Traversal(NodePtr start) : start(start.get()) {}
|
||||
public:
|
||||
explicit Traversal(INode* start) : start(start) {}
|
||||
explicit Traversal(NodePtr start) : start(start.get()) {}
|
||||
|
||||
Policy begin() const { return Policy(start); }
|
||||
Policy end() const { return Policy(nullptr); }
|
||||
};
|
||||
Policy begin() const { return Policy(start); }
|
||||
Policy end() const { return Policy(nullptr); }
|
||||
};
|
||||
|
||||
using DFS = Traversal<DFSIterator<INode>>;
|
||||
using BFS = Traversal<BFSIterator<INode>>;
|
||||
}
|
||||
using TraversalDFS = Traversal<DFSIterator<INode>>;
|
||||
using TraversalBFS = Traversal<BFSIterator<INode>>;
|
||||
|
||||
@@ -34,7 +34,7 @@ public:
|
||||
}
|
||||
|
||||
~BaseLink() override {
|
||||
Logger::get("ConDes").dbg("--- Destructor called for: BaseLink");
|
||||
Logger::get("Link").dbg("--- Destructor called for: BaseLink");
|
||||
}
|
||||
protected:
|
||||
std::vector<ElemPtr> children_;
|
||||
|
||||
@@ -20,7 +20,7 @@ public:
|
||||
void removeChild(const ElemPtr& child) override { }
|
||||
|
||||
~NotImplementedLink() override {
|
||||
Logger::get("ConDes").dbg("--- Destructor called for: NotImplementedLink");
|
||||
Logger::get("Link").dbg("--- Destructor called for: NotImplementedLink");
|
||||
}
|
||||
private:
|
||||
std::vector<ElemPtr> empty_;
|
||||
|
||||
@@ -14,7 +14,7 @@ class BaseLinkMixin : public virtual ILinkMixin<INode>,
|
||||
|
||||
public:
|
||||
~BaseLinkMixin() override {
|
||||
Logger::get("ConDes").dbg("--- Destructor called for: BaseLinkMixin");
|
||||
Logger::get("Mixin").dbg("--- Destructor called for: BaseLinkMixin");
|
||||
}
|
||||
|
||||
void linkChild(const ElemPtr& child) override {
|
||||
|
||||
@@ -16,7 +16,7 @@ class HierarchicalLinkMixin : public LazyLinkMixin<OneToOneLink<TElem>> {
|
||||
|
||||
public:
|
||||
~HierarchicalLinkMixin() override {
|
||||
Logger::get("ConDes").dbg("--- Destructor called for: HierarchicalLinkMixin");
|
||||
Logger::get("Mixin").dbg("--- Destructor called for: HierarchicalLinkMixin");
|
||||
}
|
||||
|
||||
void linkChild(const ElemPtr& child) override {
|
||||
|
||||
@@ -25,7 +25,7 @@ public:
|
||||
LazyLinkMixin() {}
|
||||
|
||||
~LazyLinkMixin() override {
|
||||
Logger::get("ConDes").info("--- Destructor called for: LazyLinkMixin");
|
||||
Logger::get("Mixin").dbg("--- Destructor called for: LazyLinkMixin");
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#pragma once
|
||||
#include <iostream>
|
||||
|
||||
#include "ifaces/INode.h"
|
||||
#include "Logger.h"
|
||||
@@ -8,12 +9,12 @@
|
||||
class BaseNode : public virtual INode {
|
||||
public:
|
||||
BaseNode(std::string name) : name_(std::move(name)) {
|
||||
Logger::get("ConDes").dbg(std::string("--- Base constructor called for: ") + name_);
|
||||
Logger::get("Node").dbg(std::string("--- Base constructor called for: ") + name_);
|
||||
}
|
||||
const std::string& name() const override { return name_; }
|
||||
const std::string& kind() const override { return kind_; }
|
||||
~BaseNode() {
|
||||
Logger::get("ConDes").info(std::string("--- Base destructor called for: ") + name_);
|
||||
Logger::get("Node").dbg(std::string("--- Base destructor called for: ") + name_);
|
||||
}
|
||||
protected:
|
||||
std::string name_;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#pragma once
|
||||
#include <iostream>
|
||||
|
||||
#include "nodes/BaseNode.h"
|
||||
#include "mixins/HierarchicalLinkMixin.h"
|
||||
@@ -10,9 +11,9 @@ class ComplexNode : public BaseNode,
|
||||
virtual public HierarchicalLinkMixin<INode> {
|
||||
public:
|
||||
~ComplexNode() {
|
||||
Logger::get("ConDes").dbg(std::string("--- Complex destructor called for: ") + name_);
|
||||
Logger::get("Node").dbg(std::string("--- Complex destructor called for: ") + name_);
|
||||
}
|
||||
ComplexNode(std::string name) : BaseNode(std::move(name)) {
|
||||
Logger::get("ConDes").dbg(std::string("--- Complex constructor called for: ") + name_);
|
||||
Logger::get("Node").dbg(std::string("--- Complex constructor called for: ") + name_);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#pragma once
|
||||
#include <iostream>
|
||||
|
||||
#include "nodes/BaseNode.h"
|
||||
#include "mixins/LazyLinkMixin.h"
|
||||
@@ -11,9 +12,9 @@ class SimpleNode : public BaseNode,
|
||||
virtual public LazyLinkMixin<OneToOneLink<INode>> {
|
||||
public:
|
||||
~SimpleNode() {
|
||||
Logger::get("ConDes").dbg(std::string("--- Simple destructor called for: ") + name_);
|
||||
Logger::get("Node").dbg(std::string("--- Simple destructor called for: ") + name_);
|
||||
}
|
||||
SimpleNode(std::string name) : BaseNode(std::move(name)) {
|
||||
Logger::get("ConDes").dbg(std::string("--- Simple constructor called for: ") + name_);
|
||||
Logger::get("Node").dbg(std::string("--- Simple constructor called for: ") + name_);
|
||||
}
|
||||
};
|
||||
|
||||
+3
-8
@@ -14,15 +14,15 @@ void printNode(INode& node, size_t level) {
|
||||
}
|
||||
|
||||
void printTreeBFS(INode& node) {
|
||||
for (auto& child : traversal::BFS(&node))
|
||||
for (auto& child : TraversalBFS(&node))
|
||||
printNode(*child, 0);
|
||||
}
|
||||
void printTreeList(INode& node) {
|
||||
for (auto& child : traversal::DFS(&node))
|
||||
for (auto& child : TraversalDFS(&node))
|
||||
printNode(*child, 0);
|
||||
}
|
||||
void printTreeLadder(INode& node) {
|
||||
for (auto& [child, level] : traversal::DFS(&node))
|
||||
for (auto& [child, level] : TraversalDFS(&node))
|
||||
printNode(*child, level);
|
||||
}
|
||||
|
||||
@@ -31,10 +31,6 @@ int main() {
|
||||
Logger::suppressCategory("Node");
|
||||
Logger::suppressCategory("Link");
|
||||
Logger::suppressCategory("Mixin");
|
||||
|
||||
Logger::suppressCategory("ConDes");
|
||||
Logger::setMinSeverity("ConDes", Logger::Severity::Info);
|
||||
|
||||
auto& logger = Logger::get("MAIN");
|
||||
logger.info("Entering main scope...");
|
||||
|
||||
@@ -141,7 +137,6 @@ int main() {
|
||||
}
|
||||
|
||||
logger.info("Exited main scope. All smart pointers destroyed.");
|
||||
logger.info("(It don't? Check ConDes logger)");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user