28 lines
844 B
C++
28 lines
844 B
C++
#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>>;
|
|
}
|