Commit bf62d439 authored by Alexandre Duret-Lutz's avatar Alexandre Duret-Lutz
Browse files

Use 'const formula*' instead of 'formula*' everywhere.

The distinction makes no sense since Spot 0.5, where we switched from
mutable furmulae to immutable formulae.  The difference between
const_visitor and visitor made no sense either.  They have been merged
into one: visitor.

* iface/dve2/dve2check.cc, iface/gspn/ltlgspn.cc,
src/eltlparse/eltlparse.yy, src/eltlparse/public.hh,
src/evtgbatest/ltl2evtgba.cc, src/kripkeparse/kripkeparse.yy,
src/ltlast/atomic_prop.cc, src/ltlast/atomic_prop.hh,
src/ltlast/automatop.cc, src/ltlast/automatop.hh, src/ltlast/binop.cc,
src/ltlast/binop.hh, src/ltlast/bunop.cc, src/ltlast/bunop.hh,
src/ltlast/constant.cc, src/ltlast/constant.hh, src/ltlast/formula.cc,
src/ltlast/formula.hh, src/ltlast/formula_tree.cc,
src/ltlast/formula_tree.hh, src/ltlast/multop.cc,
src/ltlast/multop.hh, src/ltlast/predecl.hh, src/ltlast/refformula.cc,
src/ltlast/refformula.hh, src/ltlast/unop.cc, src/ltlast/unop.hh,
src/ltlast/visitor.hh, src/ltlenv/declenv.cc, src/ltlenv/declenv.hh,
src/ltlenv/defaultenv.cc, src/ltlenv/defaultenv.hh,
src/ltlenv/environment.hh, src/ltlparse/ltlfile.cc,
src/ltlparse/ltlfile.hh, src/ltlparse/ltlparse.yy,
src/ltlparse/public.hh, src/ltltest/consterm.cc,
src/ltltest/equals.cc, src/ltltest/genltl.cc, src/ltltest/kind.cc,
src/ltltest/length.cc, src/ltltest/randltl.cc, src/ltltest/readltl.cc,
src/ltltest/reduc.cc, src/ltltest/syntimpl.cc,
src/ltltest/tostring.cc, src/ltlvisit/apcollect.cc,
src/ltlvisit/apcollect.hh, src/ltlvisit/clone.cc,
src/ltlvisit/clone.hh, src/ltlvisit/contain.cc,
src/ltlvisit/contain.hh, src/ltlvisit/dotty.cc,
src/ltlvisit/length.cc, src/ltlvisit/lunabbrev.cc,
src/ltlvisit/lunabbrev.hh, src/ltlvisit/mark.cc, src/ltlvisit/mark.hh,
src/ltlvisit/nenoform.cc, src/ltlvisit/nenoform.hh,
src/ltlvisit/postfix.cc, src/ltlvisit/postfix.hh,
src/ltlvisit/randomltl.cc, src/ltlvisit/randomltl.hh,
src/ltlvisit/reduce.cc, src/ltlvisit/reduce.hh,
src/ltlvisit/simpfg.cc, src/ltlvisit/simpfg.hh,
src/ltlvisit/simplify.cc, src/ltlvisit/simplify.hh,
src/ltlvisit/snf.cc, src/ltlvisit/snf.hh, src/ltlvisit/tostring.cc,
src/ltlvisit/tunabbrev.cc, src/ltlvisit/tunabbrev.hh,
src/ltlvisit/wmunabbrev.cc, src/ltlvisit/wmunabbrev.hh,
src/neverparse/neverclaimparse.yy, src/sabatest/sabacomplementtgba.cc,
src/tgba/bdddict.cc, src/tgba/formula2bdd.cc, src/tgba/taatgba.cc,
src/tgba/taatgba.hh, src/tgbaalgos/eltl2tgba_lacim.cc,
src/tgbaalgos/ltl2taa.cc, src/tgbaalgos/ltl2tgba_fm.cc,
src/tgbaalgos/ltl2tgba_lacim.cc, src/tgbaalgos/minimize.cc,
src/tgbaalgos/randomgraph.cc, src/tgbaparse/tgbaparse.yy,
src/tgbatest/complementation.cc, src/tgbatest/ltl2tgba.cc,
src/tgbatest/ltlprod.cc, src/tgbatest/mixprod.cc,
src/tgbatest/randtgba.cc: Massive adjustment!
* src/tgbatest/reductgba.cc: Delete.
parent 0f0ada82
...@@ -6,10 +6,6 @@ New in spot 0.8.3a: ...@@ -6,10 +6,6 @@ New in spot 0.8.3a:
Expressions (SERE), and a couple of operators to bridge SERE and Expressions (SERE), and a couple of operators to bridge SERE and
LTL. See doc/tl/tl.pdf for the list of operators and their LTL. See doc/tl/tl.pdf for the list of operators and their
semantics. semantics.
- The constructors for temporal formulae will perform some trivial
simplifications based on associativity, commutativity,
idempotence, and neutral elements. See doc/tl/tl.pdf for the
list of such simplifications.
- Formula rewritings have been completely revamped, and augmented - Formula rewritings have been completely revamped, and augmented
with rules for PSL operators (and some new LTL rules as well). with rules for PSL operators (and some new LTL rules as well).
See doc/tl/tl.pdf for the list of the rewritings implemented. See doc/tl/tl.pdf for the list of the rewritings implemented.
...@@ -51,13 +47,24 @@ New in spot 0.8.3a: ...@@ -51,13 +47,24 @@ New in spot 0.8.3a:
* Interface changes: * Interface changes:
- Operators ->, <->, U, W, R, and M are now parsed as - Operators ->, <->, U, W, R, and M are now parsed as
right-associative to better match the PSL standard. right-associative to better match the PSL standard.
- The constructors for temporal formulae will perform some trivial
simplifications based on associativity, commutativity,
idempotence, and neutral elements. See doc/tl/tl.pdf for the
list of such simplifications.
- Formula instances now have many methods to inspect their
properties (membership to syntactic classes, absence of X
operator, etc...) in constant time.
- LTL/PSL formulae are now handled everywhere as 'const formula*'
and not just 'formula*'. This reflects the true nature of these
(immutable) formula objects, and cleanups a lot of code.
Unfortunately, it is a backward incompatible change: you may have
to add 'const' to a couple of lines in your code, and change
'ltl::const_vistitor' into 'ltl::visitor' if you have written a
custom visitor.
- The new entry point for LTL/PSL simplifications is the function - The new entry point for LTL/PSL simplifications is the function
ltl_simplifier::simplify() declared in src/ltlvisit/simplify.hh. ltl_simplifier::simplify() declared in src/ltlvisit/simplify.hh.
The ltl_simplifier class implements a cache. The ltl_simplifier class implements a cache.
Functions such as reduce() or reduce_tau03() are deprecated. Functions such as reduce() or reduce_tau03() are deprecated.
- Formula instances now have many methods to inspect their
properties (membership to syntactic classes, absence of X
operator, etc...) in constant time.
- The old game-theory-based implementations for direct and delayed - The old game-theory-based implementations for direct and delayed
simulation reductions have been removed. The old direct simulation reductions have been removed. The old direct
simulation would only work on degeneralized automata, and yet simulation would only work on degeneralized automata, and yet
......
// Copyright (C) 2011 Laboratoire de Recherche et Developpement de // Copyright (C) 2011, 2012 Laboratoire de Recherche et Developpement de
// l'Epita (LRDE) // l'Epita (LRDE)
// //
// This file is part of Spot, a model checking library. // This file is part of Spot, a model checking library.
...@@ -177,8 +177,8 @@ main(int argc, char **argv) ...@@ -177,8 +177,8 @@ main(int argc, char **argv)
spot::tgba* product = 0; spot::tgba* product = 0;
spot::emptiness_check_instantiator* echeck_inst = 0; spot::emptiness_check_instantiator* echeck_inst = 0;
int exit_code = 0; int exit_code = 0;
spot::ltl::formula* f = 0; const spot::ltl::formula* f = 0;
spot::ltl::formula* deadf = 0; const spot::ltl::formula* deadf = 0;
if (dead == 0 || !strcasecmp(dead, "true")) if (dead == 0 || !strcasecmp(dead, "true"))
{ {
...@@ -222,7 +222,7 @@ main(int argc, char **argv) ...@@ -222,7 +222,7 @@ main(int argc, char **argv)
{ {
spot::ltl::ltl_simplifier_options opt(true, true, true, true, true); spot::ltl::ltl_simplifier_options opt(true, true, true, true, true);
spot::ltl::ltl_simplifier simp(opt); spot::ltl::ltl_simplifier simp(opt);
spot::ltl::formula* r = simp.simplify(f); const spot::ltl::formula* r = simp.simplify(f);
f->destroy(); f->destroy();
f = r; f = r;
} }
......
// Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009 Laboratoire // -*- coding: utf-8 -*-
// d'Informatique de Paris 6 (LIP6), dpartement Systmes Rpartis // Copyright (C) 2008, 2009, 2011, 2012 Laboratoire de Recherche et
// Coopratifs (SRC), Universit Pierre et Marie Curie. // Developpement de l'Epita (LRDE)
// Copyright (C) 2003, 2004, 2006, 2007 Laboratoire d'Informatique de
// Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
// Université Pierre et Marie Curie.
// //
// This file is part of Spot, a model checking library. // This file is part of Spot, a model checking library.
// //
...@@ -229,8 +232,8 @@ main(int argc, char **argv) ...@@ -229,8 +232,8 @@ main(int argc, char **argv)
} }
spot::ltl::parse_error_list pel; spot::ltl::parse_error_list pel;
spot::ltl::formula* f = spot::ltl::parse(argv[formula_index + 1], const spot::ltl::formula* f =
pel, env); spot::ltl::parse(argv[formula_index + 1], pel, env);
if (spot::ltl::format_parse_errors(std::cerr, if (spot::ltl::format_parse_errors(std::cerr,
argv[formula_index + 1], pel)) argv[formula_index + 1], pel))
......
...@@ -64,7 +64,7 @@ namespace spot ...@@ -64,7 +64,7 @@ namespace spot
%parse-param {spot::eltl::aliasmap& amap} %parse-param {spot::eltl::aliasmap& amap}
%parse-param {spot::eltl::parse_error_list_t &pe} %parse-param {spot::eltl::parse_error_list_t &pe}
%parse-param {spot::ltl::environment &parse_environment} %parse-param {spot::ltl::environment &parse_environment}
%parse-param {spot::ltl::formula* &result} %parse-param {const spot::ltl::formula* &result}
%lex-param {spot::eltl::parse_error_list_t &pe} %lex-param {spot::eltl::parse_error_list_t &pe}
%expect 0 %expect 0
%pure-parser %pure-parser
...@@ -74,7 +74,7 @@ namespace spot ...@@ -74,7 +74,7 @@ namespace spot
std::string* sval; std::string* sval;
spot::ltl::nfa* nval; spot::ltl::nfa* nval;
spot::ltl::automatop::vec* aval; spot::ltl::automatop::vec* aval;
spot::ltl::formula* fval; const spot::ltl::formula* fval;
/// To handle aliases. /// To handle aliases.
spot::ltl::formula_tree::node* pval; spot::ltl::formula_tree::node* pval;
...@@ -520,7 +520,7 @@ namespace spot ...@@ -520,7 +520,7 @@ namespace spot
{ {
namespace eltl namespace eltl
{ {
formula* const formula*
parse_file(const std::string& name, parse_file(const std::string& name,
parse_error_list& error_list, parse_error_list& error_list,
environment& env, environment& env,
...@@ -533,7 +533,7 @@ namespace spot ...@@ -533,7 +533,7 @@ namespace spot
spair("-", std::string("Cannot open file ") + name))); spair("-", std::string("Cannot open file ") + name)));
return 0; return 0;
} }
formula* result = 0; const formula* result = 0;
nfamap nmap; nfamap nmap;
aliasmap amap; aliasmap amap;
parse_error_list_t pe; parse_error_list_t pe;
...@@ -546,14 +546,14 @@ namespace spot ...@@ -546,14 +546,14 @@ namespace spot
return result; return result;
} }
formula* const formula*
parse_string(const std::string& eltl_string, parse_string(const std::string& eltl_string,
parse_error_list& error_list, parse_error_list& error_list,
environment& env, environment& env,
bool debug) bool debug)
{ {
flex_scan_string(eltl_string.c_str()); flex_scan_string(eltl_string.c_str());
formula* result = 0; const formula* result = 0;
nfamap nmap; nfamap nmap;
aliasmap amap; aliasmap amap;
parse_error_list_t pe; parse_error_list_t pe;
......
// Copyright (C) 2008, 2010 Laboratoire de Recherche et Développement // -*- coding: utf-8 -*-
// de l'Epita (LRDE). // Copyright (C) 2008, 2010, 2012 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// //
// This file is part of Spot, a model checking library. // This file is part of Spot, a model checking library.
// //
...@@ -64,10 +65,11 @@ namespace spot ...@@ -64,10 +65,11 @@ namespace spot
/// 0 if the file could not be opened. /// 0 if the file could not be opened.
/// ///
/// \warning This function is not reentrant. /// \warning This function is not reentrant.
formula* parse_file(const std::string& filename, const formula* parse_file(const std::string& filename,
parse_error_list& error_list, parse_error_list& error_list,
environment& env = default_environment::instance(), environment& env =
bool debug = false); default_environment::instance(),
bool debug = false);
/// \brief Build a formula from an ELTL string. /// \brief Build a formula from an ELTL string.
/// \param eltl_string The string to parse. /// \param eltl_string The string to parse.
...@@ -79,10 +81,11 @@ namespace spot ...@@ -79,10 +81,11 @@ namespace spot
/// 0 if the input was unparsable. /// 0 if the input was unparsable.
/// ///
/// \warning This function is not reentrant. /// \warning This function is not reentrant.
formula* parse_string(const std::string& eltl_string, const formula* parse_string(const std::string& eltl_string,
parse_error_list& error_list, parse_error_list& error_list,
environment& env = default_environment::instance(), environment& env =
bool debug = false); default_environment::instance(),
bool debug = false);
/// \brief Format diagnostics produced by spot::eltl::parse. /// \brief Format diagnostics produced by spot::eltl::parse.
/// \param os Where diagnostics should be output. /// \param os Where diagnostics should be output.
......
// Copyright (C) 2008, 2009 Laboratoire de Recherche et Dveloppement // -*- coding: utf-8 -*-
// de l'Epita (LRDE). // Copyright (C) 2008, 2009, 2012 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// Copyright (C) 2004 Laboratoire d'Informatique de Paris 6 // Copyright (C) 2004 Laboratoire d'Informatique de Paris 6
// (LIP6), dpartement Systmes Rpartis Coopratifs (SRC), Universit // (LIP6), département Systèmes Répartis Coopératifs (SRC), Université
// Pierre et Marie Curie. // Pierre et Marie Curie.
// //
// This file is part of Spot, a model checking library. // This file is part of Spot, a model checking library.
...@@ -84,7 +85,7 @@ main(int argc, char** argv) ...@@ -84,7 +85,7 @@ main(int argc, char** argv)
while (tok) while (tok)
{ {
unobservables->insert unobservables->insert
(static_cast<spot::ltl::atomic_prop*>(env.require(tok))); (static_cast<const spot::ltl::atomic_prop*>(env.require(tok)));
tok = strtok(0, ", \t;"); tok = strtok(0, ", \t;");
} }
} }
...@@ -100,7 +101,7 @@ main(int argc, char** argv) ...@@ -100,7 +101,7 @@ main(int argc, char** argv)
spot::bdd_dict* dict = new spot::bdd_dict(); spot::bdd_dict* dict = new spot::bdd_dict();
spot::ltl::formula* f = 0; const spot::ltl::formula* f = 0;
{ {
spot::ltl::parse_error_list pel; spot::ltl::parse_error_list pel;
......
// Copyright (C) 2011 Laboratoire de Recherche et Developpement // -*- coding: utf-8 -*-
// Copyright (C) 2011, 2012 Laboratoire de Recherche et Développement
// de l'Epita (LRDE) // de l'Epita (LRDE)
// //
// This file is part of Spot, a model checking library. // This file is part of Spot, a model checking library.
...@@ -48,7 +49,7 @@ typedef std::map<std::string, bdd> formula_cache; ...@@ -48,7 +49,7 @@ typedef std::map<std::string, bdd> formula_cache;
{ {
int token; int token;
std::string* str; std::string* str;
spot::ltl::formula* f; const spot::ltl::formula* f;
std::list<std::string*>* list; std::list<std::string*>* list;
} }
...@@ -113,7 +114,7 @@ strident "," condition "," follow_list ";" ...@@ -113,7 +114,7 @@ strident "," condition "," follow_list ";"
if (i == fcache.end()) if (i == fcache.end())
{ {
parse_error_list pel; parse_error_list pel;
formula* f = spot::ltl::parse(*$3, pel, parse_environment); const formula* f = spot::ltl::parse(*$3, pel, parse_environment);
for (parse_error_list::iterator i = pel.begin(); for (parse_error_list::iterator i = pel.begin();
i != pel.end(); ++i) i != pel.end(); ++i)
{ {
...@@ -158,7 +159,7 @@ string: STRING ...@@ -158,7 +159,7 @@ string: STRING
{ {
$$ = $1; $$ = $1;
error_list.push_back(spot::kripke_parse_error(@1, error_list.push_back(spot::kripke_parse_error(@1,
"unterminated string")); "unterminated string"));
} }
; ;
......
// Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et Dveloppement // -*- coding: utf-8 -*-
// de l'Epita (LRDE). // Copyright (C) 2009, 2010, 2011, 2012 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// Copyright (C) 2003, 2004, 2005 Laboratoire d'Informatique de // Copyright (C) 2003, 2004, 2005 Laboratoire d'Informatique de
// Paris 6 (LIP6), dpartement Systmes Rpartis Coopratifs (SRC), // Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
// Universit Pierre et Marie Curie. // Université Pierre et Marie Curie.
// //
// This file is part of Spot, a model checking library. // This file is part of Spot, a model checking library.
// //
...@@ -71,13 +72,7 @@ namespace spot ...@@ -71,13 +72,7 @@ namespace spot
} }
void void
atomic_prop::accept(visitor& v) atomic_prop::accept(visitor& v) const
{
v.visit(this);
}
void
atomic_prop::accept(const_visitor& v) const
{ {
v.visit(this); v.visit(this);
} }
...@@ -96,18 +91,19 @@ namespace spot ...@@ -96,18 +91,19 @@ namespace spot
atomic_prop::map atomic_prop::instances; atomic_prop::map atomic_prop::instances;
atomic_prop* const atomic_prop*
atomic_prop::instance(const std::string& name, environment& env) atomic_prop::instance(const std::string& name, environment& env)
{ {
pair p(name, &env); pair p(name, &env);
// FIXME: Use lower_bound, or a hash_map.
map::iterator i = instances.find(p); map::iterator i = instances.find(p);
const atomic_prop* ap;
if (i != instances.end()) if (i != instances.end())
{ ap = i->second;
return static_cast<atomic_prop*>(i->second->clone()); else
} ap = instances[p] = new atomic_prop(name, env);
atomic_prop* ap = new atomic_prop(name, env); ap->clone();
instances[p] = ap; return ap;
return static_cast<atomic_prop*>(ap->clone());
} }
unsigned unsigned
......
...@@ -45,10 +45,10 @@ namespace spot ...@@ -45,10 +45,10 @@ namespace spot
public: public:
/// Build an atomic proposition with name \a name in /// Build an atomic proposition with name \a name in
/// environment \a env. /// environment \a env.
static atomic_prop* instance(const std::string& name, environment& env); static const atomic_prop*
instance(const std::string& name, environment& env);
virtual void accept(visitor& visitor); virtual void accept(visitor& visitor) const;
virtual void accept(const_visitor& visitor) const;
/// Get the name of the atomic proposition. /// Get the name of the atomic proposition.
const std::string& name() const; const std::string& name() const;
...@@ -68,7 +68,7 @@ namespace spot ...@@ -68,7 +68,7 @@ namespace spot
virtual ~atomic_prop(); virtual ~atomic_prop();
typedef std::pair<std::string, environment*> pair; typedef std::pair<std::string, environment*> pair;
typedef std::map<pair, atomic_prop*> map; typedef std::map<pair, const atomic_prop*> map;
static map instances; static map instances;
private: private:
......
// Copyright (C) 2008, 2009, 2010, 2011 Laboratoire de Recherche et // -*- coding: utf-8 -*-
// Developpement de l'Epita (LRDE) // Copyright (C) 2008, 2009, 2010, 2011, 2012 Laboratoire de Recherche
// et Développement de l'Epita (LRDE)
// //
// This file is part of Spot, a model checking library. // This file is part of Spot, a model checking library.
// //
...@@ -84,36 +85,34 @@ namespace spot ...@@ -84,36 +85,34 @@ namespace spot
} }
void void
automatop::accept(visitor& v) automatop::accept(visitor& v) const
{
v.visit(this);
}
void
automatop::accept(const_visitor& v) const
{ {
v.visit(this); v.visit(this);
} }
automatop::map automatop::instances; automatop::map automatop::instances;
automatop* const automatop*
automatop::instance(const nfa::ptr nfa, vec* v, bool negated) automatop::instance(const nfa::ptr nfa, vec* v, bool negated)
{ {
assert(nfa != 0); assert(nfa != 0);
triplet p(std::make_pair(nfa, negated), v); triplet p(std::make_pair(nfa, negated), v);
map::iterator i = instances.find(p); map::iterator i = instances.find(p);
const automatop* res;
if (i != instances.end()) if (i != instances.end())
{ {
// The instance already exists. // The instance already exists.
for (vec::iterator vi = v->begin(); vi != v->end(); ++vi) for (vec::iterator vi = v->begin(); vi != v->end(); ++vi)
(*vi)->destroy(); (*vi)->destroy();
delete v; delete v;
return static_cast<automatop*>(i->second->clone()); res = i->second;
}
else
{
res = instances[p] = new automatop(nfa, v, negated);
} }
automatop* res = new automatop(nfa, v, negated); res->clone();
instances[p] = res; return res;
return static_cast<automatop*>(res->clone());
} }
unsigned unsigned
...@@ -128,12 +127,6 @@ namespace spot ...@@ -128,12 +127,6 @@ namespace spot
return (*children_)[n]; return (*children_)[n];
} }
formula*
automatop::nth(unsigned n)
{
return (*children_)[n];
}
const spot::ltl::nfa::ptr const spot::ltl::nfa::ptr
automatop::get_nfa() const automatop::get_nfa() const
{ {
...@@ -165,6 +158,5 @@ namespace spot ...@@ -165,6 +158,5 @@ namespace spot
} }
return os; return os;
} }
} }
} }
// Copyright (C) 2008, 2009 Laboratoire de Recherche et Developpement // -*- coding: utf-8 -*-
// de l'Epita (LRDE) // Copyright (C) 2008, 2009, 2012 Laboratoire de Recherche et
// Développement de l'Epita (LRDE)
// //
// This file is part of Spot, a model checking library. // This file is part of Spot, a model checking library.
// //
...@@ -40,7 +41,7 @@ namespace spot ...@@ -40,7 +41,7 @@ namespace spot
{ {
public: public:
/// List of formulae. /// List of formulae.
typedef std::vector<formula*> vec; typedef std::vector<const formula*> vec;
/// \brief Build a spot::ltl::automatop with many children. /// \brief Build a spot::ltl::automatop with many children.
/// ///
...@@ -48,11 +49,10 @@ namespace spot ...@@ -48,11 +49,10 @@ namespace spot
/// the caller should allocate it with \c new, but not use it /// the caller should allocate it with \c new, but not use it
/// (especially not destroy it) after it has been passed to /// (especially not destroy it) after it has been passed to
/// spot::ltl::automatop. /// spot::ltl::automatop.
static automatop* static const automatop*
instance(const nfa::ptr nfa, vec* v, bool negated); instance(const nfa::ptr nfa, vec* v, bool negated);
virtual void accept(visitor& v); virtual void accept(visitor& v) const;
virtual void accept(const_visitor& v) const;
/// Get the number of argument. /// Get the number of argument.
unsigned size() const; unsigned size() const;
...@@ -60,10 +60,6 @@ namespace spot ...@@ -60,10 +60,6 @@ namespace spot
/// ///
/// Starting with \a n = 0. /// Starting with \a n = 0.
const formula* nth(unsigned n) const; const formula* nth(unsigned n) const;
/// \brief Get the nth argument.
///
/// Starting with \a n = 0.
formula* nth(unsigned n);
/// Get the NFA of this operator. /// Get the NFA of this operator.
const spot::ltl::nfa::ptr get_nfa() const; const spot::ltl::nfa::ptr get_nfa() const;
...@@ -96,7 +92,7 @@ namespace spot ...@@ -96,7 +92,7 @@ namespace spot
return *p1.second < *p2.second; return *p1.second < *p2.second;
} }
}; };
typedef std::map<triplet, automatop*, tripletcmp> map; typedef std::map<triplet, const automatop*, tripletcmp> map;
static map instances; static map instances;
automatop(const nfa::ptr, vec* v, bool negated); automatop(const nfa::ptr, vec* v, bool negated);
......
// Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et Dveloppement // -*- coding: utf-8 -*-
// de l'Epita (LRDE). // Copyright (C) 2009, 2010, 2011, 2012 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// Copyright (C) 2003, 2005 Laboratoire d'Informatique de Paris // Copyright (C) 2003, 2005 Laboratoire d'Informatique de Paris
// 6 (LIP6), dpartement Systmes Rpartis Coopratifs (SRC),