From 814ec7c2d0e3a398cf4ad1c8fdd4efb635eb6dee Mon Sep 17 00:00:00 2001 From: Alexandre Duret-Lutz Date: Wed, 4 May 2005 16:09:41 +0000 Subject: [PATCH] * src/misc/hashfunc.hh (knuth32_hash): New function. * src/misc/hash.hh (ptr_hash): Use knuth32_hash. * src/tgba/tgbabddconcretefactory.hh (tgba_bdd_concrete_factory): Use ltl::formula_ptr_hash for acc_map_. --- ChangeLog | 5 +++++ src/misc/hash.hh | 6 ++++-- src/misc/hashfunc.hh | 16 +++++++++++++++- src/tgba/tgbabddconcretefactory.hh | 4 ++-- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index cd715ad9e..0a8ec523b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2005-05-04 Alexandre Duret-Lutz + * src/misc/hashfunc.hh (knuth32_hash): New function. + * src/misc/hash.hh (ptr_hash): Use knuth32_hash. + * src/tgba/tgbabddconcretefactory.hh (tgba_bdd_concrete_factory): Use + ltl::formula_ptr_hash for acc_map_. + * src/tgbaalgos/ltl2tgba_fm.hh, src/tgbaalgos/ltl2tgba_fm.cc: Add the reduce_ltl argument. * src/tgbatest/ltl2tgba.cc: Add options -fr1, -fr2, -fr3, and -fr4. diff --git a/src/misc/hash.hh b/src/misc/hash.hh index bacd4cf7b..e1562ec1b 100644 --- a/src/misc/hash.hh +++ b/src/misc/hash.hh @@ -1,4 +1,4 @@ -// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6), +// Copyright (C) 2003, 2004, 2005 Laboratoire d'Informatique de Paris 6 (LIP6), // département Systèmes Répartis Coopératifs (SRC), Université Pierre // et Marie Curie. // @@ -24,6 +24,7 @@ # include # include +# include "hashfunc.hh" // See the G++ FAQ for details about the following. # ifdef __GNUC__ @@ -62,7 +63,8 @@ namespace spot { size_t operator()(const T* p) const { - return reinterpret_cast(p) - static_cast(0); + return knuth32_hash(reinterpret_cast(p) + - static_cast(0)); } }; diff --git a/src/misc/hashfunc.hh b/src/misc/hashfunc.hh index 609e5b0b6..975de704d 100644 --- a/src/misc/hashfunc.hh +++ b/src/misc/hashfunc.hh @@ -1,4 +1,4 @@ -// Copyright (C) 2004 Laboratoire d'Informatique de Paris 6 (LIP6), +// Copyright (C) 2004, 2005 Laboratoire d'Informatique de Paris 6 (LIP6), // département Systèmes Répartis Coopératifs (SRC), Université Pierre // et Marie Curie. // @@ -45,6 +45,20 @@ namespace spot key ^= (key >> 16); return key; } + + /// \brief Knuth's Multiplicative hash function. + /// + /// This function is suitable for hashing values whose + /// high order bits do not vary much (ex. addresses of + /// memory objects). Prefer spot::wang32_hash() otherwise. + /// http://www.concentric.net/~Ttwang/tech/addrhash.htm + inline size_t + knuth32_hash(size_t key) + { + // 2654435761 is the golden ratio of 2^32. The right shift of 3 + // bits assumes that all objects are aligned on a 8 byte boundary. + return (key >> 3) * 2654435761U; + } /// @} } diff --git a/src/tgba/tgbabddconcretefactory.hh b/src/tgba/tgbabddconcretefactory.hh index cc987aa1f..969102725 100644 --- a/src/tgba/tgbabddconcretefactory.hh +++ b/src/tgba/tgbabddconcretefactory.hh @@ -1,4 +1,4 @@ -// Copyright (C) 2003 Laboratoire d'Informatique de Paris 6 (LIP6), +// Copyright (C) 2003, 2005 Laboratoire d'Informatique de Paris 6 (LIP6), // département Systèmes Répartis Coopératifs (SRC), Université Pierre // et Marie Curie. // @@ -86,7 +86,7 @@ namespace spot tgba_bdd_core_data data_; ///< Core data for the new automata. typedef Sgi::hash_map > acc_map_; + ltl::formula_ptr_hash> acc_map_; acc_map_ acc_; ///< BDD associated to each acceptance condition };