add iterators
New iterators can be used to iterate through Nodes. Squashed commit of the following: commit 602ed679631647dd1c8874b0b0145fcb09458341 Author: GRayHook <s@marinkevich.ru> Date: Fri Aug 1 19:36:46 2025 +0700 fup after CR commit08f7b59aa7Author: GRayHook <s@marinkevich.ru> Date: Fri Aug 1 19:20:48 2025 +0700 normalize members of iterator commit038cbb73f4Author: GRayHook <s@marinkevich.ru> Date: Fri Aug 1 18:57:08 2025 +0700 bump commit0f93988fb6Author: GRayHook <s@marinkevich.ru> Date: Fri Aug 1 11:32:35 2025 +0700 tmp
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
|
||||
#include "ifaces/INode.h"
|
||||
|
||||
#include "iterators/DFSIterator.h"
|
||||
#include "iterators/BFSIterator.h"
|
||||
|
||||
namespace traversal {
|
||||
/// \brief Фабрика итераторов узлов дерева.
|
||||
/// \tparam T Тип алгоритма для обхода дерева.
|
||||
/// Конструирует итерируемый объект с заданным алгоритмом обхода. Например, в ширину
|
||||
/// или глубину.
|
||||
template<typename Policy>
|
||||
class Traversal {
|
||||
INode* start;
|
||||
|
||||
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); }
|
||||
};
|
||||
|
||||
using DFS = Traversal<DFSIterator<INode>>;
|
||||
using BFS = Traversal<BFSIterator<INode>>;
|
||||
}
|
||||
Reference in New Issue
Block a user