acc_cond: rename is_tt/is_ff as is_t/is_f and add printer
* spot/twa/acc.cc, spot/twa/acc.hh: Here. * spot/parseaut/parseaut.yy, spot/twa/acc.hh, spot/twaalgos/gtec/gtec.cc, spot/twaalgos/hoa.cc, spot/twaalgos/neverclaim.cc, spot/twaalgos/product.cc, spot/twaalgos/remfin.cc, spot/twaalgos/strength.cc: Adjust. * NEWS: Mention the changes. * wrap/python/spot_impl.i: Bind acc_cond the printer. * wrap/python/tests/acc_cond.ipynb: Add more examples.
This commit is contained in:
parent
2927cf38ac
commit
94cca9de3d
12 changed files with 259 additions and 44 deletions
|
|
@ -51,6 +51,11 @@ namespace spot
|
|||
return os;
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream& os, const acc_cond& acc)
|
||||
{
|
||||
return os << '(' << acc.num_sets() << ", " << acc.get_acceptance() << ')';
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
void default_set_printer(std::ostream& os, int v)
|
||||
|
|
@ -411,9 +416,9 @@ namespace spot
|
|||
|
||||
int acc_cond::is_rabin() const
|
||||
{
|
||||
if (code_.is_ff())
|
||||
if (code_.is_f())
|
||||
return num_ == 0 ? 0 : -1;
|
||||
if ((num_ & 1) || code_.is_tt())
|
||||
if ((num_ & 1) || code_.is_t())
|
||||
return -1;
|
||||
|
||||
if (is_rs(code_, acc_op::Or, acc_op::And, all_sets()))
|
||||
|
|
@ -424,9 +429,9 @@ namespace spot
|
|||
|
||||
int acc_cond::is_streett() const
|
||||
{
|
||||
if (code_.is_tt())
|
||||
if (code_.is_t())
|
||||
return num_ == 0 ? 0 : -1;
|
||||
if ((num_ & 1) || code_.is_ff())
|
||||
if ((num_ & 1) || code_.is_f())
|
||||
return -1;
|
||||
|
||||
if (is_rs(code_, acc_op::And, acc_op::Or, all_sets()))
|
||||
|
|
@ -444,7 +449,7 @@ namespace spot
|
|||
pairs.resize(num_);
|
||||
return true;
|
||||
}
|
||||
if (code_.is_tt()
|
||||
if (code_.is_t()
|
||||
|| code_.back().op != acc_op::Or)
|
||||
return false;
|
||||
|
||||
|
|
@ -670,7 +675,7 @@ namespace spot
|
|||
if (sets == 0)
|
||||
{
|
||||
max = true;
|
||||
odd = is_tt();
|
||||
odd = is_t();
|
||||
return true;
|
||||
}
|
||||
acc_cond::mark_t u_inf;
|
||||
|
|
@ -857,7 +862,7 @@ namespace spot
|
|||
std::pair<bool, acc_cond::mark_t>
|
||||
acc_cond::unsat_mark() const
|
||||
{
|
||||
if (is_tt())
|
||||
if (is_t())
|
||||
return {false, 0U};
|
||||
if (!uses_fin_acceptance())
|
||||
return {true, 0U};
|
||||
|
|
@ -1105,7 +1110,7 @@ namespace spot
|
|||
|
||||
acc_cond::acc_code acc_cond::acc_code::complement() const
|
||||
{
|
||||
if (is_tt())
|
||||
if (is_t())
|
||||
return acc_cond::acc_code::f();
|
||||
return complement_rec(&back());
|
||||
}
|
||||
|
|
@ -1165,7 +1170,7 @@ namespace spot
|
|||
acc_cond::acc_code
|
||||
acc_cond::acc_code::strip(acc_cond::mark_t rem, bool missing) const
|
||||
{
|
||||
if (is_tt() || is_ff())
|
||||
if (is_t() || is_f())
|
||||
return *this;
|
||||
return strip_rec(&back(), rem, missing);
|
||||
}
|
||||
|
|
@ -1173,7 +1178,7 @@ namespace spot
|
|||
acc_cond::mark_t
|
||||
acc_cond::acc_code::used_sets() const
|
||||
{
|
||||
if (is_tt() || is_ff())
|
||||
if (is_t() || is_f())
|
||||
return 0U;
|
||||
acc_cond::mark_t used_in_cond = 0U;
|
||||
auto pos = &back();
|
||||
|
|
@ -1201,7 +1206,7 @@ namespace spot
|
|||
std::pair<acc_cond::mark_t, acc_cond::mark_t>
|
||||
acc_cond::acc_code::used_inf_fin_sets() const
|
||||
{
|
||||
if (is_tt() || is_ff())
|
||||
if (is_t() || is_f())
|
||||
return {0U, 0U};
|
||||
|
||||
acc_cond::mark_t used_fin = 0U;
|
||||
|
|
|
|||
|
|
@ -395,14 +395,14 @@ namespace spot
|
|||
return !(*this == other);
|
||||
}
|
||||
|
||||
bool is_tt() const
|
||||
bool is_t() const
|
||||
{
|
||||
unsigned s = size();
|
||||
return s == 0
|
||||
|| ((*this)[s - 1].op == acc_op::Inf && (*this)[s - 2].mark == 0U);
|
||||
}
|
||||
|
||||
bool is_ff() const
|
||||
bool is_f() const
|
||||
{
|
||||
unsigned s = size();
|
||||
return s > 1
|
||||
|
|
@ -557,12 +557,12 @@ namespace spot
|
|||
|
||||
acc_code& operator&=(acc_code&& r)
|
||||
{
|
||||
if (is_tt() || r.is_ff())
|
||||
if (is_t() || r.is_f())
|
||||
{
|
||||
*this = std::move(r);
|
||||
return *this;
|
||||
}
|
||||
if (is_ff() || r.is_tt())
|
||||
if (is_f() || r.is_t())
|
||||
return *this;
|
||||
unsigned s = size() - 1;
|
||||
unsigned rs = r.size() - 1;
|
||||
|
|
@ -649,12 +649,12 @@ namespace spot
|
|||
|
||||
acc_code& operator&=(const acc_code& r)
|
||||
{
|
||||
if (is_tt() || r.is_ff())
|
||||
if (is_t() || r.is_f())
|
||||
{
|
||||
*this = r;
|
||||
return *this;
|
||||
}
|
||||
if (is_ff() || r.is_tt())
|
||||
if (is_f() || r.is_t())
|
||||
return *this;
|
||||
unsigned s = size() - 1;
|
||||
unsigned rs = r.size() - 1;
|
||||
|
|
@ -754,9 +754,9 @@ namespace spot
|
|||
|
||||
acc_code& operator|=(acc_code&& r)
|
||||
{
|
||||
if (is_tt() || r.is_ff())
|
||||
if (is_t() || r.is_f())
|
||||
return *this;
|
||||
if (is_ff() || r.is_tt())
|
||||
if (is_f() || r.is_t())
|
||||
{
|
||||
*this = std::move(r);
|
||||
return *this;
|
||||
|
|
@ -930,14 +930,24 @@ namespace spot
|
|||
return uses_fin_acceptance_;
|
||||
}
|
||||
|
||||
bool is_tt() const
|
||||
bool is_t() const
|
||||
{
|
||||
return code_.is_tt();
|
||||
return code_.is_t();
|
||||
}
|
||||
|
||||
bool is_ff() const
|
||||
bool is_all() const
|
||||
{
|
||||
return code_.is_ff();
|
||||
return num_ == 0 && is_t();
|
||||
}
|
||||
|
||||
bool is_f() const
|
||||
{
|
||||
return code_.is_f();
|
||||
}
|
||||
|
||||
bool is_none() const
|
||||
{
|
||||
return num_ == 0 && is_f();
|
||||
}
|
||||
|
||||
bool is_buchi() const
|
||||
|
|
@ -1158,6 +1168,7 @@ namespace spot
|
|||
mark_t::value_t all_;
|
||||
acc_code code_;
|
||||
bool uses_fin_acceptance_ = false;
|
||||
|
||||
};
|
||||
|
||||
/// \brief Parse a string into an acc_code
|
||||
|
|
@ -1179,6 +1190,9 @@ namespace spot
|
|||
///
|
||||
/// A spot::parse_error is thrown on syntax error.
|
||||
SPOT_API acc_cond::acc_code parse_acc_code(const char* input);
|
||||
|
||||
SPOT_API
|
||||
std::ostream& operator<<(std::ostream& os, const acc_cond& acc);
|
||||
}
|
||||
|
||||
namespace std
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue