summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/util/sort.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/rectangles/util/sort.js')
-rw-r--r--public/assets/javascripts/rectangles/util/sort.js86
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
+}