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:
@@ -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]];
|
@@ -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);
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user