Disallow copy for security. * src/tgba/tgbabddconcrete.hh (tgba_bdd_concrete): Disallow copy. * src/tgba/tgbaexplicit.hh (tgba_explicit): Likewise. * src/tgba/tgbaexplicit.cc (tgba_explicit::operator=, tgba_explicit::tgba_explicit(tgba_explicit)): Remove. * src/tgba/tgbabddconcreteproduct.cc (tgba_bdd_concrete_product_factory::tgba_bdd_concrete_product_factory, product): Take operand automata as pointers. * src/tgba/tgbabddconcreteproduct.hh (product): Likewise. * src/tgba/tgbaproduct.cc, src/tgba/tgbaproduct.hh: (tgba_product): Disallow copy. (tgba_product::tgba_product): Take operand automata as pointers. * src/tgbaalgos/dotty.cc (dotty_state, dotty_rec, dotty_reachable): Take tgba arguments as pointer. * src/tgbaalgos/dotty.hh (dotty_reachable): Likewise. * src/tgbaalgos/lbtt.cc (fill_todo, lbtt_reachable): Likewise. * src/tgbaalgos/lbtt.hh (lbtt_reachable): Likewise. * src/tgbaalgos/ltl2tgba.cc, src/tgbaalgos/ltl2tgba.hh (ltl_to_tgba): Likewise. * src/tgbaalgos/save.cc (save_rec, tgba_save_reachable): Likewise. * src/tgbaalgos/save.hh (save): Likewise. * src/tgbatest/explicit.cc, src/tgbatest/explprod.cc, src/tgbatest/ltl2tgba.cc, src/tgbatest/ltlprod.cc, src/tgbatest/mixprod.cc, src/tgbatest/readsave.cc, src/tgbatest/spotlbtt.cc, src/tgbatest/tgbaread.cc, src/tgbatest/tripprod.cc: Likewise.
62 lines
1.3 KiB
C++
62 lines
1.3 KiB
C++
#include <cassert>
|
|
#include "tgbabddconcreteproduct.hh"
|
|
|
|
namespace spot
|
|
{
|
|
/// \brief Helper class for product().
|
|
///
|
|
/// As both automata are encoded using BDD, we just have
|
|
/// to homogenize the variable numbers before ANDing the
|
|
/// relations and initial states.
|
|
class tgba_bdd_product_factory: public tgba_bdd_factory
|
|
{
|
|
public:
|
|
tgba_bdd_product_factory(const tgba_bdd_concrete* left,
|
|
const tgba_bdd_concrete* right)
|
|
: dict_(left->get_dict()),
|
|
left_(left),
|
|
right_(right),
|
|
data_(left_->get_core_data(), right_->get_core_data()),
|
|
init_(left_->get_init_bdd() & right_->get_init_bdd())
|
|
{
|
|
assert(dict_ == right->get_dict());
|
|
}
|
|
|
|
virtual
|
|
~tgba_bdd_product_factory()
|
|
{
|
|
}
|
|
|
|
const tgba_bdd_core_data&
|
|
get_core_data() const
|
|
{
|
|
return data_;
|
|
}
|
|
|
|
bdd_dict*
|
|
get_dict() const
|
|
{
|
|
return dict_;
|
|
}
|
|
|
|
bdd
|
|
get_init_state() const
|
|
{
|
|
return init_;
|
|
}
|
|
|
|
private:
|
|
bdd_dict* dict_;
|
|
const tgba_bdd_concrete* left_;
|
|
const tgba_bdd_concrete* right_;
|
|
tgba_bdd_core_data data_;
|
|
bdd init_;
|
|
};
|
|
|
|
tgba_bdd_concrete*
|
|
product(const tgba_bdd_concrete* left, const tgba_bdd_concrete* right)
|
|
{
|
|
tgba_bdd_product_factory p(left, right);
|
|
return new tgba_bdd_concrete(p, p.get_init_state());
|
|
}
|
|
}
|