diff options
Diffstat (limited to 'public/assets/javascripts/rectangles/util/sort.js')
| -rw-r--r-- | public/assets/javascripts/rectangles/util/sort.js | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/public/assets/javascripts/rectangles/util/sort.js b/public/assets/javascripts/rectangles/util/sort.js new file mode 100644 index 0000000..0985b75 --- /dev/null +++ b/public/assets/javascripts/rectangles/util/sort.js @@ -0,0 +1,86 @@ + + +function compare_rect_position(a,b){ + if (a[0].x.a < b[0].x.a) { + return -1 + } + if (a[0].x.a > b[0].x.a) { + return 1 + } + if (a[0].y.a < b[0].y.a) { + return -1 + } + if (a[0].y.a > b[0].y.a) { + return 1 + } + return 0 +} + +function compare_car_reversed (a,b){ + if (a[0] < b[0]) { + return 1 + } + if (a[0] > b[0]) { + return -1 + } + return 0 +} +function compare_car (a,b){ + if (a[0] < b[0]) { + return -1 + } + if (a[0] > b[0]) { + return 1 + } + return 0 +} + +function room_id_tuple (r){ return [r.id, r] } +function room_height_tuple (r){ return [r.height, r] } +function room_area_tuple (r){ return [r.rect.area(), r] } +function rect_area_tuple (r){ return [r.area(), r] } + +function room_rect_tuple (r){ return [r.rect, r] } +function identity_tuple (r){ return [r, r] } +function car (r){ return r[0] } +function cdr (r){ return r[1] } + + +function sort_rooms_by_id(list){ + return list.map(room_id_tuple) + .sort(compare_car) + .map(cdr) +} +function sort_rooms_by_height(list){ + return list.map(room_height_tuple) + .sort(compare_car_reversed) + .map(cdr) +} +function sort_rooms_by_position(list){ + return list.map(room_rect_tuple) + .sort(compare_rect_position) + .map(cdr) +} +function sort_rooms_by_area(list){ + return list.map(room_area_tuple) + .sort(compare_car) + .map(cdr) +} + +function sort_rects_by_position(list){ + return list.map(identity_tuple) + .sort(compare_rect_position) + .map(cdr) +} +function sort_rects_by_area(list){ + return list.map(rect_area_tuple) + .sort(compare_car) + .map(cdr) +} + +function compare_z(a,b){ + return a.rect.y.a < b.rect.y.a ? -1 : a.rect.y.a == b.rect.y.a ? 0 : 1 +} +function compare_x(a,b){ + return a.rect.x.a > b.rect.x.a ? -1 : a.rect.x.a == b.rect.x.a ? 0 : 1 +} |
