stats.cc 1.65 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 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 "tgba/tgba.hh"
#include "stats.hh"
#include "reachiter.hh"

namespace spot
{
28
  namespace
29
  {
30
    class stats_bfs: public tgba_reachable_iterator_breadth_first
31
    {
32
33
34
35
36
    public:
      stats_bfs(const tgba* a, tgba_statistics& s)
	: tgba_reachable_iterator_breadth_first(a), s_(s)
      {
      }
37

38
39
40
41
42
      void
      process_state(const state*, int, tgba_succ_iterator*)
      {
	++s_.states;
      }
43

44
      void
45
46
      process_link(const state*, int, const state*, int,
		   const tgba_succ_iterator*)
47
48
49
      {
	++s_.transitions;
      }
50

51
52
53
54
    private:
      tgba_statistics& s_;
    };
  } // anonymous
55
56
57
58
59
60
61
62
63
64

  tgba_statistics
  stats_reachable(const tgba* g)
  {
    tgba_statistics s = {0, 0};
    stats_bfs d(g, s);
    d.run();
    return s;
  }
}