diff --git a/src/tgba/acc.hh b/src/tgba/acc.hh index bccd3937a..b2b7ecee2 100644 --- a/src/tgba/acc.hh +++ b/src/tgba/acc.hh @@ -43,6 +43,19 @@ namespace spot { } + template + mark_t(const iterator& begin, const iterator& end) + { + id = 0U; + for (iterator i = begin; i != end; ++i) + set(*i); + } + + mark_t(std::initializer_list vals) + : mark_t(vals.begin(), vals.end()) + { + } + bool operator==(unsigned o) const { assert(o == 0U); @@ -368,6 +381,11 @@ namespace spot return res; } + static acc_code fin(std::initializer_list vals) + { + return fin(mark_t(vals)); + } + static acc_code fin_neg(mark_t m) { acc_code res; @@ -378,6 +396,11 @@ namespace spot return res; } + static acc_code fin_neg(std::initializer_list vals) + { + return fin_neg(mark_t(vals)); + } + static acc_code inf(mark_t m) { acc_code res; @@ -388,6 +411,11 @@ namespace spot return res; } + static acc_code inf(std::initializer_list vals) + { + return inf(mark_t(vals)); + } + static acc_code inf_neg(mark_t m) { acc_code res; @@ -398,6 +426,11 @@ namespace spot return res; } + static acc_code inf_neg(std::initializer_list vals) + { + return inf_neg(mark_t(vals)); + } + void append_and(acc_code&& r) { if (is_true() || r.is_false()) @@ -809,10 +842,7 @@ namespace spot template mark_t marks(const iterator& begin, const iterator& end) const { - mark_t::value_t res = 0U; - for (iterator i = begin; i != end; ++i) - res |= mark_(*i); - return res; + return mark_t(begin, end); } mark_t marks(std::initializer_list vals) const