12template<
typename ValueType>
26 std::shared_ptr<DFTElement<ValueType>>
clone()
const override {
26 std::shared_ptr<DFTElement<ValueType>>
clone()
const override {
…}
55 if (parent->id() != this->
id() && parent->isSpareGate()) {
72 size_t uses = state.
uses(this->
mId);
75 if (!claimingSuccessful) {
76 this->
fail(state, queues);
91 std::vector<size_t>
independentSubDft(
bool blockParents,
bool sparesAsLeaves =
false)
const override {
93 if (prelRes.empty()) {
97 std::set<size_t> unit(prelRes.begin(), prelRes.end());
98 std::vector<size_t> pids = this->
parentIds();
99 if (!sparesAsLeaves) {
100 for (
auto const& child : this->
children()) {
101 child->extendSubDft(unit, pids, blockParents, sparesAsLeaves);
108 return std::vector<size_t>(unit.begin(), unit.end());
91 std::vector<size_t>
independentSubDft(
bool blockParents,
bool sparesAsLeaves =
false)
const override {
…}
111 void extendSubDft(std::set<size_t>& elemsInSubtree, std::vector<size_t>
const& parentsOfSubRoot,
bool blockParents,
bool sparesAsLeaves)
const override {
112 if (elemsInSubtree.count(this->id()) > 0)
115 if (elemsInSubtree.empty()) {
119 if (!sparesAsLeaves) {
120 for (
auto const& child : this->
children()) {
121 child->extendSubDft(elemsInSubtree, parentsOfSubRoot, blockParents, sparesAsLeaves);
122 if (elemsInSubtree.empty()) {
111 void extendSubDft(std::set<size_t>& elemsInSubtree, std::vector<size_t>
const& parentsOfSubRoot,
bool blockParents,
bool sparesAsLeaves)
const override {
…}
bool claimNew(size_t spareId, size_t currentlyUses, std::vector< std::shared_ptr< storm::dft::storage::elements::DFTElement< ValueType > > > const &children)
Claim a new spare child for the given spare gate.
uint_fast64_t uses(size_t id) const
This method returns the id of the used child for a spare.
void finalizeUses(size_t spareId)
Sets the use for the spare to a default value to gain consistent states after failures.
bool isOperational(size_t id) const
bool isFailsafe(size_t id) const
DFTElementVector const & children() const
Get children.
Abstract base class for DFT elements.
virtual size_t id() const
Get id.
virtual std::string const & name() const
Get name.
std::vector< size_t > parentIds() const
Return Ids of parents.
virtual void extendSubDft(std::set< size_t > &elemsInSubtree, std::vector< size_t > const &parentsOfSubRoot, bool blockParents, bool sparesAsLeaves) const
Helper to the independent subtree computation.
virtual std::vector< size_t > independentSubDft(bool blockParents, bool sparesAsLeaves=false) const
Computes independent subtrees starting with this element (this), that is, all elements (x) which are ...
Abstract base class for gates.
void failsafe(storm::dft::storage::DFTState< ValueType > &state, storm::dft::storage::DFTStateSpaceGenerationQueues< ValueType > &queues) const override
void childrenDontCare(storm::dft::storage::DFTStateSpaceGenerationQueues< ValueType > &queues) const
Propagate Don't Care to children.
void fail(storm::dft::storage::DFTState< ValueType > &state, storm::dft::storage::DFTStateSpaceGenerationQueues< ValueType > &queues) const override
void fail(storm::dft::storage::DFTState< ValueType > &state, storm::dft::storage::DFTStateSpaceGenerationQueues< ValueType > &queues) const override
void failsafe(storm::dft::storage::DFTState< ValueType > &state, storm::dft::storage::DFTStateSpaceGenerationQueues< ValueType > &queues) const override
std::shared_ptr< DFTElement< ValueType > > clone() const override
Create a shallow copy of the element.
void checkFails(storm::dft::storage::DFTState< ValueType > &state, storm::dft::storage::DFTStateSpaceGenerationQueues< ValueType > &queues) const override
Check failed status.
void checkFailsafe(storm::dft::storage::DFTState< ValueType > &state, storm::dft::storage::DFTStateSpaceGenerationQueues< ValueType > &queues) const override
Check failsafe status.
DFTSpare(size_t id, std::string const &name, std::vector< std::shared_ptr< DFTElement< ValueType > > > const &children={})
Constructor.
storm::dft::storage::elements::DFTElementType type() const override
Get type.
bool checkDontCareAnymore(storm::dft::storage::DFTState< ValueType > &state, storm::dft::storage::DFTStateSpaceGenerationQueues< ValueType > &queues) const override
std::vector< size_t > independentSubDft(bool blockParents, bool sparesAsLeaves=false) const override
Computes independent subtrees starting with this element (this), that is, all elements (x) which are ...
void extendSubDft(std::set< size_t > &elemsInSubtree, std::vector< size_t > const &parentsOfSubRoot, bool blockParents, bool sparesAsLeaves) const override
Helper to the independent subtree computation.
bool isSpareGate() const override
Check whether the element is a SPARE gate.
DFTElementType
Element types in a DFT.