3#include <boost/algorithm/string.hpp>
9#include <initializer_list>
36 insert(init.begin(), init.end());
46 template<
typename ForwardIt>
52 return this->allRelevant == rhs.allRelevant || this->names == rhs.names;
56 return !(*
this == rhs);
65 template<
typename ValueType>
67 if (this->allRelevant) {
68 return dft->nrElements();
71 for (
auto const& name : names) {
72 if (dft->existsName(name)) {
85 template<
typename ForwardIt>
87 if (this->allRelevant) {
92 std::vector<std::shared_ptr<storm::logic::AtomicLabelFormula const>> atomicLabels{};
93 std::for_each(first, last, [&atomicLabels](
auto const& property) {
property->gatherAtomicLabelFormulas(atomicLabels); });
96 for (
auto const& atomic : atomicLabels) {
97 std::string label = atomic->getLabel();
98 if (label ==
"failed" or label ==
"skipped") {
102 if (boost::ends_with(label,
"_failed")) {
104 this->names.insert(label.substr(0, label.size() - 7));
105 }
else if (boost::ends_with(label,
"_dc")) {
107 this->names.insert(label.substr(0, label.size() - 3));
108 }
else if (label.find(
"_claimed_") != std::string::npos) {
110 storm::exceptions::InvalidArgumentException,
111 "Claiming labels will not be exported but are required for label '" << label <<
"'. Try setting --labels-claiming.");
113 STORM_LOG_THROW(
false, storm::exceptions::InvalidArgumentException,
"Label '" << label <<
"' not known.");
139 template<
typename ForwardIt>
140 void insert(ForwardIt first, ForwardIt last) {
142 if (std::any_of(first, last, [](
auto const& name) {
return name ==
"all"; })) {
145 this->names.insert(first, last);
155 template<
typename ValueType>
157 for (std::string
const& relevantName : this->names) {
169 if (this->allRelevant) {
172 return this->names.find(name) != this->names.end();
182 if (!this->allRelevant) {
183 if (other.allRelevant) {
186 this->names.insert(other.names.begin(), other.names.end());
193 void setAllRelevant() {
194 this->allRelevant =
true;
199 std::set<std::string> names{};
202 bool allRelevant{
false};
Represents a Dynamic Fault Tree.
bool existsName(std::string const &name) const
Check whether an element with the given name exists.
bool checkRelevantNames(storm::dft::storage::DFT< ValueType > const &dft) const
Check that the relevant names correspond to existing elements in the DFT.
void insert(ForwardIt first, ForwardIt last)
Add relevant event names from a range.
bool isRelevant(std::string const &name) const
void insertNamesFromProperties(ForwardIt first, ForwardIt last)
Add relevant event names required by the labels in properties of a range.
RelevantEvents()=default
Constructs empty RelevantEvents object.
RelevantEvents(ForwardIt first, ForwardIt last)
Create relevant events from given event names in a range.
void insert(std::string const &name)
Add relevant event.
RelevantEvents & merge(RelevantEvents const &other)
Merge the given RelevantEvents with *this.
size_t count(std::shared_ptr< storm::dft::storage::DFT< ValueType > > const dft) const
Count the events that are relevant in the given DFT.
bool operator!=(RelevantEvents const &rhs) const
RelevantEvents(std::initializer_list< std::string > init)
Create relevant events from given event names in an initializer list.
bool operator==(RelevantEvents const &rhs) const
#define STORM_LOG_THROW(cond, exception, message)
SettingsType const & getModule()
Get module.