spot/src/tgbaalgos/tarjan_on_fly.hh
Alexandre Duret-Lutz e8e2bec243 The computation of the counter example fails the valgrind tests
and is wrong into two ways: the search stack is generally not a
path, and does not run until the end of the STL container.
Remove it.
* src/tgbaalgos/tarjan_on_fly.cc, src/tgbaalgos/tarjan_on_fly.hh
(tarjan_on_fly): Do not inherit from the emptiness_search class,
because the check method will no longer return a counter example.
(tarjan_on_fly::check): Return only a boolean.
(tarjan_on_fly::build_counter): Delete.
* src/tgbatest/ltl2tgba.cc: Adjust.
2004-10-13 17:39:27 +00:00

83 lines
2.1 KiB
C++

// 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_TGBAALGOS_TARJAN_ON_FLY_HH
# define SPOT_TGBAALGOS_TARJAN_ON_FLY_HH
#include "misc/hash.hh"
#include <list>
#include <utility>
#include <ostream>
#include "tgba/tgbatba.hh"
namespace spot
{
class tarjan_on_fly
{
public:
tarjan_on_fly(const tgba_tba_proxy *a);
virtual ~tarjan_on_fly();
/// \brief Return true if there exits an accepting path.
bool check();
/// \brief Print Stat.
std::ostream& print_stat(std::ostream& os) const;
private:
struct struct_state
{
const state* s;
tgba_succ_iterator* lasttr;
int lowlink;
int pre;
int acc;
};
//typedef std::pair<int, tgba_succ_iterator*> state_iter_pair;
typedef Sgi::hash_map<const state*, int,
state_ptr_hash, state_ptr_equal> hash_type;
hash_type h; ///< Map of visited states.
typedef std::vector<struct_state> stack_type;
stack_type stack; ///< Stack of visited states on the path.
const tgba_tba_proxy* a; ///< The automata to check.
int top;
int dftop;
bool violation;
const state* x;
void push(const state* s);
void pop();
void lowlinkupdate(int f, int t);
int in_stack(const state* s) const;
};
}
#endif // SPOT_TGBAALGOS_MINIMALCE_HH