From d973c1dad0424b9e6297a68d5ad9d5129a8b9611 Mon Sep 17 00:00:00 2001 From: Alexandre Duret-Lutz Date: Tue, 25 May 2004 23:08:19 +0000 Subject: [PATCH] * src/ltlvisit/formlength.cc: Rename as ... * src/ltlvisit/length.cc: ... this. * src/ltlvisit/length.hh: New file, extracted from ... * src/ltlvisit/reducform.hh: ... here. * src/ltlvisit/Makefile.am (ltlvisit_HEADERS): Add length.hh. (libltlvisit_la_SOURCES): Rename formlength.cc as length.cc. * src/ltltest/reduc.cc: Include length.hh. --- src/ltlvisit/length.cc | 96 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 src/ltlvisit/length.cc diff --git a/src/ltlvisit/length.cc b/src/ltlvisit/length.cc new file mode 100644 index 000000000..882431889 --- /dev/null +++ b/src/ltlvisit/length.cc @@ -0,0 +1,96 @@ +// 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 "length.hh" +#include "ltlast/allnodes.hh" +#include "ltlast/visitor.hh" + +namespace spot +{ + namespace ltl + { + + class length_visitor : public const_visitor + { + public: + + length_visitor() + { + result_ = 0; + } + + virtual + ~length_visitor() + { + } + + int + result() const + { + return result_; + } + + void + visit(const atomic_prop*) + { + result_ = 1; + } + + void + visit(const constant*) + { + result_ = 1; + } + + void + visit(const unop* uo) + { + result_ = 1 + length(uo->child()); + } + + void + visit(const binop* bo) + { + result_ = 1 + length(bo->first()) + length(bo->second()); + } + + void + visit(const multop* mo) + { + unsigned mos = mo->size(); + for (unsigned i = 0; i < mos; ++i) + result_ += length(mo->nth(i)); + } + + protected: + int result_; // size of the formula + }; + + int + length(const formula* f) + { + length_visitor v; + const_cast(f)->accept(v); + return v.result(); + } + + } +}