15#ifndef IR_IR_TRAVERSAL_H_
16#define IR_IR_TRAVERSAL_H_
17#define IR_IR_TRAVERSAL_INTERNAL_ENABLE
21namespace P4::IR::Traversal {
28 explicit Assign(
const T &value) : value(value) {}
42 explicit Index(
size_t value) : value(value) {}
49#include "ir-traversal-internal.h"
51namespace P4::IR::Traversal {
111template <
typename Obj,
typename... Selectors>
112Obj *modify(Obj *obj, Selectors &&...selectors) {
113 return Detail::Traverse::modify(obj, std::forward<Selectors>(selectors)...);
118template <
typename Obj,
typename... Selectors>
119Obj *apply(
const Obj *obj, Selectors &&...selectors) {
120 return Detail::Traverse::modify(obj->clone(), std::forward<Selectors>(selectors)...);
125#undef IR_IR_TRAVERSAL_INTERNAL_ENABLE