forked from jedib0t/go-pretty
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tracker_sort.go
85 lines (63 loc) · 2.73 KB
/
tracker_sort.go
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
package progress
import "sort"
// SortBy helps sort a list of Trackers by various means.
type SortBy int
const (
// SortByNone doesn't do any sorting == sort by insertion order.
SortByNone SortBy = iota
// SortByMessage sorts by the Message alphabetically in ascending order.
SortByMessage
// SortByMessageDsc sorts by the Message alphabetically in descending order.
SortByMessageDsc
// SortByPercent sorts by the Percentage complete in ascending order.
SortByPercent
// SortByPercentDsc sorts by the Percentage complete in descending order.
SortByPercentDsc
// SortByValue sorts by the Value in ascending order.
SortByValue
// SortByValueDsc sorts by the Value in descending order.
SortByValueDsc
)
// Sort applies the sorting method defined by SortBy.
func (sb SortBy) Sort(trackers []*Tracker) {
switch sb {
case SortByMessage:
sort.Sort(sortByMessage(trackers))
case SortByMessageDsc:
sort.Sort(sortByMessageDsc(trackers))
case SortByPercent:
sort.Sort(sortByPercent(trackers))
case SortByPercentDsc:
sort.Sort(sortByPercentDsc(trackers))
case SortByValue:
sort.Sort(sortByValue(trackers))
case SortByValueDsc:
sort.Sort(sortByValueDsc(trackers))
default:
// no sort
}
}
type sortByMessage []*Tracker
func (sb sortByMessage) Len() int { return len(sb) }
func (sb sortByMessage) Swap(i, j int) { sb[i], sb[j] = sb[j], sb[i] }
func (sb sortByMessage) Less(i, j int) bool { return sb[i].Message < sb[j].Message }
type sortByMessageDsc []*Tracker
func (sb sortByMessageDsc) Len() int { return len(sb) }
func (sb sortByMessageDsc) Swap(i, j int) { sb[i], sb[j] = sb[j], sb[i] }
func (sb sortByMessageDsc) Less(i, j int) bool { return sb[i].Message > sb[j].Message }
type sortByPercent []*Tracker
func (sb sortByPercent) Len() int { return len(sb) }
func (sb sortByPercent) Swap(i, j int) { sb[i], sb[j] = sb[j], sb[i] }
func (sb sortByPercent) Less(i, j int) bool { return sb[i].PercentDone() < sb[j].PercentDone() }
type sortByPercentDsc []*Tracker
func (sb sortByPercentDsc) Len() int { return len(sb) }
func (sb sortByPercentDsc) Swap(i, j int) { sb[i], sb[j] = sb[j], sb[i] }
func (sb sortByPercentDsc) Less(i, j int) bool { return sb[i].PercentDone() > sb[j].PercentDone() }
type sortByValue []*Tracker
func (sb sortByValue) Len() int { return len(sb) }
func (sb sortByValue) Swap(i, j int) { sb[i], sb[j] = sb[j], sb[i] }
func (sb sortByValue) Less(i, j int) bool { return sb[i].value < sb[j].value }
type sortByValueDsc []*Tracker
func (sb sortByValueDsc) Len() int { return len(sb) }
func (sb sortByValueDsc) Swap(i, j int) { sb[i], sb[j] = sb[j], sb[i] }
func (sb sortByValueDsc) Less(i, j int) bool { return sb[i].value > sb[j].value }