P4C
The P4 Compiler
Loading...
Searching...
No Matches
ir-traversal.h
1/*
2 * SPDX-FileCopyrightText: 2024 Intel Corporation.
3 * Copyright 2024-present Intel Corporation.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
14
15#ifndef IR_IR_TRAVERSAL_H_
16#define IR_IR_TRAVERSAL_H_
17#define IR_IR_TRAVERSAL_INTERNAL_ENABLE
18
19#include <cstddef>
20
21namespace P4::IR::Traversal {
22
26template <typename T>
27struct Assign {
28 explicit Assign(const T &value) : value(value) {}
29 T value;
30};
31
41struct Index {
42 explicit Index(size_t value) : value(value) {}
43 size_t value;
44};
45
46} // namespace P4::IR::Traversal
47
48// Put the internals out of the main file to increase its readability.
49#include "ir-traversal-internal.h"
50
51namespace P4::IR::Traversal {
52
111template <typename Obj, typename... Selectors>
112Obj *modify(Obj *obj, Selectors &&...selectors) {
113 return Detail::Traverse::modify(obj, std::forward<Selectors>(selectors)...);
114}
115
118template <typename Obj, typename... Selectors>
119Obj *apply(const Obj *obj, Selectors &&...selectors) {
120 return Detail::Traverse::modify(obj->clone(), std::forward<Selectors>(selectors)...);
121}
122
123} // namespace P4::IR::Traversal
124
125#undef IR_IR_TRAVERSAL_INTERNAL_ENABLE
126#endif // IR_IR_TRAVERSAL_H_