Commit a12922b3 authored by Alexandre Duret-Lutz's avatar Alexandre Duret-Lutz

Use -fvisibility=hidden in src/tgba/.

* src/tgba/Makefile.am: Use $(VISIBILITY_CXXFLAGS).
* src/tgba/bdddict.hh, src/tgba/bddprint.hh, src/tgba/formula2bdd.hh,
src/tgba/futurecondcol.hh, src/tgba/state.hh, src/tgba/statebdd.hh,
src/tgba/succiter.hh, src/tgba/succiterconcrete.hh, src/tgba/taatgba.hh,
src/tgba/tgba.hh, src/tgba/tgbabddconcrete.hh,
src/tgba/tgbabddconcretefactory.hh, src/tgba/tgbabddconcreteproduct.hh,
src/tgba/tgbabddcoredata.hh, src/tgba/tgbabddfactory.hh,
src/tgba/tgbaexplicit.hh, src/tgba/tgbakvcomplement.hh,
src/tgba/tgbaproduct.hh, src/tgba/tgbasafracomplement.hh,
src/tgba/tgbascc.hh, src/tgba/tgbasgba.hh, src/tgba/tgbatba.hh,
src/tgba/tgbaunion.hh, src/tgba/wdbacomp.hh: Mark exported symbols with
SPOT_API.
* src/tgba/public.hh: Mark the file as deprecated.
* src/tgbaalgos/cutscc.hh: Adjust.
parent 8ba3e64f
## Copyright (C) 2009, 2010, 2011, 2012 Laboratoire de Recherche et
## Dveloppement de l'Epita (LRDE).
## -*- coding: utf-8 -*-
## Copyright (C) 2009, 2010, 2011, 2012, 2013 Laboratoire de Recherche et
## Développement de l'Epita (LRDE).
## Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
## dpartement Systmes Rpartis Coopratifs (SRC), Universit Pierre
## département Systèmes Répartis Coopératifs (SRC), Université Pierre
## et Marie Curie.
##
## This file is part of Spot, a model checking library.
......@@ -20,7 +21,7 @@
## along with this program. If not, see <http://www.gnu.org/licenses/>.
AM_CPPFLAGS = -I$(srcdir)/.. -I.. $(BUDDY_CPPFLAGS)
AM_CXXFLAGS = $(WARNING_CXXFLAGS)
AM_CXXFLAGS = $(WARNING_CXXFLAGS) $(VISIBILITY_CXXFLAGS)
tgbadir = $(pkgincludedir)/tgba
......
......@@ -54,7 +54,7 @@ namespace spot
/// unregister_all_my_variables(), giving the same pointer.
/// Variables can also by unregistered one by one using
/// unregister_variable().
class bdd_dict
class SPOT_API bdd_dict
{
bdd_dict_priv* priv_;
public:
......
......@@ -37,8 +37,8 @@ namespace spot
/// \param os The output stream.
/// \param dict The dictionary to use, to lookup variables.
/// \param b The BDD to print.
std::ostream& bdd_print_sat(std::ostream& os,
const bdd_dict* dict, bdd b);
SPOT_API std::ostream&
bdd_print_sat(std::ostream& os, const bdd_dict* dict, bdd b);
/// \brief Format a BDD as a list of literals.
///
......@@ -46,7 +46,8 @@ namespace spot
/// \param dict The dictionary to use, to lookup variables.
/// \param b The BDD to print.
/// \return The BDD formated as a string.
std::string bdd_format_sat(const bdd_dict* dict, bdd b);
SPOT_API std::string
bdd_format_sat(const bdd_dict* dict, bdd b);
/// \brief Print a BDD as a list of acceptance conditions.
///
......@@ -55,8 +56,8 @@ namespace spot
/// \param dict The dictionary to use, to lookup variables.
/// \param b The BDD to print.
/// \return The BDD formated as a string.
std::ostream& bdd_print_acc(std::ostream& os,
const bdd_dict* dict, bdd b);
SPOT_API std::ostream&
bdd_print_acc(std::ostream& os, const bdd_dict* dict, bdd b);
/// \brief Print a BDD as a set of acceptance conditions.
///
......@@ -65,8 +66,8 @@ namespace spot
/// \param dict The dictionary to use, to lookup variables.
/// \param b The BDD to print.
/// \return The BDD formated as a string.
std::ostream& bdd_print_accset(std::ostream& os,
const bdd_dict* dict, bdd b);
SPOT_API std::ostream&
bdd_print_accset(std::ostream& os, const bdd_dict* dict, bdd b);
/// \brief Format a BDD as a set of acceptance conditions.
///
......@@ -74,55 +75,60 @@ namespace spot
/// \param dict The dictionary to use, to lookup variables.
/// \param b The BDD to print.
/// \return The BDD formated as a string.
std::string bdd_format_accset(const bdd_dict* dict, bdd b);
SPOT_API std::string
bdd_format_accset(const bdd_dict* dict, bdd b);
/// \brief Print a BDD as a set.
/// \param os The output stream.
/// \param dict The dictionary to use, to lookup variables.
/// \param b The BDD to print.
std::ostream& bdd_print_set(std::ostream& os,
const bdd_dict* dict, bdd b);
SPOT_API std::ostream&
bdd_print_set(std::ostream& os, const bdd_dict* dict, bdd b);
/// \brief Format a BDD as a set.
/// \param dict The dictionary to use, to lookup variables.
/// \param b The BDD to print.
/// \return The BDD formated as a string.
std::string bdd_format_set(const bdd_dict* dict, bdd b);
SPOT_API std::string
bdd_format_set(const bdd_dict* dict, bdd b);
/// \brief Print a BDD as a formula.
/// \param os The output stream.
/// \param dict The dictionary to use, to lookup variables.
/// \param b The BDD to print.
std::ostream& bdd_print_formula(std::ostream& os,
const bdd_dict* dict, bdd b);
SPOT_API std::ostream&
bdd_print_formula(std::ostream& os, const bdd_dict* dict, bdd b);
/// \brief Format a BDD as a formula.
/// \param dict The dictionary to use, to lookup variables.
/// \param b The BDD to print.
/// \return The BDD formated as a string.
std::string bdd_format_formula(const bdd_dict* dict, bdd b);
SPOT_API std::string
bdd_format_formula(const bdd_dict* dict, bdd b);
/// \brief Print a BDD as a diagram in dotty format.
/// \param os The output stream.
/// \param dict The dictionary to use, to lookup variables.
/// \param b The BDD to print.
std::ostream& bdd_print_dot(std::ostream& os,
const bdd_dict* dict, bdd b);
SPOT_API std::ostream&
bdd_print_dot(std::ostream& os, const bdd_dict* dict, bdd b);
/// \brief Print a BDD as a table.
/// \param os The output stream.
/// \param dict The dictionary to use, to lookup variables.
/// \param b The BDD to print.
std::ostream& bdd_print_table(std::ostream& os,
const bdd_dict* dict, bdd b);
SPOT_API std::ostream&
bdd_print_table(std::ostream& os, const bdd_dict* dict, bdd b);
/// \brief Enable UTF-8 output for bdd printers.
void enable_utf8();
SPOT_API void enable_utf8();
/// \brief Format a BDD as an irredundant sum of product.
/// \param dict The dictionary to use, to lookup variables.
/// \param b The BDD to print.
/// \return The BDD formated as a string.
std::string
SPOT_API std::string
bdd_format_isop(const bdd_dict* dict, bdd b);
......@@ -130,7 +136,7 @@ namespace spot
/// \param os The output stream.
/// \param dict The dictionary to use, to lookup variables.
/// \param b The BDD to print.
std::ostream&
SPOT_API std::ostream&
bdd_print_isop(std::ostream& os, const bdd_dict* dict, bdd b);
}
......
......@@ -24,7 +24,6 @@
# define SPOT_TGBA_FORMULA2BDD_HH
# include "bdddict.hh"
# include "ltlast/formula.hh"
namespace spot
{
......@@ -39,7 +38,8 @@ namespace spot
/// passing it right away to bdd_to_formula(), you should not forget
/// to unregister the variables that have been registered for \a
/// for_me. See bdd_dict::unregister_all_my_variables().
bdd formula_to_bdd(const ltl::formula* f, bdd_dict* d, void* for_me);
SPOT_API bdd
formula_to_bdd(const ltl::formula* f, bdd_dict* d, void* for_me);
/// \brief Convert a BDD into a formula.
///
......@@ -49,7 +49,8 @@ namespace spot
/// formulas, and all the BDD variables used in \a f should have
/// been registered in \a d. Although the result has type
/// ltl::formula*, it obviously does not use any temporal operator.
const ltl::formula* bdd_to_formula(bdd f, const bdd_dict* d);
SPOT_API const
ltl::formula* bdd_to_formula(bdd f, const bdd_dict* d);
}
#endif // SPOT_TGBA_FORMULA2BDD_HH
// Copyright (C) 2009 Laboratoire de recherche et développement de l'Epita.
// -*- coding: utf-8 -*-
// Copyright (C) 2009, 2013 Laboratoire de recherche et développement
// de l'Epita.
//
// This file is part of Spot, a model checking library.
//
......@@ -32,7 +34,7 @@ namespace spot
/// This new method returns a set of conditions that can be
/// seen on a transitions accessible (maybe indirectly) from
/// the given state.
class future_conditions_collector : public tgba_scc
class SPOT_API future_conditions_collector : public tgba_scc
{
public:
typedef scc_map::cond_set cond_set;
......
// -*- coding: utf-8 -*-
// Copyright (C) 2013 Laboratoire de Recherche et Developpement de
// l'Epita (LRDE).
// Copyright (C) 2003 Laboratoire d'Informatique de Paris 6 (LIP6),
// dpartement Systmes Rpartis Coopratifs (SRC), Universit Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
......@@ -20,6 +23,13 @@
#ifndef SPOT_TGBA_PUBLIC_HH
# define SPOT_TGBA_PUBLIC_HH
// This file should not exist.
#if __GNUC__
#ifndef SKIP_DEPRECATED_WARNING
#warning This file is deprecated. Include tgba.hh or what you need.
#endif
#endif
# include "tgba.hh"
# include "tgbabddconcrete.hh"
# include "tgbabddconcreteproduct.hh"
......
......@@ -23,6 +23,7 @@
#ifndef SPOT_TGBA_STATE_HH
# define SPOT_TGBA_STATE_HH
#include "misc/common.hh"
#include <cstddef>
#include <bdd.h>
#include <cassert>
......@@ -35,7 +36,7 @@ namespace spot
/// \ingroup tgba_essentials
/// \brief Abstract class for states.
class state
class SPOT_API state
{
public:
/// \brief Compares two states (that come from the same automaton).
......
// -*- coding: utf-8 -*-
// Copyright (C) 2013 Laboratoire de Recherche et Développement de
// l'Epita.
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
......@@ -27,7 +30,7 @@ namespace spot
{
/// A state whose representation is a BDD.
/// \ingroup tgba_representation
class state_bdd: public state
class SPOT_API state_bdd: public state
{
public:
state_bdd(bdd s)
......
// -*- coding: utf-8 -*-
// Copyright (C) 2011, 2013 Laboratoire de Recherche et Developpement de
// l'Epita (LRDE).
// Copyright (C) 2003, 2004, 2005 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
......@@ -34,7 +35,7 @@ namespace spot
/// transition labels. Because transitions are never explicitely
/// encoded, labels (conditions and acceptance conditions) can only
/// be queried while iterating over the successors.
class tgba_succ_iterator
class SPOT_API tgba_succ_iterator
{
public:
virtual
......
// -*- coding: utf-8 -*-
// Copyright (C) 2013 Laboratoire de Recherche et Developpement de
// l'Epita (LRDE).
// Copyright (C) 2003, 2004, 2005 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
......@@ -28,7 +31,8 @@ namespace spot
{
/// A concrete iterator over successors of a TGBA state.
/// \ingroup tgba_representation
class tgba_succ_iterator_concrete: public tgba_succ_iterator
class SPOT_API tgba_succ_iterator_concrete:
public tgba_succ_iterator
{
public:
/// \brief Build a spot::tgba_succ_iterator_concrete.
......
// -*- coding: utf-8 -*-
// Copyright (C) 2009, 2011, 2012 Laboratoire de Recherche et
// Copyright (C) 2009, 2011, 2012, 2013 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
//
// This file is part of Spot, a model checking library.
......@@ -32,7 +32,7 @@ namespace spot
{
/// \brief A self-loop Transition-based Alternating Automaton (TAA)
/// which is seen as a TGBA (abstract class, see below).
class taa_tgba : public tgba
class SPOT_API taa_tgba : public tgba
{
public:
taa_tgba(bdd_dict* dict);
......@@ -83,7 +83,7 @@ namespace spot
};
/// Set of states deriving from spot::state.
class state_set : public spot::state
class SPOT_API state_set : public spot::state
{
public:
state_set(const taa_tgba::state_set* s, bool delete_me = false)
......@@ -107,7 +107,7 @@ namespace spot
bool delete_me_;
};
class taa_succ_iterator : public tgba_succ_iterator
class SPOT_API taa_succ_iterator : public tgba_succ_iterator
{
public:
taa_succ_iterator(const taa_tgba::state_set* s, bdd all_acc);
......@@ -152,7 +152,7 @@ namespace spot
/// A taa_tgba instance with states labeled by a given type.
/// Still an abstract class, see below.
template<typename label, typename label_hash>
class taa_tgba_labelled : public taa_tgba
class SPOT_API taa_tgba_labelled : public taa_tgba
{
public:
taa_tgba_labelled(bdd_dict* dict) : taa_tgba(dict) {};
......@@ -324,7 +324,7 @@ namespace spot
}
};
class taa_tgba_string :
class SPOT_API taa_tgba_string :
public taa_tgba_labelled<std::string, string_hash>
{
public:
......@@ -336,7 +336,7 @@ namespace spot
virtual std::string clone_if(const std::string& label) const;
};
class taa_tgba_formula :
class SPOT_API taa_tgba_formula :
public taa_tgba_labelled<const ltl::formula*, ltl::formula_ptr_hash>
{
public:
......
......@@ -64,7 +64,7 @@ namespace spot
/// we never represent transitions! Transition informations are
/// obtained by querying the iterator over the successors of
/// a state.
class tgba
class SPOT_API tgba
{
protected:
tgba();
......
// Copyright (C) 2011 Laboratoire de Recherche et Développement
// Copyright (C) 2011, 2013 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// Copyright (C) 2003, 2004, 2006 Laboratoire d'Informatique de Paris
// 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
......@@ -31,7 +31,7 @@ namespace spot
{
/// \ingroup tgba_representation
/// \brief A concrete spot::tgba implemented using BDDs.
class tgba_bdd_concrete: public tgba
class SPOT_API tgba_bdd_concrete: public tgba
{
public:
/// \brief Construct a tgba_bdd_concrete with unknown initial state.
......
// Copyright (C) 2008 Laboratoire de Recherche et Développement
// -*- coding: utf-8 -*-
// Copyright (C) 2008, 2013 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// Copyright (C) 2003, 2005 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
......@@ -29,7 +30,7 @@
namespace spot
{
/// Helper class to build a spot::tgba_bdd_concrete object.
class tgba_bdd_concrete_factory: public tgba_bdd_factory
class SPOT_API tgba_bdd_concrete_factory: public tgba_bdd_factory
{
public:
tgba_bdd_concrete_factory(bdd_dict* dict);
......
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
// Copyright (C) 2003, 2004, 2013 Laboratoire d'Informatique de Paris 6 (LIP6),
// dpartement Systmes Rpartis Coopratifs (SRC), Universit Pierre
// et Marie Curie.
//
......@@ -29,7 +29,7 @@ namespace spot
///
/// This function builds the resulting product as another
/// spot::tgba_bdd_concrete automaton.
tgba_bdd_concrete*
SPOT_API tgba_bdd_concrete*
product(const tgba_bdd_concrete* left, const tgba_bdd_concrete* right);
}
......
// Copyright (C) 2009, 2011, 2012 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// -*- coding: utf-8 -*-
// Copyright (C) 2009, 2011, 2012, 2013 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// Copyright (C) 2003, 2005 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
......@@ -28,7 +29,7 @@
namespace spot
{
/// Core data for a TGBA encoded using BDDs.
struct tgba_bdd_core_data
struct SPOT_API tgba_bdd_core_data
{
/// \brief encodes the transition relation of the TGBA.
///
......@@ -42,7 +43,7 @@ namespace spot
/// \brief encodes the acceptance conditions
///
/// <tt>a U b</tt>, or <tt>F b</tt>, both imply that \c b should
/// be verified eventually. We encode this with generalized Büchi
/// be verified eventually. We encode this with generalized Büchi
/// acceptating conditions. An acceptance set, called
/// <tt>Acc[b]</tt>, hold all the state that do not promise to
/// verify \c b eventually. (I.e., all the states that contain \c
......
// -*- coding: utf-8 -*-
// Copyright (C) 2013 Laboratoire de Recherche et Developpement de
// l'Epita (LRDE).
// Copyright (C) 2003, 2005 Laboratoire d'Informatique de Paris 6 (LIP6),
// dpartement Systmes Rpartis Coopratifs (SRC), Universit Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
......@@ -28,7 +31,7 @@ namespace spot
///
/// A spot::tgba_bdd_concrete can be constructed from anything that
/// supplies core data and their associated dictionary.
class tgba_bdd_factory
class SPOT_API tgba_bdd_factory
{
public:
virtual ~tgba_bdd_factory() {}
......
......@@ -38,7 +38,7 @@ namespace spot
{
// How to destroy the label of a state.
template<typename T>
struct destroy_key
struct SPOT_API destroy_key
{
void destroy(T t)
{
......@@ -47,7 +47,7 @@ namespace spot
};
template<>
struct destroy_key<const ltl::formula*>
struct SPOT_API destroy_key<const ltl::formula*>
{
void destroy(const ltl::formula* t)
{
......@@ -58,7 +58,7 @@ namespace spot
/// States used by spot::explicit_graph implementation
/// \ingroup tgba_representation
template<typename Label, typename label_hash>
class state_explicit: public spot::state
class SPOT_API state_explicit: public spot::state
{
public:
state_explicit()
......@@ -133,7 +133,7 @@ namespace spot
/// States labeled by an int
/// \ingroup tgba_representation
class state_explicit_number:
class SPOT_API state_explicit_number:
public state_explicit<int, identity_hash<int> >
{
public:
......@@ -152,7 +152,7 @@ namespace spot
/// States labeled by a string
/// \ingroup tgba_representation
class state_explicit_string:
class SPOT_API state_explicit_string:
public state_explicit<std::string, string_hash>
{
public:
......@@ -171,7 +171,7 @@ namespace spot
/// States labeled by a formula
/// \ingroup tgba_representation
class state_explicit_formula:
class SPOT_API state_explicit_formula:
public state_explicit<const ltl::formula*, ltl::formula_ptr_hash>
{
public:
......@@ -191,7 +191,8 @@ namespace spot
/// Successor iterators used by spot::tgba_explicit.
/// \ingroup tgba_representation
template<typename State>
class tgba_explicit_succ_iterator: public tgba_succ_iterator
class SPOT_API tgba_explicit_succ_iterator:
public tgba_succ_iterator
{
public:
tgba_explicit_succ_iterator(const State* start,
......@@ -251,7 +252,7 @@ namespace spot
/// Graph implementation for explicit automaton
/// \ingroup tgba_representation
template<typename State, typename Type>
class explicit_graph: public Type
class SPOT_API explicit_graph: public Type
{
public:
typedef typename State::label_t label_t;
......@@ -694,7 +695,8 @@ namespace spot
};
template <typename State>
class tgba_explicit: public explicit_graph<State, tgba>
class SPOT_API tgba_explicit:
public explicit_graph<State, tgba>
{
public:
tgba_explicit(bdd_dict* dict): explicit_graph<State, tgba>(dict)
......@@ -712,7 +714,8 @@ namespace spot
};
template <typename State>
class sba_explicit: public explicit_graph<State, sba>
class SPOT_API sba_explicit:
public explicit_graph<State, sba>
{
public:
sba_explicit(bdd_dict* dict): explicit_graph<State, sba>(dict)
......@@ -752,7 +755,7 @@ namespace spot
/// Configuration of graph automata
/// \ingroup tgba_representation
template<class graph, typename Type>
class explicit_conf: public graph
class SPOT_API explicit_conf: public graph
{
public:
explicit_conf(bdd_dict* d): graph(d)
......@@ -769,7 +772,7 @@ namespace spot
};
template<class graph>
class explicit_conf<graph, state_explicit_string>: public graph
class SPOT_API explicit_conf<graph, state_explicit_string>: public graph
{
public:
explicit_conf(bdd_dict* d): graph(d)
......@@ -784,7 +787,7 @@ namespace spot
};
template<class graph>
class explicit_conf<graph, state_explicit_formula>: public graph
class SPOT_API explicit_conf<graph, state_explicit_formula>: public graph
{
public:
explicit_conf(bdd_dict* d): graph(d)
......
// -*- coding: utf-8 -*-
// Copyright (C) 2009, 2010, 2012 Laboratoire de Recherche et
// Copyright (C) 2009, 2010, 2012, 2013 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
//
// This file is part of Spot, a model checking library.
......@@ -27,7 +27,7 @@
namespace spot
{
class bdd_ordered
class SPOT_API bdd_ordered
{
public:
bdd_ordered()
......@@ -83,7 +83,7 @@ namespace spot
/// The construction is done on-the-fly, by the
/// \c tgba_kv_complement_succ_iterator class.
/// \see tgba_kv_complement_succ_iterator
class tgba_kv_complement : public tgba
class SPOT_API tgba_kv_complement : public tgba
{
public:
tgba_kv_complement(const tgba* a);
......
// Copyright (C) 2011 Laboratoire de Recherche et Développement
// -*- coding: utf-8 -*-
// Copyright (C) 2011, 2013 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// Copyright (C) 2003, 2004, 2006 Laboratoire d'Informatique de Paris
// 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
// Université Pierre et Marie Curie.
// 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.
//
......@@ -33,7 +34,7 @@ namespace spot
///
/// This state is in fact a pair of state: the state from the left
/// automaton and that of the right.
class state_product : public state
class SPOT_API state_product : public state
{
public:
/// \brief Constructor
......@@ -77,7 +78,7 @@ namespace spot
/// \brief A lazy product. (States are computed on the fly.)
class tgba_product: public tgba
class SPOT_API tgba_product: public tgba
{
public: