7 #ifndef JLM_RVSDG_TRAVERSER_HPP
8 #define JLM_RVSDG_TRAVERSER_HPP
13 #include <unordered_map>
41 template<
typename NodeType>
83 typename FrontierList::iterator
pos = {};
86 std::unordered_map<NodeType *, State>
states_;
90 template<
typename Traverser,
typename NodeType>
121 return !(*
this == other);
145 template<
typename Traverser>
180 template<
bool IsConst>
184 using NodeType = std::conditional_t<IsConst, const Node, Node>;
185 using RegionType = std::conditional_t<IsConst, const Region, Region>;
212 isOutputActivated(
const Output & output)
const;
215 markAsVisited(NodeType & node);
246 template<
bool IsConst>
250 using NodeType = std::conditional_t<IsConst, const Node, Node>;
251 using RegionType = std::conditional_t<IsConst, const Region, Region>;
278 isInputActivated(
const Input & input)
const;
281 markAsVisited(NodeType & node);
Proxy object to observe changes to a region.
Represent acyclic RVSDG subgraphs.
std::conditional_t< IsConst, const Node, Node > NodeType
TraversalTracker< NodeType > tracker_
std::conditional_t< IsConst, const Region, Region > RegionType
~BottomUpTraverserGeneric() noexcept
void onNodeDestroy(Node *node) override
~ForwardingObserver() noexcept override
void onInputCreate(Input *input) override
void onInputChange(Input *input, Output *oldOrigin, Output *newOrigin) override
void onNodeCreate(Node *node) override
void onInputDestroy(Input *input) override
TraversalTracker< NodeType > tracker_
~TopDownTraverserGeneric() noexcept
std::conditional_t< IsConst, const Node, Node > NodeType
std::conditional_t< IsConst, const Region, Region > RegionType
void checkMarkNodeVisitedIfFrontier(NodeType *node)
Marks a node visited if it is currently ready for visiting.
std::list< NodeType * > FrontierList
bool isNodeVisited(NodeType *node) const
Determines whether node has been visited already.
void decActivationCount(NodeType *node, std::size_t threshold)
Decrements activation count; removes from frontier if threshold is no longer met.
void incActivationCount(NodeType *node, std::size_t threshold)
Increments activation count; adds to frontier if threshold is met.
void checkNodeActivation(NodeType *node, std::size_t threshold)
Checks activation count whether node is ready for visiting.
void checkNodeDeactivation(NodeType *node, std::size_t threshold)
Checks activation count whether node is no longer ready for visiting.
std::unordered_map< NodeType *, State > states_
void removeNode(NodeType *node)
Removes any state associated with the given node.
constexpr TraverserIterator(Traverser &traverser, NodeType *node) noexcept
bool operator==(const TraverserIterator &other) const noexcept
pointer operator->() noexcept
reference operator*() noexcept
bool operator!=(const TraverserIterator &other) const noexcept
const TraverserIterator & operator++() noexcept
std::input_iterator_tag iterator_category
FrontierList::iterator pos