diff --git a/ChangeLog b/ChangeLog index 1ea5c3265..9b90b64aa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2004-08-09 Alexandre Duret-Lutz + * src/ltlvisit/apcollect.cc, src/ltlvisit/apcollect.hh: New files, + based on code from . + * src/ltlvisit/Makefile.am (libltlvisit_la_SOURCES, ltlvisit_HEADERS): + Add them. + * iface/gspn/common.cc, iface/gspn/common.hh, src/ltlast/atomic_prop.cc, src/ltlast/atomic_prop.hh, src/ltlparse/fmterror.cc, src/ltlparse/public.hh, diff --git a/src/ltlvisit/Makefile.am b/src/ltlvisit/Makefile.am index 71e0b160e..121fd9c95 100644 --- a/src/ltlvisit/Makefile.am +++ b/src/ltlvisit/Makefile.am @@ -25,6 +25,7 @@ AM_CXXFLAGS = $(WARNING_CXXFLAGS) ltlvisitdir = $(pkgincludedir)/ltlvisit ltlvisit_HEADERS = \ + apcollect.hh \ basicreduce.hh \ clone.hh \ destroy.hh \ @@ -42,6 +43,7 @@ ltlvisit_HEADERS = \ noinst_LTLIBRARIES = libltlvisit.la libltlvisit_la_SOURCES = \ + apcollect.cc \ basicreduce.cc \ clone.cc \ destroy.cc \ diff --git a/src/ltlvisit/apcollect.cc b/src/ltlvisit/apcollect.cc new file mode 100644 index 000000000..e41532682 --- /dev/null +++ b/src/ltlvisit/apcollect.cc @@ -0,0 +1,64 @@ +// Copyright (C) 2004 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. +// +// Spot is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// Spot is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +// License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Spot; see the file COPYING. If not, write to the Free +// Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. + +#include "apcollect.hh" + +namespace spot +{ + namespace ltl + { + namespace + { + class atomic_prop_collector : public spot::ltl::postfix_visitor + { + public: + atomic_prop_collector(atomic_prop_set* s) + : postfix_visitor(), sap(s) + { + } + + virtual ~atomic_prop_collector() + { + } + + virtual void doit(spot::ltl::atomic_prop* ap) + { + sap->insert(ap); + } + + private: + atomic_prop_set* sap; + }; + } + + atomic_prop_set* + atomic_prop_collect(const formula* f, atomic_prop_set* s) + { + if (!s) + s = new atomic_prop_set; + atomic_prop_collector v(s); + const_cast(f)->accept(v); + return s; + } + + } + +} diff --git a/src/ltlvisit/apcollect.hh b/src/ltlvisit/apcollect.hh new file mode 100644 index 000000000..e2e651ebd --- /dev/null +++ b/src/ltlvisit/apcollect.hh @@ -0,0 +1,47 @@ +// Copyright (C) 2004 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. +// +// Spot is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// Spot is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +// License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Spot; see the file COPYING. If not, write to the Free +// Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. + +#ifndef SPOT_LTLVISIT_APCOLLECT_HH +# define SPOT_LTLVISIT_AP_COLLECT_HH + +#include +#include "ltlvisit/postfix.hh" + +namespace spot +{ + namespace ltl + { + /// Set of atomic propositions. + typedef std::set atomic_prop_set; + + /// \brief Return the set of atomic propositions occurring in a formula. + /// + /// \param f the formula to inspect + /// \param s an existing set to fill with atomic_propositions discovered, + /// or 0 if the set should be allocated by the function. + /// \return A pointer to the supplied set, \c s, augmented with + /// atomic propositions occurring in \c f; or a newly allocated + /// set containing all these atomic propositions if \c s is 0. + atomic_prop_set* + atomic_prop_collect(const formula* f, atomic_prop_set* s = 0); + } +} +#endif