15uint_fast64_t
GspnBuilder::addPlace(boost::optional<uint64_t>
const& capacity, uint_fast64_t
const& initialTokens, std::string
const& name) {
16 auto newId = places.size();
18 place.setCapacity(capacity);
19 place.setNumberOfInitialTokens(initialTokens);
21 places.push_back(place);
22 placeNames.emplace(name, newId);
27 placeLayout[placeId] = layoutInfo;
31 transitionLayout[transitionId] = layoutInfo;
38 trans.setPriority(priority);
42 if (partitions.count(priority) == 0) {
45 partitions[priority].push_back(newPart);
49 trans.setWeight(storm::utility::one<double>());
53 partitions.at(priority).push_back(newPart);
55 trans.setWeight(weight);
56 partitions.at(priority).front().transitions.push_back(newId);
58 immediateTransitions.push_back(trans);
60 transitionNames.emplace(name, newId);
69 std::string
const& name) {
73 trans.setPriority(priority);
76 trans.setKServerSemantics(numServers.get());
78 trans.setInfiniteServerSemantics();
81 timedTransitions.push_back(trans);
83 transitionNames.emplace(name, newId);
88 STORM_LOG_THROW(from < places.size(), storm::exceptions::InvalidArgumentException,
"No place with id " << from <<
" known.");
89 auto place = places.at(from);
94 STORM_LOG_THROW(placeNames.count(from) != 0, storm::exceptions::InvalidArgumentException,
"Could not find a place with name '" << from <<
"'");
95 STORM_LOG_THROW(transitionNames.count(to) != 0, storm::exceptions::InvalidArgumentException,
"Could not find a transition with name << '" << to <<
"'");
96 addInputArc(placeNames.at(from), transitionNames.at(to), multiplicity);
100 STORM_LOG_THROW(from < places.size(), storm::exceptions::InvalidArgumentException,
"No place with id " << from <<
" known.");
101 auto place = places.at(from);
107 STORM_LOG_THROW(placeNames.count(from) != 0, storm::exceptions::InvalidArgumentException,
"Could not find a place with name '" << from <<
"'");
108 STORM_LOG_THROW(transitionNames.count(to) != 0, storm::exceptions::InvalidArgumentException,
"Could not find a transition with name << '" << to <<
"'");
109 addInhibitionArc(placeNames.at(from), transitionNames.at(to), multiplicity);
113 STORM_LOG_THROW(to < places.size(), storm::exceptions::InvalidArgumentException,
"No place with id " << to <<
" known.");
114 auto place = places.at(to);
119 STORM_LOG_THROW(placeNames.count(to) != 0, storm::exceptions::InvalidArgumentException,
"Could not find a place with name '" << to <<
"'");
120 STORM_LOG_THROW(transitionNames.count(from) != 0, storm::exceptions::InvalidArgumentException,
"Could not find a transition with name << '" << from <<
"'");
121 addOutputArc(transitionNames.at(from), placeNames.at(to), multiplicity);
124Transition& GspnBuilder::getTransition(uint64_t
id) {
125 if (isTimedTransitionId(
id)) {
127 }
else if (isImmediateTransitionId(
id)) {
128 return immediateTransitions.at(
id);
130 STORM_LOG_THROW(
false, storm::exceptions::InvalidArgumentException,
"No transitition with id '" <<
id <<
"' known.");
135 if (placeNames.count(from) > 0 && transitionNames.count(to) > 0) {
136 addInputArc(placeNames.at(from), transitionNames.at(to), multiplicity);
137 }
else if (transitionNames.count(from) > 0 && placeNames.count(to) > 0) {
138 addOutputArc(transitionNames.at(from), placeNames.at(to), multiplicity);
141 if (placeNames.count(from) > 0) {
143 "Expected a transition with name " << to <<
" for arc from '" << from <<
"' to '" << to <<
"'.");
145 if (transitionNames.count(from) > 0) {
147 "Expected a place named " << to <<
" for arc from '" << from <<
"' to '" << to <<
"'.");
150 "Expected a place named " << from <<
" for arc from '" << from <<
"' to '" << to <<
"'.");
154bool GspnBuilder::isTimedTransitionId(uint64_t tid)
const {
161bool GspnBuilder::isImmediateTransitionId(uint64_t tid)
const {
169 std::map<storm::expressions::Variable, storm::expressions::Expression>
const& constantsSubstitution)
const {
170 std::shared_ptr<storm::expressions::ExpressionManager> actualExprManager;
172 actualExprManager = exprManager;
174 actualExprManager = std::make_shared<storm::expressions::ExpressionManager>();
177 std::vector<TransitionPartition> orderedPartitions;
178 for (
auto const& priorityPartitions : partitions) {
179 for (
auto const& partition : priorityPartitions.second) {
181 assert(partition.priority == priorityPartitions.first);
183 if (partition.nrTransitions() > 0) {
184 orderedPartitions.push_back(partition);
188 std::reverse(orderedPartitions.begin(), orderedPartitions.end());
189 for (
auto const& placeEntry : placeNames) {
190 actualExprManager->declareIntegerVariable(placeEntry.first,
false);
193 GSPN* result =
new GSPN(gspnName, places, immediateTransitions, timedTransitions, orderedPartitions, actualExprManager, constantsSubstitution);
static uint64_t immediateTransitionIdToTransitionId(uint64_t)
static uint64_t timedTransitionIdToTransitionId(uint64_t)
void setTransitionLayoutInfo(uint64_t transitionId, LayoutInfo const &layout) const
static uint64_t transitionIdToTimedTransitionId(uint64_t)
void setPlaceLayoutInfo(uint64_t placeId, LayoutInfo const &layout) const
static uint64_t transitionIdToImmediateTransitionId(uint64_t)
uint_fast64_t addPlace(boost::optional< uint64_t > const &capacity=1, uint_fast64_t const &initialTokens=0, std::string const &name="")
Add a place to the gspn.
void addOutputArc(uint_fast64_t const &from, uint_fast64_t const &to, uint_fast64_t const &multiplicity=1)
Adds an new input arc from a place to an transition.
void setPlaceLayoutInfo(uint64_t placeId, LayoutInfo const &layoutInfo)
uint_fast64_t addImmediateTransition(uint_fast64_t const &priority=0, WeightType const &weight=0, std::string const &name="")
Adds an immediate transition to the gspn.
void addNormalArc(std::string const &from, std::string const &to, uint64_t multiplicity=1)
Adds an arc from a named element to a named element.
storm::gspn::GSPN * buildGspn(std::shared_ptr< storm::expressions::ExpressionManager > const &exprManager=nullptr, std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantsSubstitution=std::map< storm::expressions::Variable, storm::expressions::Expression >()) const
void addInhibitionArc(uint_fast64_t const &from, uint_fast64_t const &to, uint_fast64_t const &multiplicity=1)
Adds an new input arc from a place to an transition.
void addInputArc(uint_fast64_t const &from, uint_fast64_t const &to, uint_fast64_t const &multiplicity=1)
Adds an new input arc from a place to an transition.
void setGspnName(std::string const &name)
Set GSPN name.
void setTransitionLayoutInfo(uint64_t transitionId, LayoutInfo const &layoutInfo)
uint_fast64_t addTimedTransition(uint_fast64_t const &priority, RateType const &rate, std::string const &name="")
Adds an timed transition to the gspn.
This class provides methods to store and retrieve data for a place in a gspn.
This class represents a transition in a gspn.
void setInhibitionArcMultiplicity(storm::gspn::Place const &place, uint64_t multiplicity)
Set the multiplicity of the inhibition arc originating from the place.
void setOutputArcMultiplicity(storm::gspn::Place const &place, uint64_t multiplicity)
Set the multiplicity of the output arc going to the place.
void setInputArcMultiplicity(storm::gspn::Place const &place, uint64_t multiplicity)
Set the multiplicity of the input arc originating from the place.
#define STORM_LOG_THROW(cond, exception, message)
bool isZero(ValueType const &a)
std::vector< uint64_t > transitions