[libgee/coalesed-hash: 2/6] Fixes



commit 058d59fffb177f856ce16473728dfd2c47d20911
Author: Maciej Piechotka <uzytkownik2 gmail com>
Date:   Wed Jan 2 14:04:32 2013 +0100

    Fixes

 gee/hash.vala    |    6 +++---
 gee/hashset.vala |    5 ++++-
 2 files changed, 7 insertions(+), 4 deletions(-)
---
diff --git a/gee/hash.vala b/gee/hash.vala
index a2423d8..48e2784 100644
--- a/gee/hash.vala
+++ b/gee/hash.vala
@@ -484,7 +484,7 @@ class Gee.Hash {
                }
        }
 
-       private static inline uint _folded_hash (uint hash, uint size) {
+       private static inline uint _folded_hash (uint hash, int size) {
                return hash;
        }
 
@@ -829,8 +829,8 @@ class Gee.Hash {
                REPLACE
        }
 
-       private static const int ARRAY_THRESHOLD = 9;
-       private static const double ALPHA = 0.9;
+       internal static const int ARRAY_THRESHOLD = 9;
+       private static const double ALPHA = 0.7;
        private static const double BETA = 0.86;
        private static const uint LINK_END = 0x7fffffff; //uint.MAX >> 1;
 }
diff --git a/gee/hashset.vala b/gee/hashset.vala
index 5ce8e01..1498823 100644
--- a/gee/hashset.vala
+++ b/gee/hashset.vala
@@ -216,7 +216,10 @@ public class Gee.HashSet<G> : AbstractSet<G> {
                        assert (valid);
                        uint first = 0, last = 0;
                        unowned G element = Hash.get_key<G> (Hash.Flags.CACHE_HASH, _set._data, 
_set._dummy_size, _index);
-                       _index = Hash.get_next (Hash.Flags.CACHE_HASH, _set._data, _set._dummy_size, 
_set._real_size, _index);
+                       if (_set._dummy_size >= Hash.ARRAY_THRESHOLD)
+                               _index = Hash.get_next (Hash.Flags.CACHE_HASH, _set._data, _set._dummy_size, 
_set._real_size, _index);
+                       else if (_index == _set._real_size - 1)
+                               _index = -1;
                        bool res = Hash.delete<G, void *> (Hash.Flags.CACHE_HASH, ref _set._data, ref 
_set._dummy_size, ref _set._real_size, element, null, _set.hash_func, _set.equal_func, ref first, ref last, 
ref _set._cellar_free, ref _set._address_free, false);
                        assert (res);
                        _set._stamp = ++_stamp;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]