From 5f400c124d5b8267f88726d10c09cf4733916e65 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Fri, 11 Mar 2022 12:07:31 +0800 Subject: [PATCH] refactor --- src/util/_impl/_dedup_impl.scad | 15 ++++++++++++--- src/util/map/_impl/_hashmap_impl.scad | 14 +++++++++----- src/util/set/_impl/_hashset_impl.scad | 17 +++++++++++++---- 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/util/_impl/_dedup_impl.scad b/src/util/_impl/_dedup_impl.scad index 93ade9c4..3c2e62b5 100644 --- a/src/util/_impl/_dedup_impl.scad +++ b/src/util/_impl/_dedup_impl.scad @@ -1,8 +1,17 @@ use <../some.scad>; -function _dedup(elems, leng, buckets, eq, hash, bucket_numbers, i = 0) = - i == leng ? buckets : - _dedup(elems, leng, _dedup_add(buckets, [i, elems[i]], eq, hash, bucket_numbers), eq, hash, bucket_numbers, i + 1); +function _dedup(elems, leng, buckets, eq, hash, bucket_numbers) = + let( + end = leng - 1, + n_buckets_lt = [ + for(i = 0, n_buckets = _dedup_add(buckets, [i, elems[i]], eq, hash, bucket_numbers); + i < end; + i = i + 1, n_buckets = _dedup_add(n_buckets, [i, elems[i]], eq, hash, bucket_numbers)) + n_buckets + ] + ) + _dedup_add(n_buckets_lt[len(n_buckets_lt) - 1], [end, elems[end]], eq, hash, bucket_numbers); + function _dedup_add(buckets, i_elem, eq, hash, bucket_numbers) = let( diff --git a/src/util/map/_impl/_hashmap_impl.scad b/src/util/map/_impl/_hashmap_impl.scad index e607b9f5..f35854a7 100644 --- a/src/util/map/_impl/_hashmap_impl.scad +++ b/src/util/map/_impl/_hashmap_impl.scad @@ -1,9 +1,13 @@ use <_hashmap_put_impl.scad>; -function _hashmap(kv_lt, leng, buckets, b_numbers, eq, hash, i = 0) = - i == leng ? buckets : +function _hashmap(kv_lt, leng, buckets, b_numbers, eq, hash) = let( - kv_lt_i = kv_lt[i], - n_buckets = _hashmap_put(buckets, b_numbers, kv_lt_i[0], kv_lt_i[1], eq, hash) + end = leng - 1, + n_buckets_lt = [ + for(i = 0, n_buckets = _hashmap_put(buckets, b_numbers, kv_lt[i][0], kv_lt[i][1], eq, hash); + i < end; + i = i + 1, n_buckets = _hashmap_put(n_buckets, b_numbers, kv_lt[i][0], kv_lt[i][1], eq, hash)) + n_buckets + ] ) - _hashmap(kv_lt, leng, n_buckets, b_numbers, eq, hash, i + 1); \ No newline at end of file + _hashmap_put(n_buckets_lt[len(n_buckets_lt) - 1], b_numbers, kv_lt[end][0], kv_lt[end][1], eq, hash); \ No newline at end of file diff --git a/src/util/set/_impl/_hashset_impl.scad b/src/util/set/_impl/_hashset_impl.scad index 7e0e5786..c1dd357c 100644 --- a/src/util/set/_impl/_hashset_impl.scad +++ b/src/util/set/_impl/_hashset_impl.scad @@ -1,6 +1,15 @@ use <_hashset_add_impl.scad>; -function _hashset(lt, leng, buckets, b_numbers, eq, hash, i = 0) = - i == leng ? buckets : - let(n_buckets = _hashset_add(buckets, b_numbers, lt[i], eq, hash)) - _hashset(lt, leng, n_buckets, b_numbers, eq, hash, i + 1); \ No newline at end of file +function _hashset(lt, leng, buckets, b_numbers, eq, hash) = + let( + end = leng - 1, + n_buckets_lt = [ + for(i = 0, n_buckets = _hashset_add(buckets, b_numbers, lt[i], eq, hash); + i < end; + i = i + 1, n_buckets = _hashset_add(n_buckets, b_numbers, lt[i], eq, hash)) + n_buckets + ] + ) + _hashset_add(n_buckets_lt[len(n_buckets_lt) - 1], b_numbers, lt[end], eq, hash); + +