7#ifndef BACKENDS_P4TOOLS_COMMON_LIB_MODEL_H_
8#define BACKENDS_P4TOOLS_COMMON_LIB_MODEL_H_
15#include "ir/visitor.h"
43 const IR::Literal *preorder(IR::StateVariable *var)
override;
44 const IR::Literal *preorder(IR::SymbolicVariable *var)
override;
45 const IR::Literal *preorder(IR::TaintExpression *var)
override;
47 explicit SubstVisitor(
const Model &model,
bool doComplete);
52 using ExpressionMap = std::map<const IR::Expression *, const IR::Literal *>;
68 const IR::Literal *
evaluate(
const IR::Expression *expr,
bool doComplete,
69 ExpressionMap *resolvedExpressions =
nullptr)
const;
73 const IR::StructExpression *evaluateStructExpr(
74 const IR::StructExpression *structExpr,
bool doComplete,
75 ExpressionMap *resolvedExpressions =
nullptr)
const;
79 const IR::BaseListExpression *evaluateListExpr(
80 const IR::BaseListExpression *listExpr,
bool doComplete,
81 ExpressionMap *resolvedExpressions =
nullptr)
const;
86 [[nodiscard]]
const IR::Expression *
get(
const IR::SymbolicVariable *var,
bool checked)
const;
91 void set(
const IR::SymbolicVariable *var,
const IR::Expression *val);
P4::flat_map< const IR::SymbolicVariable *, const IR::Expression *, IR::SymbolicVariableLess > SymbolicMapping
This type maps symbolic variables to their value assigned by the solver.
Definition solver.h:26