|
|
@ -232,27 +232,32 @@ namespace storm { |
|
|
|
if (isRepresentative) { |
|
|
|
unavailableNode = addUnavailableNode(dftPand); |
|
|
|
} |
|
|
|
|
|
|
|
uint64_t nodeFS = builder.addPlace(defaultCapacity, 0, dftPand->name() + STR_FAILSAVE); |
|
|
|
uint64_t tNodeFailed = builder.addImmediateTransition(getFailPriority(dftPand), 0.0, dftPand->name() + STR_FAILING); |
|
|
|
builder.addInhibitionArc(nodeFailed, tNodeFailed); |
|
|
|
builder.addInhibitionArc(nodeFS, tNodeFailed); |
|
|
|
builder.addOutputArc(tNodeFailed, nodeFailed); |
|
|
|
if (isRepresentative) { |
|
|
|
|
|
|
|
if(dftPand->isInclusive()) { |
|
|
|
|
|
|
|
uint64_t nodeFS = builder.addPlace(defaultCapacity, 0, dftPand->name() + STR_FAILSAVE); |
|
|
|
uint64_t tNodeFailed = builder.addImmediateTransition(getFailPriority(dftPand), 0.0, dftPand->name() + STR_FAILING); |
|
|
|
builder.addInhibitionArc(nodeFailed, tNodeFailed); |
|
|
|
builder.addInhibitionArc(nodeFS, tNodeFailed); |
|
|
|
builder.addOutputArc(tNodeFailed, nodeFailed); |
|
|
|
} |
|
|
|
for(auto const& child : dftPand->children()) { |
|
|
|
builder.addInputArc(failedNodes[child->id()], tNodeFailed); |
|
|
|
builder.addOutputArc(tNodeFailed, failedNodes[child->id()]); |
|
|
|
} |
|
|
|
for (uint64_t j = 1; j < dftPand->nrChildren(); ++j) { |
|
|
|
uint64_t tfs = builder.addImmediateTransition(getFailPriority(dftPand), 0.0, dftPand->name() + STR_FAILSAVING + std::to_string(j)); |
|
|
|
builder.addInputArc(failedNodes[dftPand->children().at(j)->id()], tfs); |
|
|
|
builder.addOutputArc(tfs, failedNodes[dftPand->children().at(j)->id()]); |
|
|
|
builder.addInhibitionArc(failedNodes[dftPand->children().at(j-1)->id()], tfs); |
|
|
|
builder.addOutputArc(tfs, nodeFS); |
|
|
|
builder.addInhibitionArc(nodeFS, tfs); |
|
|
|
|
|
|
|
if (isRepresentative) { |
|
|
|
builder.addOutputArc(tNodeFailed, nodeFailed); |
|
|
|
} |
|
|
|
for(auto const& child : dftPand->children()) { |
|
|
|
builder.addInputArc(failedNodes[child->id()], tNodeFailed); |
|
|
|
builder.addOutputArc(tNodeFailed, failedNodes[child->id()]); |
|
|
|
} |
|
|
|
for (uint64_t j = 1; j < dftPand->nrChildren(); ++j) { |
|
|
|
uint64_t tfs = builder.addImmediateTransition(getFailPriority(dftPand), 0.0, dftPand->name() + STR_FAILSAVING + std::to_string(j)); |
|
|
|
builder.addInputArc(failedNodes[dftPand->children().at(j)->id()], tfs); |
|
|
|
builder.addOutputArc(tfs, failedNodes[dftPand->children().at(j)->id()]); |
|
|
|
builder.addInhibitionArc(failedNodes[dftPand->children().at(j-1)->id()], tfs); |
|
|
|
builder.addOutputArc(tfs, nodeFS); |
|
|
|
builder.addInhibitionArc(nodeFS, tfs); |
|
|
|
|
|
|
|
} |
|
|
|
} else { |
|
|
|
STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "NOt yet implemented"); |
|
|
|
} |
|
|
|
} |
|
|
|
//
|
|
|
@ -318,6 +323,7 @@ namespace storm { |
|
|
|
template <typename ValueType> |
|
|
|
void DftToGspnTransformator<ValueType>::drawPOR(std::shared_ptr<storm::storage::DFTPor<ValueType> const> dftPor, bool isRepresentative) { |
|
|
|
uint64_t nodeFailed = builder.addPlace(defaultCapacity, 0, dftPor->name() + STR_FAILED); |
|
|
|
failedNodes.push_back(nodeFailed); |
|
|
|
uint64_t nodeFS = builder.addPlace(defaultCapacity, 0, dftPor->name() + STR_FAILSAVE); |
|
|
|
|
|
|
|
|
|
|
@ -329,11 +335,15 @@ namespace storm { |
|
|
|
builder.addInhibitionArc(nodeFailed, tfail); |
|
|
|
uint64_t j = 0; |
|
|
|
for (auto const& child : dftPor->children()) { |
|
|
|
uint64_t tfailsf = builder.addImmediateTransition(getFailPriority(dftPor), 0.0, dftPor->name() + STR_FAILSAVING + std::to_string(j)); |
|
|
|
builder.addInputArc(failedNodes.at(child->id()), tfailsf); |
|
|
|
builder.addOutputArc(tfailsf, failedNodes.at(child->id())); |
|
|
|
// TODO
|
|
|
|
// builder.addInhibitionArc(<#const uint_fast64_t &from#>, <#const uint_fast64_t &to#>)
|
|
|
|
if(j > 0) { |
|
|
|
uint64_t tfailsf = builder.addImmediateTransition(getFailPriority(dftPor), 0.0, dftPor->name() + STR_FAILSAVING + std::to_string(j)); |
|
|
|
builder.addInputArc(failedNodes.at(child->id()), tfailsf); |
|
|
|
builder.addOutputArc(tfailsf, failedNodes.at(child->id())); |
|
|
|
builder.addOutputArc(tfailsf, nodeFS); |
|
|
|
builder.addInhibitionArc(nodeFS, tfailsf); |
|
|
|
builder.addInhibitionArc(failedNodes.at(dftPor->children().front()->id()), tfailsf); |
|
|
|
} |
|
|
|
|
|
|
|
++j; |
|
|
|
} |
|
|
|
} |
|
|
|