17#ifndef FRONTENDS_P4_PARAMETERSUBSTITUTION_H_
18#define FRONTENDS_P4_PARAMETERSUBSTITUTION_H_
23#include "lib/cstring.h"
24#include "lib/enumerator.h"
25#include "lib/exceptions.h"
35 std::map<cstring, const IR::Argument *> parameterValues;
43 bool containsName(
cstring name)
const {
44 return parameterValues.find(name) != parameterValues.end();
51 void add(
const IR::Parameter *parameter,
const IR::Argument *value);
52 const IR::Argument *lookupByName(
cstring name)
const {
return get(parameterValues, name); }
54 const IR::Argument *lookup(
const IR::Parameter *param)
const {
55 return lookupByName(param->name.name);
58 bool contains(
const IR::Parameter *param)
const {
59 if (!containsName(param->name.name))
return false;
63 const IR::Parameter *findParameter(
const IR::Argument *argument)
const {
65 if (lookup(p) == argument) return p;
69 bool empty()
const {
return parameterValues.empty(); }
88 void dbprint(std::ostream &out)
const {
90 for (
auto s : *
paramList->getEnumerator())
91 out << dbp(s) <<
"=>" << dbp(lookup(s)) <<
std::endl;
94 out << dbp(s.second) <<
"=>" << dbp(lookupByName(s.first)) <<
std::endl;
Definition source_file.h:38
Definition externInstance.h:33
Definition parameterSubstitution.h:31
void populate(const IR::ParameterList *params, const IR::Vector< IR::Argument > *args)
Definition parameterSubstitution.cpp:34
Util::Enumerator< const IR::Parameter * > * getParametersInOrder() const
Definition parameterSubstitution.h:83
const IR::ParameterList * paramList
If created using populate this is non-null.
Definition parameterSubstitution.h:41
std::map< cstring, const IR::Parameter * > parametersByName
Map from parameter name to parameter.
Definition parameterSubstitution.h:37
Util::Enumerator< const IR::Parameter * > * getParametersInArgumentOrder() const
Returns parameters in the order they were added.
Definition parameterSubstitution.h:77
std::vector< const IR::Parameter * > parameters
Parameters in the order they were added.
Definition parameterSubstitution.h:39
Always empty iterator (equivalent to end())
Definition enumerator.h:261
Type-erased Enumerator interface.
Definition enumerator.h:68
Definition applyOptionsPragmas.cpp:24