mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-13 18:24:28 +02:00
refactor: check eq in f_eq
This commit is contained in:
@@ -1,13 +1,26 @@
|
|||||||
use <_hashmap_put_impl.scad>;
|
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) =
|
function _hashmap(kv_lt, leng, buckets, b_numbers, eq, hash) =
|
||||||
let(
|
let(
|
||||||
end = leng - 1,
|
end = leng - 1,
|
||||||
|
f_eq = is_undef(eq) ? _find_eq_search : _find_eq_some,
|
||||||
n_buckets_lt = [
|
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;
|
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
|
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) :
|
k_idx != -1 ? _replace(buckets, b_numbers, bucket, key, value, b_idx, k_idx) :
|
||||||
_put(buckets, b_numbers, bucket, key, value, b_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) =
|
function _replace(buckets, b_numbers, bucket, key, value, b_idx, k_idx) =
|
||||||
let(leng_bucket = len(bucket))
|
let(leng_bucket = len(bucket))
|
||||||
[
|
[
|
||||||
|
Reference in New Issue
Block a user