1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-01 04:20:27 +02:00

refactor: check eq in _hashset

This commit is contained in:
Justin Lin
2022-04-11 11:11:02 +08:00
parent 233ae4b50a
commit 71f2156d3e
2 changed files with 13 additions and 3 deletions

View File

@@ -7,5 +7,12 @@ function _hashset_add(buckets, b_numbers, elem, eq, hash) =
)
_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);
function _add(buckets, b_numbers, bucket, elem, idx) =
[for(i = 0; i < b_numbers; i = i + 1) i == idx ? [each bucket, elem] : buckets[i]];

View File

@@ -1,15 +1,18 @@
use <_hashset_add_impl.scad>;
include <../../_impl/_find_eq_search_some.scad>;
function _hashset(lt, leng, buckets, b_numbers, eq, hash) =
let(
end = leng - 1,
f_eq = is_undef(eq) ? _find_eq_search : _find_eq_some,
n_buckets_lt = [
for(i = 0, n_buckets = _hashset_add(buckets, b_numbers, lt[i], eq, hash), is_continue = i < end;
for(i = 0, n_buckets = _hashset_add_by(buckets, b_numbers, lt[i], eq, hash, f_eq), is_continue = i < end;
is_continue;
i = i + 1, is_continue = i < end, n_buckets = is_continue ? _hashset_add(n_buckets, b_numbers, lt[i], eq, hash) : undef)
i = i + 1, is_continue = i < end, n_buckets = is_continue ? _hashset_add_by(n_buckets, b_numbers, lt[i], eq, hash, f_eq) : undef)
n_buckets
]
)
_hashset_add(n_buckets_lt[end - 1], b_numbers, lt[end], eq, hash);
_hashset_add_by(n_buckets_lt[end - 1], b_numbers, lt[end], eq, hash, f_eq);