diff --git a/src/util/map/hashmap_get.scad b/src/util/map/hashmap_get.scad index 3b6d4549..b3b8f351 100644 --- a/src/util/map/hashmap_get.scad +++ b/src/util/map/hashmap_get.scad @@ -9,12 +9,13 @@ **/ use <../../__comm__/_str_hash.scad>; -use <../_impl/_find_eq.scad>; +use <../_impl/_find_eq.scad>; function hashmap_get(map, key, eq = undef, hash = function(e) _str_hash(e)) = let( bidx = hash(key) % len(map), bucket = map[bidx] ) + bucket == [] ? undef : let(i = _find_eq(bucket, key, eq)) i == -1 ? undef : bucket[i][1]; \ No newline at end of file diff --git a/src/util/set/_impl/_hashset_add_impl.scad b/src/util/set/_impl/_hashset_add_impl.scad index 96e5e123..9e342261 100644 --- a/src/util/set/_impl/_hashset_add_impl.scad +++ b/src/util/set/_impl/_hashset_add_impl.scad @@ -1,18 +1,18 @@ use <../../_impl/_find_eq.scad>; - + function _hashset_add(buckets, b_numbers, elem, eq, hash) = let( idx = hash(elem) % b_numbers, bucket = buckets[idx] - ) - _find_eq(bucket, elem, eq) != -1 ? buckets : _add(buckets, b_numbers, bucket, elem, idx); + ) + bucket != [] && _find_eq(bucket, elem, eq) != -1 ? buckets : _add(buckets, b_numbers, bucket, elem, idx); function _hashset_add_by(buckets, b_numbers, elem, eq, hash, f_eq) = let( idx = hash(elem) % b_numbers, bucket = buckets[idx] ) - f_eq(bucket, elem, eq) != -1 ? buckets : _add(buckets, b_numbers, bucket, elem, idx); + bucket != [] && f_eq(bucket, elem, eq) != -1 ? buckets : _add(buckets, b_numbers, bucket, elem, idx); function _add(buckets, b_numbers, bucket, elem, idx) = [for(i = 0; i < b_numbers; i = i + 1) i == idx ? [each bucket, elem] : buckets[i]]; \ No newline at end of file diff --git a/src/util/set/hashset_has.scad b/src/util/set/hashset_has.scad index 862dde1c..84ddaefd 100644 --- a/src/util/set/hashset_has.scad +++ b/src/util/set/hashset_has.scad @@ -12,4 +12,5 @@ use <../../__comm__/_str_hash.scad>; use <../_impl/_find_eq.scad>; function hashset_has(set, elem, eq = undef, hash = function(e) _str_hash(e)) = - _find_eq(set[hash(elem) % len(set)], elem, eq) != -1; \ No newline at end of file + let(bucket = set[hash(elem) % len(set)]) + bucket != [] && _find_eq(bucket, elem, eq) != -1; \ No newline at end of file