summaryrefslogtreecommitdiff
path: root/assets/javascripts/rectangles/util/sort.js
blob: ec0f5e98e83401ad5c7c0f211d30c38ad5cf18c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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)
	           .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_rect_area)
				     .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_rect_area)
	           .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
}