Browse Source

DFT element types and some extensions to the elements API

Former-commit-id: cb70dee35a
main
sjunges 9 years ago
parent
commit
0e38738e09
  1. 2
      src/storage/dft/DFTBuilder.cpp
  2. 4
      src/storage/dft/DFTElementType.h
  3. 67
      src/storage/dft/DFTElements.h

2
src/storage/dft/DFTBuilder.cpp

@ -109,7 +109,7 @@ namespace storm {
STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Gate type handled separately."); STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Gate type handled separately.");
case DFTElementType::CONSTF: case DFTElementType::CONSTF:
case DFTElementType::CONSTS: case DFTElementType::CONSTS:
case DFTElementType::FDEP:
case DFTElementType::PDEP:
STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Gate type not supported."); STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Gate type not supported.");
default: default:
STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Gate type not known."); STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Gate type not known.");

4
src/storage/dft/DFTElementType.h

@ -4,7 +4,7 @@
namespace storm { namespace storm {
namespace storage { namespace storage {
enum class DFTElementType : int {AND = 0, COUNTING = 1, OR = 2, VOT = 3, BE = 4, CONSTF = 5, CONSTS = 6, PAND = 7, SPARE = 8, POR = 9, FDEP = 10, SEQAND = 11};
enum class DFTElementType : int {AND = 0, COUNTING = 1, OR = 2, VOT = 3, BE = 4, CONSTF = 5, CONSTS = 6, PAND = 7, SPARE = 8, POR = 9, PDEP = 10, SEQAND = 11};
inline bool isGateType(DFTElementType const& tp) { inline bool isGateType(DFTElementType const& tp) {
switch(tp) { switch(tp) {
@ -20,7 +20,7 @@ namespace storm {
case DFTElementType::BE: case DFTElementType::BE:
case DFTElementType::CONSTF: case DFTElementType::CONSTF:
case DFTElementType::CONSTS: case DFTElementType::CONSTS:
case DFTElementType::FDEP:
case DFTElementType::PDEP:
return false; return false;
default: default:
assert(false); assert(false);

67
src/storage/dft/DFTElements.h

@ -51,6 +51,8 @@ namespace storm {
return mId; return mId;
} }
virtual DFTElementType type() const = 0;
virtual void setRank(size_t rank) { virtual void setRank(size_t rank) {
mRank = rank; mRank = rank;
} }
@ -115,6 +117,10 @@ namespace storm {
return !mParents.empty(); return !mParents.empty();
} }
size_t nrParents() const {
return mParents.size();
}
DFTGateVector const& parents() const { DFTGateVector const& parents() const {
return mParents; return mParents;
} }
@ -349,6 +355,10 @@ namespace storm {
DFTElement<ValueType>(id, name), mActiveFailureRate(failureRate), mPassiveFailureRate(dormancyFactor * failureRate) DFTElement<ValueType>(id, name), mActiveFailureRate(failureRate), mPassiveFailureRate(dormancyFactor * failureRate)
{} {}
DFTElementType type() const override {
return DFTElementType::BE;
}
virtual size_t nrChildren() const { virtual size_t nrChildren() const {
return 0; return 0;
} }
@ -394,6 +404,15 @@ namespace storm {
DFTElement<ValueType>(id, name), mFailed(failed) DFTElement<ValueType>(id, name), mFailed(failed)
{} {}
DFTElementType type() const override {
if(mFailed) {
return DFTElementType::CONSTF;
} else {
return DFTElementType::CONSTS;
}
}
bool failed() const { bool failed() const {
return mFailed; return mFailed;
} }
@ -438,15 +457,15 @@ namespace storm {
mDependentEvent = dependentEvent; mDependentEvent = dependentEvent;
} }
std::string nameTrigger() {
std::string nameTrigger() const {
return mNameTrigger; return mNameTrigger;
} }
std::string nameDependent() {
std::string nameDependent() const {
return mNameDependent; return mNameDependent;
} }
ValueType probability() {
ValueType const& probability() const {
return mProbability; return mProbability;
} }
@ -460,6 +479,10 @@ namespace storm {
return mDependentEvent; return mDependentEvent;
} }
DFTElementType type() const override {
return DFTElementType::PDEP;
}
virtual size_t nrChildren() const override { virtual size_t nrChildren() const override {
return 1; return 1;
} }
@ -520,6 +543,10 @@ namespace storm {
} }
} }
virtual DFTElementType type() const override {
return DFTElementType::AND;
}
std::string typestring() const { std::string typestring() const {
return "AND"; return "AND";
} }
@ -556,6 +583,10 @@ namespace storm {
this->failsafe(state, queues); this->failsafe(state, queues);
} }
virtual DFTElementType type() const override {
return DFTElementType::OR;
}
std::string typestring() const { std::string typestring() const {
return "OR"; return "OR";
} }
@ -607,7 +638,11 @@ namespace storm {
//return false; //return false;
} }
std::string typestring() const {
virtual DFTElementType type() const override {
return DFTElementType::SEQAND;
}
std::string typestring() const override {
return "SEQAND"; return "SEQAND";
} }
}; };
@ -654,7 +689,11 @@ namespace storm {
} }
} }
std::string typestring() const {
virtual DFTElementType type() const override {
return DFTElementType::PAND;
}
std::string typestring() const override {
return "PAND"; return "PAND";
} }
}; };
@ -681,7 +720,11 @@ namespace storm {
assert(false); assert(false);
} }
std::string typestring() const {
virtual DFTElementType type() const override {
return DFTElementType::POR;
}
std::string typestring() const override {
return "POR"; return "POR";
} }
}; };
@ -741,6 +784,10 @@ namespace storm {
} }
} }
virtual DFTElementType type() const override {
return DFTElementType::VOT;
}
std::string typestring() const { std::string typestring() const {
return "VOT (" + std::to_string(mThreshold) + ")"; return "VOT (" + std::to_string(mThreshold) + ")";
} }
@ -766,11 +813,15 @@ namespace storm {
DFTGate<ValueType>(id, name, children) DFTGate<ValueType>(id, name, children)
{} {}
std::string typestring() const {
std::string typestring() const override {
return "SPARE"; return "SPARE";
} }
bool isSpareGate() const {
virtual DFTElementType type() const override {
return DFTElementType::SPARE;
}
bool isSpareGate() const override {
return true; return true;
} }

Loading…
Cancel
Save