P4C
The P4 Compiler
Loading...
Searching...
No Matches
externs.h
1#ifndef BACKENDS_P4TOOLS_MODULES_TESTGEN_CORE_EXTERNS_H_
2#define BACKENDS_P4TOOLS_MODULES_TESTGEN_CORE_EXTERNS_H_
3
4#include <sys/types.h>
5
6#include <functional>
7#include <list>
8#include <map>
9#include <tuple>
10#include <utility>
11#include <vector>
12
13#include "ir/id.h"
14#include "ir/ir.h"
15#include "ir/vector.h"
16#include "lib/cstring.h"
17
18#include "backends/p4tools/modules/testgen/core/small_step/small_step.h"
19#include "backends/p4tools/modules/testgen/lib/execution_state.h"
20
21namespace P4Tools::P4Testgen {
22
25 public:
40 bool exec(const IR::MethodCallExpression *call, const IR::Expression *receiver, IR::ID &name,
41 const IR::Vector<IR::Argument> *args, const ExecutionState &state,
42 SmallStepEvaluator::Result &result) const;
43
46 using MethodImpl = std::function<void(const IR::MethodCallExpression *, const IR::Expression *,
48 const ExecutionState &, SmallStepEvaluator::Result &)>;
49
50 private:
54 std::map<cstring, std::map<uint, std::list<std::pair<std::vector<cstring>, MethodImpl>>>> impls;
55
59 static bool matches(const std::vector<cstring> &paramNames,
60 const IR::Vector<IR::Argument> *args);
61
62 public:
68 using ImplList = std::list<std::tuple<cstring, std::vector<cstring>, MethodImpl>>;
69
70 explicit ExternMethodImpls(const ImplList &implList);
71};
72
73} // namespace P4Tools::P4Testgen
74
75#endif /* BACKENDS_P4TOOLS_MODULES_TESTGEN_CORE_EXTERNS_H_ */
Definition vector.h:56
Represents state of execution after having reached a program point.
Definition execution_state.h:34
Encapsulates a set of extern method implementations.
Definition externs.h:24
std::list< std::tuple< cstring, std::vector< cstring >, MethodImpl > > ImplList
Definition externs.h:68
std::function< void(const IR::MethodCallExpression *, const IR::Expression *, IR::ID &, const IR::Vector< IR::Argument > *, const ExecutionState &, SmallStepEvaluator::Result &)> MethodImpl
Definition externs.h:46
bool exec(const IR::MethodCallExpression *call, const IR::Expression *receiver, IR::ID &name, const IR::Vector< IR::Argument > *args, const ExecutionState &state, SmallStepEvaluator::Result &result) const
Definition externs.cpp:18
Definition id.h:28