Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
Transition.cpp
Go to the documentation of this file.
1#include "Transition.h"
2
4
5namespace storm {
6namespace gspn {
7
8void Transition::setInputArcMultiplicity(storm::gspn::Place const& place, uint64_t multiplicity) {
9 inputMultiplicities[place.getID()] = multiplicity;
10}
11
13 if (existsInputArc(place)) {
14 inputMultiplicities.erase(place.getID());
15 return true;
16 } else {
17 return false;
18 }
19}
20
22 return inputMultiplicities.end() != inputMultiplicities.find(place.getID());
23}
24
25void Transition::setOutputArcMultiplicity(storm::gspn::Place const& place, uint64_t multiplicity) {
26 outputMultiplicities[place.getID()] = multiplicity;
27}
28
30 if (existsOutputArc(place)) {
31 outputMultiplicities.erase(place.getID());
32 return true;
33 } else {
34 return false;
35 }
36}
37
39 return outputMultiplicities.end() != outputMultiplicities.find(place.getID());
40}
41
42void Transition::setInhibitionArcMultiplicity(storm::gspn::Place const& place, uint64_t multiplicity) {
43 inhibitionMultiplicities[place.getID()] = multiplicity;
44}
45
47 if (existsInhibitionArc(place)) {
48 inhibitionMultiplicities.erase(place.getID());
49 return true;
50 } else {
51 return false;
52 }
53}
54
56 return inhibitionMultiplicities.end() != inhibitionMultiplicities.find(place.getID());
57}
58
59bool Transition::isEnabled(storm::gspn::Marking const& marking) const {
60 auto inputIterator = inputMultiplicities.cbegin();
61 while (inputIterator != inputMultiplicities.cend()) {
62 if (marking.getNumberOfTokensAt(inputIterator->first) < inputIterator->second) {
63 return false;
64 }
65
66 ++inputIterator;
67 }
68
69 auto inhibitionIterator = inhibitionMultiplicities.cbegin();
70 while (inhibitionIterator != inhibitionMultiplicities.cend()) {
71 if (marking.getNumberOfTokensAt(inhibitionIterator->first) >= inhibitionIterator->second) {
72 return false;
73 }
74
75 ++inhibitionIterator;
76 }
77
78 return true;
79}
80
82 storm::gspn::Marking newMarking(marking);
83
84 auto inputIterator = inputMultiplicities.cbegin();
85 while (inputIterator != inputMultiplicities.cend()) {
86 newMarking.setNumberOfTokensAt(inputIterator->first, newMarking.getNumberOfTokensAt(inputIterator->first) - inputIterator->second);
87 ++inputIterator;
88 }
89
90 auto outputIterator = outputMultiplicities.cbegin();
91 while (outputIterator != outputMultiplicities.cend()) {
92 newMarking.setNumberOfTokensAt(outputIterator->first, newMarking.getNumberOfTokensAt(outputIterator->first) + outputIterator->second);
93 ++outputIterator;
94 }
95
96 return newMarking;
97}
98
99void Transition::setName(std::string const& name) {
100 this->name = name;
101}
102
103std::string const& Transition::getName() const {
104 return this->name;
105}
106
107std::unordered_map<uint64_t, uint64_t> const& Transition::getInputPlaces() const {
108 return inputMultiplicities;
109}
110
111std::unordered_map<uint64_t, uint64_t> const& Transition::getOutputPlaces() const {
112 return outputMultiplicities;
113}
114
115std::unordered_map<uint64_t, uint64_t> const& Transition::getInhibitionPlaces() const {
116 return inhibitionMultiplicities;
117}
118
120 if (existsInputArc(place)) {
121 return inputMultiplicities.at(place.getID());
122 } else {
123 return 0;
124 }
125}
126
128 if (existsInhibitionArc(place)) {
129 return inhibitionMultiplicities.at(place.getID());
130 } else {
131 return 0;
132 }
133}
134
136 if (existsOutputArc(place)) {
137 return outputMultiplicities.at(place.getID());
138 } else {
139 return 0;
140 }
141}
142
143void Transition::setPriority(uint64_t const& priority) {
144 this->priority = priority;
145}
146
147uint64_t Transition::getPriority() const {
148 return this->priority;
149}
150} // namespace gspn
151} // namespace storm
void setNumberOfTokensAt(uint_fast64_t const &place, uint_fast64_t const &numberOfTokens)
Set the number of tokens for the given place to the given amount.
Definition Marking.cpp:23
uint_fast64_t getNumberOfTokensAt(uint_fast64_t const &place) const
Get the number of tokens for the given place.
Definition Marking.cpp:31
This class provides methods to store and retrieve data for a place in a gspn.
Definition Place.h:12
uint64_t getID() const
Returns the id of this place.
Definition Place.cpp:18
bool existsOutputArc(storm::gspn::Place const &place) const
Checks whether the given place is connected to this transition via an output arc.
void setPriority(uint64_t const &priority)
Sets the priority of this transtion.
uint64_t getInhibitionArcMultiplicity(storm::gspn::Place const &place) const
Returns the corresponding multiplicity.
void setName(std::string const &name)
Set the name of the transition.
bool existsInhibitionArc(storm::gspn::Place const &place) const
Checks whether the given place is connected to this transition via an inhibition arc.
uint64_t getOutputArcMultiplicity(storm::gspn::Place const &place) const
Returns the corresponding multiplicity.
bool removeOutputArc(storm::gspn::Place const &place)
Removes an output arc connected to a given place.
bool removeInputArc(storm::gspn::Place const &place)
Removes an input arc connected to a given place.
bool isEnabled(storm::gspn::Marking const &marking) const
Checks if the given marking enables the transition.
storm::gspn::Marking fire(storm::gspn::Marking const &marking) const
Fire the transition if possible.
std::unordered_map< uint64_t, uint64_t > const & getInputPlaces() const
std::string const & getName() const
Returns the name of the transition.
void setInhibitionArcMultiplicity(storm::gspn::Place const &place, uint64_t multiplicity)
Set the multiplicity of the inhibition arc originating from the place.
bool existsInputArc(storm::gspn::Place const &place) const
Checks whether the given place is connected to this transition via an input arc.
void setOutputArcMultiplicity(storm::gspn::Place const &place, uint64_t multiplicity)
Set the multiplicity of the output arc going to the place.
uint64_t getInputArcMultiplicity(storm::gspn::Place const &place) const
Returns the corresponding multiplicity.
std::unordered_map< uint64_t, uint64_t > const & getInhibitionPlaces() const
bool removeInhibitionArc(storm::gspn::Place const &place)
Removes an inhibition arc connected to a given place.
uint64_t getPriority() const
Returns the priority of this transition.
std::unordered_map< uint64_t, uint64_t > const & getOutputPlaces() const
void setInputArcMultiplicity(storm::gspn::Place const &place, uint64_t multiplicity)
Set the multiplicity of the input arc originating from the place.
Definition Transition.cpp:8
LabParser.cpp.
Definition cli.cpp:18