sorting.go

 1package cache
 2
 3import "sort"
 4
 5type OrderBy int
 6
 7const (
 8	_ OrderBy = iota
 9	OrderById
10	OrderByCreation
11	OrderByEdit
12)
13
14type OrderDirection int
15
16const (
17	_ OrderDirection = iota
18	OrderAscending
19	OrderDescending
20)
21
22func (c *RepoCache) AllBugsId(order OrderBy, direction OrderDirection) []string {
23	if order == OrderById {
24		return c.orderIds(direction)
25	}
26
27	excerpts := c.allExcerpt()
28
29	var sorter sort.Interface
30
31	switch order {
32	case OrderByCreation:
33		sorter = BugsByCreationTime(excerpts)
34	case OrderByEdit:
35		sorter = BugsByEditTime(excerpts)
36	default:
37		panic("missing sort type")
38	}
39
40	if direction == OrderDescending {
41		sorter = sort.Reverse(sorter)
42	}
43
44	sort.Sort(sorter)
45
46	result := make([]string, len(excerpts))
47
48	for i, val := range excerpts {
49		result[i] = val.Id
50	}
51
52	return result
53}
54
55func (c *RepoCache) orderIds(direction OrderDirection) []string {
56	result := make([]string, len(c.excerpts))
57
58	i := 0
59	for key := range c.excerpts {
60		result[i] = key
61		i++
62	}
63
64	var sorter sort.Interface = sort.StringSlice(result)
65
66	if direction == OrderDescending {
67		sorter = sort.Reverse(sorter)
68	}
69
70	sort.Sort(sorter)
71
72	return result
73}