3#include <boost/algorithm/string.hpp>
8#include <initializer_list>
34 insert(init.begin(), init.end());
44 template<
typename ForwardIt>
50 return this->allRelevant == rhs.allRelevant || this->names == rhs.names;
54 return !(*
this == rhs);
63 template<
typename ValueType>
65 if (this->allRelevant) {
66 return dft->nrElements();
69 for (
auto const& name : names) {
70 if (
dft->existsName(name)) {
84 template<
typename ForwardIt>
86 if (this->allRelevant) {
91 std::vector<std::shared_ptr<storm::logic::AtomicLabelFormula const>> atomicLabels{};
92 std::for_each(first, last, [&atomicLabels](
auto const& property) {
property->gatherAtomicLabelFormulas(atomicLabels); });
95 for (
auto const& atomic : atomicLabels) {
96 std::string label = atomic->getLabel();
97 if (label ==
"failed" or label ==
"skipped") {
101 if (boost::ends_with(label,
"_failed")) {
103 this->names.insert(label.substr(0, label.size() - 7));
104 }
else if (boost::ends_with(label,
"_dc")) {
106 this->names.insert(label.substr(0, label.size() - 3));
107 }
else if (label.find(
"_claimed_") != std::string::npos) {
108 STORM_LOG_THROW(addLabelsClaiming, storm::exceptions::InvalidArgumentException,
109 "Claiming labels will not be exported but are required for label '" << label <<
"'. Try setting --labels-claiming.");
111 STORM_LOG_THROW(
false, storm::exceptions::InvalidArgumentException,
"Label '" << label <<
"' not known.");
137 template<
typename ForwardIt>
138 void insert(ForwardIt first, ForwardIt last) {
140 if (std::any_of(first, last, [](
auto const& name) {
return name ==
"all"; })) {
143 this->names.insert(first, last);
153 template<
typename ValueType>
155 for (std::string
const& relevantName : this->names) {
156 if (!
dft.existsName(relevantName)) {
167 if (this->allRelevant) {
170 return this->names.find(name) != this->names.end();
180 if (!this->allRelevant) {
181 if (other.allRelevant) {
184 this->names.insert(other.names.begin(), other.names.end());
191 void setAllRelevant() {
192 this->allRelevant =
true;
197 std::set<std::string> names{};
200 bool allRelevant{
false};
Represents a Dynamic Fault Tree.
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.
void insertNamesFromProperties(ForwardIt first, ForwardIt last, bool addLabelsClaiming)
Add relevant event names required by the labels in properties of a range.
bool isRelevant(std::string const &name) const
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)