mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-03-14 02:59:42 +01:00
refactor: extract a _sort function
This commit is contained in:
parent
db0d381ceb
commit
4f09162c28
@ -1,26 +1,21 @@
|
||||
use <_vt_default_comparator.scad>;
|
||||
|
||||
function _vt_sort(lt) =
|
||||
function _sort(lt, less, gt_eq) =
|
||||
let(leng = len(lt))
|
||||
leng <= 1 ? lt :
|
||||
leng == 2 ? (greaterThan(lt[1], lt[0]) || lt[1] == lt[0] ? lt : [lt[1], lt[0]]) :
|
||||
leng == 2 ? gt_eq(lt[1], lt[0]) ? lt : [lt[1], lt[0]] :
|
||||
let(
|
||||
pivot = lt[0],
|
||||
before = [for(j = 1; j < leng; j = j + 1) if(lessThan(lt[j], pivot)) lt[j]],
|
||||
after = [for(j = 1; j < leng; j = j + 1) if(greaterThan(lt[j], pivot) || lt[j] == pivot) lt[j]]
|
||||
before = [for(j = 1; j < leng; j = j + 1) if(less(lt[j], pivot)) lt[j]],
|
||||
after = [for(j = 1; j < leng; j = j + 1) if(gt_eq(lt[j], pivot)) lt[j]]
|
||||
)
|
||||
[each _vt_sort(before), pivot, each _vt_sort(after)];
|
||||
[each _sort(before, less, gt_eq), pivot, each _sort(after, less, gt_eq)];
|
||||
|
||||
function _sort_by_idx(lt, i) =
|
||||
let(leng = len(lt))
|
||||
leng <= 1 ? lt :
|
||||
leng == 2 ? (lt[1][i] >= lt[0][i] ? lt : [lt[1], lt[0]]) :
|
||||
let(
|
||||
pivot = lt[0],
|
||||
before = [for(j = 1; j < leng; j = j + 1) if(lt[j][i] < pivot[i]) lt[j]],
|
||||
after = [for(j = 1; j < leng; j = j + 1) if(lt[j][i] >= pivot[i]) lt[j]]
|
||||
)
|
||||
[each _sort_by_idx(before, i), pivot, each _sort_by_idx(after, i)];
|
||||
function _vt_sort(lt) = _sort(lt, function(a, b) lessThan(a, b), function(a, b) greaterThan(a, b) || a == b);
|
||||
|
||||
function _sort_by_idx(lt, i) = _sort(lt, function(a, b) a[i] < b[i], function(a, b) a[i] >= b[i]);
|
||||
|
||||
function _sort_by_cmp(lt, cmp) = _sort(lt, function(a, b) cmp(a, b) < 0, function(a, b) cmp(a, b) >= 0);
|
||||
|
||||
function _sort_by(lt, by, idx) =
|
||||
let(
|
||||
@ -29,13 +24,4 @@ function _sort_by(lt, by, idx) =
|
||||
)
|
||||
_sort_by_idx(lt, i);
|
||||
|
||||
function _sort_by_cmp(lt, cmp) =
|
||||
let(leng = len(lt))
|
||||
leng <= 1 ? lt :
|
||||
leng == 2 ? (cmp(lt[1], lt[0]) >= 0 ? lt : [lt[1], lt[0]]) :
|
||||
let(
|
||||
pivot = lt[0],
|
||||
before = [for(j = 1; j < leng; j = j + 1) if(cmp(lt[j], pivot) < 0) lt[j]],
|
||||
after = [for(j = 1; j < leng; j = j + 1) if(cmp(lt[j], pivot) >= 0) lt[j]]
|
||||
)
|
||||
[each _sort_by_cmp(before, cmp), pivot, each _sort_by_cmp(after, cmp)];
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user