Check trivial multop equality at build time. The makes the

equal visitor useless, since two equals formulae will now
share the same address.

* src/ltlast/multop.hh (add_sorted): New function.
(paircmp): New comparison functor.
(map): Use paircmp, we want to compare the vectors' contents,
not their addresses.
* src/ltlast/multop.cc (add_sorted): New function.
(add): Use it.
* src/ltltest/equals.cc, src/ltltest/tostring.cc: Compare
pointers instead of calling equal.
* src/ltlvisit/equals.cc, src/ltlvisit/equals.hh: Delete.
* src/ltlvisit/Makefile.am (libltlvisit_la_SOURCES): Remove
equals.cc and equals.hh.
* wrap/spot.i: Do not include equals.hh.
This commit is contained in:
Alexandre Duret-Lutz 2003-05-16 07:39:41 +00:00
parent 9123e56ff9
commit 1cdfea31b0
10 changed files with 65 additions and 197 deletions

View file

@ -2,6 +2,7 @@
#include <utility>
#include "multop.hh"
#include "visitor.hh"
#include "ltlvisit/destroy.hh"
namespace spot
{
@ -107,6 +108,27 @@ namespace spot
return instance(op, v);
}
void
multop::add_sorted(vec* v, formula* f)
{
// Keep V sorted. When adding a new multop, iterate over all
// element until we find either an identicalle element, or the
// place where the new one should be inserted.
vec::iterator i;
for (i = v->begin(); i != v->end(); ++i)
{
if (*i > f)
break;
if (*i == f)
{
// F is arleady a child. Drop it.
destroy(f);
return;
}
}
v->insert(i, f);
}
multop::vec*
multop::add(type op, vec* v, formula* f)
{
@ -117,13 +139,15 @@ namespace spot
{
unsigned ps = p->size();
for (unsigned i = 0; i < ps; ++i)
v->push_back(p->nth(i));
// that sub-formula is now useless
add_sorted(v, p->nth(i));
// That sub-formula is now useless, drop it.
// Note that we use unref(), not destroy(), because we've
// adopted its children and don't want to destroy these.
formula::unref(f);
}
else
{
v->push_back(f);
add_sorted(v, f);
}
return v;
}