SPARK  0.1.0
A general purpose game engine written in C++.
Loading...
Searching...
No Matches
Traverser.h
1#pragma once
2
3namespace spark::patterns::details
4{
16 template <typename NodeType, typename... FnArgsTypes>
18 {
19 public:
26 template <typename Traverser>
27 static void exec(NodeType* container, Traverser& traverser, FnArgsTypes&&... args)
28 {
29 for (auto* child : container->children())
30 {
31 if (!child->children().empty())
32 {
33 auto* sub_container = static_cast<std::conditional_t<std::is_const_v<NodeType>, const NodeType, NodeType>*>(child);
34 traverser.pre(child, std::forward<FnArgsTypes>(args)...);
35 traverser.apply(child, std::forward<FnArgsTypes>(args)...);
36 exec(sub_container, traverser, std::forward<FnArgsTypes>(args)...);
37 traverser.post(child, std::forward<FnArgsTypes>(args)...);
38 } else
39 traverser.apply(child, std::forward<FnArgsTypes>(args)...);
40 }
41 }
42 };
43}
A base class for any traverser used by the traverse_tree function.
Definition Traverser.h:17
A generic tree traverser caller that can be used to traverse any Composite.
Definition Traverser.h:18
static void exec(NodeType *container, Traverser &traverser, FnArgsTypes &&... args)
Traverses the given tree using the given traverser.
Definition Traverser.h:27