mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-19 13:01:37 +02:00
don't cal len repeatly
This commit is contained in:
@@ -1,12 +1,11 @@
|
||||
use <../../some.scad>;
|
||||
|
||||
function _hashset_add(set, elem, eq, hash) =
|
||||
function _hashset_add(buckets, b_numbers, elem, eq, hash) =
|
||||
let(
|
||||
idx = hash(elem) % len(set),
|
||||
bucket = set[idx]
|
||||
idx = hash(elem) % b_numbers,
|
||||
bucket = buckets[idx]
|
||||
)
|
||||
some(bucket, function(e) eq(e, elem)) ? set : _add(set, bucket, elem, idx);
|
||||
some(bucket, function(e) eq(e, elem)) ? buckets : _add(buckets, b_numbers, bucket, elem, idx);
|
||||
|
||||
function _add(set, bucket, elem, idx) =
|
||||
let(leng = len(set))
|
||||
[for(i = 0; i < leng; i = i + 1) i == idx ? concat(bucket, [elem]) : set[i]];
|
||||
function _add(buckets, b_numbers, bucket, elem, idx) =
|
||||
[for(i = 0; i < b_numbers; i = i + 1) i == idx ? concat(bucket, [elem]) : buckets[i]];
|
@@ -1,5 +1,6 @@
|
||||
use <_hashset_add_impl.scad>;
|
||||
|
||||
function _hashset(lt, leng, buckets, eq, hash, i = 0) =
|
||||
function _hashset(lt, leng, buckets, b_numbers, eq, hash, i = 0) =
|
||||
i == leng ? buckets :
|
||||
_hashset(lt, leng, _hashset_add(buckets, lt[i], eq, hash), eq, hash, i + 1);
|
||||
let(n_buckets = _hashset_add(buckets, b_numbers, lt[i], eq, hash))
|
||||
_hashset(lt, leng, n_buckets, b_numbers, eq, hash, i + 1);
|
@@ -21,4 +21,4 @@ function hashset(lt, eq = function(e1, e2) e1 == e2, hash = function(e) _str_has
|
||||
(lt_undef || leng_lt < 256 ? 16 : ceil(sqrt(leng_lt))) : number_of_buckets,
|
||||
buckets = [for(i = [0:b_numbers - 1]) []]
|
||||
)
|
||||
lt_undef ? buckets : _hashset(lt, leng_lt, buckets, eq, hash);
|
||||
lt_undef ? buckets : _hashset(lt, leng_lt, buckets, b_numbers, eq, hash);
|
@@ -12,4 +12,4 @@ use <../../__comm__/_str_hash.scad>;
|
||||
use <_impl/_hashset_add_impl.scad>;
|
||||
|
||||
function hashset_add(set, elem, eq = function(e1, e2) e1 == e2, hash = function(e) _str_hash(e)) =
|
||||
_hashset_add(set, elem, eq, hash);
|
||||
_hashset_add(set, len(set), elem, eq, hash);
|
Reference in New Issue
Block a user