mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-03-14 11:10:01 +01:00
refactor: check eq in f_eq
This commit is contained in:
parent
9141a4db4b
commit
a63bbb47fd
@ -1,13 +1,26 @@
|
||||
use <_hashmap_put_impl.scad>;
|
||||
|
||||
_find_eq_search = function(lt, target, eq)
|
||||
let(found = search([target], lt)[0])
|
||||
found == [] ? -1 : found;
|
||||
|
||||
_find_eq_some = function(lt, target, eq)
|
||||
let(
|
||||
leng = len(lt),
|
||||
indices = [for(i = 0; i < leng && !eq(lt[i], target); i = i + 1) undef],
|
||||
leng_indices = len(indices)
|
||||
)
|
||||
leng_indices == leng ? -1 : leng_indices;
|
||||
|
||||
function _hashmap(kv_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 = _hashmap_put(buckets, b_numbers, kv_lt[i][0], kv_lt[i][1], eq, hash), is_continue = i < end;
|
||||
for(i = 0, n_buckets = _hashmap_put_by(buckets, b_numbers, kv_lt[i][0], kv_lt[i][1], eq, hash, f_eq), is_continue = i < end;
|
||||
is_continue;
|
||||
i = i + 1, is_continue = i < end, n_buckets = is_continue ? _hashmap_put(n_buckets, b_numbers, kv_lt[i][0], kv_lt[i][1], eq, hash) : undef)
|
||||
i = i + 1, is_continue = i < end, n_buckets = is_continue ? _hashmap_put_by(n_buckets, b_numbers, kv_lt[i][0], kv_lt[i][1], eq, hash, f_eq) : undef)
|
||||
n_buckets
|
||||
]
|
||||
)
|
||||
_hashmap_put(n_buckets_lt[end - 1], b_numbers, kv_lt[end][0], kv_lt[end][1], eq, hash);
|
||||
_hashmap_put_by(n_buckets_lt[end - 1], b_numbers, kv_lt[end][0], kv_lt[end][1], eq, hash, f_eq);
|
@ -9,6 +9,15 @@ function _hashmap_put(buckets, b_numbers, key, value, eq, hash) =
|
||||
k_idx != -1 ? _replace(buckets, b_numbers, bucket, key, value, b_idx, k_idx) :
|
||||
_put(buckets, b_numbers, bucket, key, value, b_idx);
|
||||
|
||||
function _hashmap_put_by(buckets, b_numbers, key, value, eq, hash, f_eq) =
|
||||
let(
|
||||
b_idx = hash(key) % b_numbers,
|
||||
bucket = buckets[b_idx],
|
||||
k_idx = f_eq(bucket, key, eq)
|
||||
)
|
||||
k_idx != -1 ? _replace(buckets, b_numbers, bucket, key, value, b_idx, k_idx) :
|
||||
_put(buckets, b_numbers, bucket, key, value, b_idx);
|
||||
|
||||
function _replace(buckets, b_numbers, bucket, key, value, b_idx, k_idx) =
|
||||
let(leng_bucket = len(bucket))
|
||||
[
|
||||
|
Loading…
x
Reference in New Issue
Block a user