spot  2.4.3
bddlt.hh
1 // -*- coding: utf-8 -*-
2 // Copyright (C) 2011, 2014, 2017 Laboratoire de Recherche et
3 // Developpement de l'Epita (LRDE).
4 // Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
5 // département Systèmes Répartis Coopératifs (SRC), Université Pierre
6 // et Marie Curie.
7 //
8 // This file is part of Spot, a model checking library.
9 //
10 // Spot is free software; you can redistribute it and/or modify it
11 // under the terms of the GNU General Public License as published by
12 // the Free Software Foundation; either version 3 of the License, or
13 // (at your option) any later version.
14 //
15 // Spot is distributed in the hope that it will be useful, but WITHOUT
16 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17 // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
18 // License for more details.
19 //
20 // You should have received a copy of the GNU General Public License
21 // along with this program. If not, see <http://www.gnu.org/licenses/>.
22 
23 #pragma once
24 
25 #include <bddx.h>
26 #include <functional>
27 
28 namespace spot
29 {
36  struct bdd_less_than :
37  public std::binary_function<const bdd&, const bdd&, bool>
38  {
39  bool
40  operator()(const bdd& left, const bdd& right) const
41  {
42  return left.id() < right.id();
43  }
44  };
45 
54  public std::binary_function<const bdd&, const bdd&, bool>
55  {
56  bool
57  operator()(const bdd& left, const bdd& right) const
58  {
59  int li = left.id();
60  int ri = right.id();
61  if (li == ri)
62  return false;
63  if (li <= 1 || ri <= 1)
64  return li < ri;
65  {
66  int vl = bdd_var(left);
67  int vr = bdd_var(right);
68  if (vl != vr)
69  return vl < vr;
70  }
71  // We check the high side before low, this way
72  // !a&b comes before a&!b and a&b
73  {
74  bdd hl = bdd_high(left);
75  bdd hr = bdd_high(right);
76  if (hl != hr)
77  return operator()(hl, hr);
78  return operator()(bdd_low(left), bdd_low(right));
79  }
80  }
81  };
82 
85  struct bdd_hash :
86  public std::unary_function<const bdd&, size_t>
87  {
88  size_t
89  operator()(const bdd& b) const
90  {
91  return b.id();
92  }
93  };
94 }
Definition: automata.hh:26
Comparison functor for BDDs.
Definition: bddlt.hh:36
Hash functor for BDDs.
Definition: bddlt.hh:85
Comparison functor for BDDs.
Definition: bddlt.hh:53

Please direct any question, comment, or bug report to the Spot mailing list at spot@lrde.epita.fr.
Generated on Tue Dec 19 2017 09:22:58 for spot by doxygen 1.8.13