spot/src/tgba/tgbabddconcreteproduct.cc
Alexandre Duret-Lutz 4146426bfc * src/tgba/bddprint.cc, src/tgba/bddprint.hh,
src/tgba/dictunion.hh, src/tgba/ltl2tgba.cc, src/tgba/ltl2tgba.hh,
src/tgba/tgbabddconcretefactory.hh,
src/tgba/tgbabddconcreteproduct.cc,
src/tgba/tgbabddconcreteproduct.hh, src/tgba/tgbabddfactory.hh,
src/tgba/tgbabddtranslatefactory.hh, src/tgbaalgos/dotty.cc:
Add Doxygen comments.
2003-05-27 15:18:32 +00:00

64 lines
1.4 KiB
C++

#include "tgbabddconcreteproduct.hh"
#include "tgbabddtranslatefactory.hh"
#include "dictunion.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_(tgba_bdd_dict_union(left.get_dict(),
right.get_dict())),
fact_left_(left, dict_),
fact_right_(right, dict_),
data_(fact_left_.get_core_data(), fact_right_.get_core_data()),
init_(fact_left_.get_init_state() & fact_right_.get_init_state())
{
}
virtual
~tgba_bdd_product_factory()
{
}
const tgba_bdd_core_data&
get_core_data() const
{
return data_;
}
const tgba_bdd_dict&
get_dict() const
{
return dict_;
}
bdd
get_init_state() const
{
return init_;
}
private:
tgba_bdd_dict dict_;
tgba_bdd_translate_factory fact_left_;
tgba_bdd_translate_factory fact_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 tgba_bdd_concrete(p, p.get_init_state());
}
}