spot  1.2.6
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
hashfunc.hh
1 // Copyright (C) 2004, 2005 Laboratoire d'Informatique de Paris 6 (LIP6),
2 // département Systèmes Répartis Coopératifs (SRC), Université Pierre
3 // et Marie Curie.
4 //
5 // This file is part of Spot, a model checking library.
6 //
7 // Spot is free software; you can redistribute it and/or modify it
8 // under the terms of the GNU General Public License as published by
9 // the Free Software Foundation; either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // Spot is distributed in the hope that it will be useful, but WITHOUT
13 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15 // License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program. If not, see <http://www.gnu.org/licenses/>.
19 
20 #ifndef SPOT_MISC_HASHFUNC_HH
21 # define SPOT_MISC_HASHFUNC_HH
22 # include <cstddef>
23 
24 namespace spot
25 {
29 
34  inline size_t
35  wang32_hash(size_t key)
36  {
37  // We assume that size_t has at least 32bits.
38  key += ~(key << 15);
39  key ^= (key >> 10);
40  key += (key << 3);
41  key ^= (key >> 6);
42  key += ~(key << 11);
43  key ^= (key >> 16);
44  return key;
45  }
46 
53  inline size_t
54  knuth32_hash(size_t key)
55  {
56  // 2654435761 is the golden ratio of 2^32. The right shift of 3
57  // bits assumes that all objects are aligned on a 8 byte boundary.
58  return (key >> 3) * 2654435761U;
59  }
61 }
62 
63 #endif // SPOT_MISC_HASHFUNC_HH

Please direct any question, comment, or bug report to the Spot mailing list at spot@lrde.epita.fr.
Generated on Sat Dec 6 2014 12:28:43 for spot by doxygen 1.8.4