1#ifndef BACKENDS_P4TOOLS_MODULES_TESTGEN_LIB_CONCOLIC_H_
2#define BACKENDS_P4TOOLS_MODULES_TESTGEN_LIB_CONCOLIC_H_
13#include "backends/p4tools/common/lib/model.h"
16#include "ir/visitor.h"
17#include "lib/cstring.h"
18#include "lib/ordered_map.h"
20#include "backends/p4tools/modules/testgen/lib/execution_state.h"
22namespace P4::P4Tools::P4Testgen {
29using ConcolicVariableMap =
30 ordered_map<std::variant<IR::ConcolicVariable, const IR::Expression *>,
const IR::Expression *>;
33class ConcolicMethodImpls {
35 using MethodImpl = std::function<void(
37 const Model &evaluatedModel, ConcolicVariableMap *resolvedConcolicVariables)>;
42 static bool matches(
const std::vector<cstring> ¶mNames,
46 using ImplList = std::list<std::tuple<cstring, std::vector<cstring>, MethodImpl>>;
48 explicit ConcolicMethodImpls(
const ImplList &implList);
50 bool exec(
cstring concolicMethodName,
const IR::ConcolicVariable *var,
52 ConcolicVariableMap *resolvedConcolicVariables)
const;
54 void add(
const ImplList &implList);
57class ConcolicResolver :
public Inspector {
64 ConcolicVariableMap resolvedConcolicVariables);
66 const ConcolicVariableMap *getResolvedConcolicVariables()
const;
69 bool preorder(
const IR::ConcolicVariable *var)
override;
75 const Model &evaluatedModel;
79 ConcolicVariableMap resolvedConcolicVariables;
88 static const ConcolicMethodImpls::ImplList *getCoreConcolicMethodImpls();
Definition ir/vector.h:59
Definition ordered_map.h:32