2
* Copyright Peter G. Jensen, all rights reserved.
6
* File: PlaceUseVisitor.cpp
7
* Author: Peter G. Jensen <root@petergjoel.dk>
9
* Created on April 23, 2020, 8:44 PM
12
#include "PetriEngine/TAR/PlaceUseVisitor.h"
14
namespace PetriEngine {
17
PlaceUseVisitor::PlaceUseVisitor(size_t places)
23
void PlaceUseVisitor::_accept(const NotCondition* element)
25
(*element)[0]->visit(*this);
28
void PlaceUseVisitor::_accept(const AndCondition* element)
30
for(auto& e : *element)
34
void PlaceUseVisitor::_accept(const OrCondition* element)
36
for(auto& e : *element)
40
void PlaceUseVisitor::_accept(const LessThanCondition* element)
43
(*element)[i]->visit(*this);
46
void PlaceUseVisitor::_accept(const LessThanOrEqualCondition* element)
49
(*element)[i]->visit(*this);
52
void PlaceUseVisitor::_accept(const GreaterThanOrEqualCondition* element)
55
(*element)[i]->visit(*this);
58
void PlaceUseVisitor::_accept(const GreaterThanCondition* element)
61
(*element)[i]->visit(*this);
64
void PlaceUseVisitor::_accept(const EqualCondition* element)
67
(*element)[i]->visit(*this);
70
void PlaceUseVisitor::_accept(const NotEqualCondition* element)
73
(*element)[i]->visit(*this);
76
void PlaceUseVisitor::_accept(const CompareConjunction* element)
78
for(auto& e : *element)
79
_in_use[e._place] = true;
82
void PlaceUseVisitor::visitCommutativeExpr(const CommutativeExpr* element)
84
for(auto& p : element->places())
85
_in_use[p.first] = true;
86
for(auto& e : element->expressions())
90
void PlaceUseVisitor::_accept(const PlusExpr* element)
92
visitCommutativeExpr(element);
95
void PlaceUseVisitor::_accept(const SubtractExpr* element)
97
for(auto& e : element->expressions())
101
void PlaceUseVisitor::_accept(const MultiplyExpr* element)
103
visitCommutativeExpr(element);
106
void PlaceUseVisitor::_accept(const MinusExpr* element)
108
(*element)[0]->visit(*this);
111
void PlaceUseVisitor::_accept(const UnfoldedIdentifierExpr* element)
113
_in_use[element->offset()] = true;
116
void PlaceUseVisitor::_accept(const UnfoldedUpperBoundsCondition* element)
118
for(auto& p : element->places())
119
_in_use[p._place] = true;
122
void PlaceUseVisitor::_accept(const EUCondition* el)
124
(*el)[0]->visit(*this);
125
(*el)[1]->visit(*this);
128
void PlaceUseVisitor::_accept(const AUCondition* el)
130
(*el)[0]->visit(*this);
131
(*el)[1]->visit(*this);
134
void PlaceUseVisitor::_accept(const EFCondition* el) { (*el)[0]->visit(*this); }
135
void PlaceUseVisitor::_accept(const EGCondition* el) { (*el)[0]->visit(*this); }
136
void PlaceUseVisitor::_accept(const AGCondition* el) { (*el)[0]->visit(*this); }
137
void PlaceUseVisitor::_accept(const AFCondition* el) { (*el)[0]->visit(*this); }
138
void PlaceUseVisitor::_accept(const EXCondition* el) { (*el)[0]->visit(*this); }
139
void PlaceUseVisitor::_accept(const AXCondition* el) { (*el)[0]->visit(*this); }
141
// shallow elements, neither of these should exist in a compiled expression
142
void PlaceUseVisitor::_accept(const LiteralExpr* element) {}
143
void PlaceUseVisitor::_accept(const DeadlockCondition*) {}