* src/tgba/bdddict.cc, src/tgba/bdddict.cc (register_clone_acc):

New function.
* src/tgba/tgbaproduct.cc, src/tgba/tgbaproduct.hh: Use it to
distinguish acceptance conditions that are identical in both
operands.
* src/tgbatest/explpro4.test: New file.
* src/tgbatest/explpro2.test, src/tgbatest/Makefile.am: Adjust.
This commit is contained in:
Alexandre Duret-Lutz 2006-07-19 14:55:39 +00:00
parent cb9549e4d4
commit c412cd4cc3
7 changed files with 129 additions and 21 deletions

View file

@ -20,10 +20,14 @@
// 02111-1307, USA.
#include <ostream>
#include <sstream>
#include <cassert>
#include <ltlvisit/clone.hh>
#include <ltlvisit/destroy.hh>
#include <ltlvisit/tostring.hh>
#include <ltlvisit/tostring.hh>
#include <ltlast/atomic_prop.hh>
#include <ltlenv/defaultenv.hh>
#include "bdddict.hh"
namespace spot
@ -140,6 +144,24 @@ namespace spot
}
int
bdd_dict::register_clone_acc(int var, const void* for_me)
{
vf_map::iterator i = acc_formula_map.find(var);
assert(i != acc_formula_map.end());
std::ostringstream s;
// FIXME: We could be smarter and reuse unused "$n" numbers.
s << ltl::to_string(i->second) << "$"
<< ++clone_counts[var];
ltl::formula* f =
ltl::atomic_prop::instance(s.str(),
ltl::default_environment::instance());
int res = register_acceptance_variable(f, for_me);
ltl::destroy(f);
return res;
}
int
bdd_dict::register_anonymous_variables(int n, const void* for_me)
{