19template<
typename ValueType>
 
   21    using DFTElementPointer = std::shared_ptr<DFTElement<ValueType>>;
 
   22    using DFTElementVector = std::vector<DFTElementPointer>;
 
   35    std::shared_ptr<DFTElement<ValueType>> 
clone()
 const override {
 
 
   49        return this->
isFDEP() ? 
"FDEP" : 
"PDEP";
 
 
   94        STORM_LOG_ASSERT(mDependentEvents.size() > 0, 
"Dependent event does not exists.");
 
   95        return mDependentEvents;
 
 
  103        mDependentEvents.push_back(dependentEvent);
 
 
  113            std::find_if(this->mDependentEvents.begin(), this->mDependentEvents.end(), [&
id](DFTElementPointer elem) -> 
bool { return elem->id() == id; });
 
  114        return it != this->mDependentEvents.end();
 
 
  134        std::set<size_t> unit = {this->
mId};
 
  135        for (
auto const& depEv : mDependentEvents) {
 
  136            depEv->extendUnit(unit);
 
  137            if (unit.count(mTriggerEvent->id()) != 0) {
 
  141        return std::vector<size_t>(unit.begin(), unit.end());
 
 
  144    void extendSubDft(std::set<size_t>& elemsInSubtree, std::vector<size_t> 
const& parentsOfSubRoot, 
bool blockParents, 
bool sparesAsLeaves)
 const override {
 
  145        if (elemsInSubtree.count(this->id())) {
 
  149        if (elemsInSubtree.empty()) {
 
  153        for (
auto const& depEv : mDependentEvents) {
 
  154            depEv->extendSubDft(elemsInSubtree, parentsOfSubRoot, blockParents, sparesAsLeaves);
 
  155            if (elemsInSubtree.empty()) {
 
  159        if (elemsInSubtree.empty()) {
 
  163        mTriggerEvent->extendSubDft(elemsInSubtree, parentsOfSubRoot, blockParents, sparesAsLeaves);
 
 
  167        std::stringstream stream;
 
  170            stream << depEv->name() << 
" ";
 
  174            stream << 
" with probability " << this->
probability();
 
 
  180    ValueType mProbability;
 
  181    DFTElementPointer mTriggerEvent;
 
  182    DFTElementVector mDependentEvents;
 
 
Dependency gate with probability p.
 
bool isDependency() const override
Check whether the element is a dependency.
 
std::string toString() const override
Print information about element to string.
 
std::shared_ptr< DFTElement< ValueType > > clone() const override
Create a shallow copy of the element.
 
DFTElementVector const & dependentEvents() const
Get dependent events.
 
bool isTypeEqualTo(DFTElement< ValueType > const &other) const override
Check whether two elements have the same type.
 
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.
 
virtual ~DFTDependency()=default
Destructor.
 
void setTriggerElement(DFTElementPointer const &triggerEvent)
Set the trigger event, i.e., the first child.
 
DFTElementPointer const & triggerEvent() const
Get trigger event, i.e., the first child.
 
ValueType const & probability() const
Get probability of forwarding the failure.
 
void extendSpareModule(std::set< size_t > &) const override
 
bool containsDependentEvent(size_t id)
Check whether the given element is a dependent event.
 
DFTDependency(size_t id, std::string const &name, ValueType probability)
Constructor.
 
virtual size_t nrChildren() const override
Get number of children.
 
bool isFDEP() const
Check whether the dependency is an FDEP, i.e., p=1.
 
std::string typestring() const override
Get type as string.
 
std::vector< size_t > independentUnit() const override
Computes the independent unit of this element, that is, all elements which are direct or indirect suc...
 
void addDependentEvent(DFTElementPointer const &dependentEvent)
Add dependent event.
 
storm::dft::storage::elements::DFTElementType type() const override
Get type.
 
Abstract base class for DFT elements.
 
virtual size_t id() const
Get id.
 
virtual std::string const & name() const
Get name.
 
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.
 
#define STORM_LOG_ASSERT(cond, message)
 
DFTElementType
Element types in a DFT.
 
bool isOne(ValueType const &a)