* src/ltlast/atomic_prop.hh: Declare instance_count(). * src/ltlast/binop.hh, src/ltlast/unop.hh, src/ltlast/multop.hh: Likewise. Also, really inherit for ref_formula this time. * src/ltlast/atomic_prop.cc, src/ltlast/binop.cc, src/ltlast/unop.cc, src/ltlast/multop.cc: On destruction, suppress the instance from the instance map. Implement instance_count(). * src/ltlast/formula.cc, src/ltlast/formula.hh, src/ltlast/ref_formula.cc, src/ltlast/ref_formula.hh: Add virtual destructors. * src/ltlparse/ltlparse.yy: Recover from binary operators with missing right hand operand (the point is just to destroy the the left hand operand). * src/ltltest/equals.cc, src/ltltest/readltl.cc, src/ltltest/tostring.cc: Destroy used formulae. Make sure instance_count()s are null are the end. * src/ltltest/parseerr.test: Adjust expected result, now that the parser lnows about missing right hand operands. * src/ltlvisit/destroy.hh, src/ltlvisit/destroy.cc, src/ltlvisit/postfix.hh, src/ltlvisit/postfix.cc: New files. * src/ltlvisit/Makefile.am (libltlvisit_la_SOURCES): Add them. * src/ltlvisit/lunabbrev.cc (Xor, Equiv): Clone formulae occurring twice in the rewritten expression.
41 lines
893 B
C++
41 lines
893 B
C++
#ifndef SPOT_LTLAST_FORMULAE_HH
|
|
# define SPOT_LTLAST_FORMULAE_HH
|
|
|
|
#include "predecl.hh"
|
|
|
|
namespace spot
|
|
{
|
|
namespace ltl
|
|
{
|
|
|
|
/// \brief An LTL formula.
|
|
///
|
|
/// The only way you can work with a formula is to
|
|
/// build a spot::ltl::visitor or spot::ltl::const_visitor.
|
|
class formula
|
|
{
|
|
public:
|
|
virtual ~formula();
|
|
|
|
virtual void accept(visitor& v) = 0;
|
|
virtual void accept(const_visitor& v) const = 0;
|
|
|
|
/// \brief clone this formula
|
|
formula* ref();
|
|
/// \brief release formula
|
|
static void unref(formula* f);
|
|
|
|
protected:
|
|
/// \brief increment reference counter if any
|
|
virtual void ref_();
|
|
/// \brief decrement reference counter if any, return true when
|
|
/// the instance must be delete (usually when the counter hits 0).
|
|
virtual bool unref_();
|
|
};
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#endif // SPOT_LTLAST_FORMULAE_HH
|