]> git.lizzy.rs Git - go-anidb.git/blob - titles/result.go
Initial commit
[go-anidb.git] / titles / result.go
1 package titles
2
3 import (
4         "sort"
5 )
6
7 type ResultSet map[int]Anime
8 type Results []Anime
9
10 func (res Results) AIDList() (aid []int) {
11         aid = make([]int, 0, len(res))
12         for _, r := range res {
13                 aid = append(aid, r.AID)
14         }
15         return
16 }
17
18 func (matches SearchMatches) ToResultSet(db *TitlesDatabase) (rs ResultSet) {
19         if matches == nil {
20                 return nil
21         }
22         db.RLock()
23         defer db.RUnlock()
24
25         rs = ResultSet{}
26         for _, m := range matches {
27                 rs[m.AID] = *db.AnimeMap[m.AID]
28         }
29         return
30 }
31
32 func (rs ResultSet) unsortedResults() (res Results) {
33         res = make(Results, 0, len(rs))
34         for _, r := range rs {
35                 res = append(res, r)
36         }
37         return
38 }
39
40 // Returns true if the first parameter is less than the second parameter
41 type ResultComparer func(*Anime, *Anime) bool
42
43 var (
44         aidSort = func(a *Anime, b *Anime) bool {
45                 return a.AID < b.AID
46         }
47         titleSort = func(a *Anime, b *Anime) bool {
48                 return sort.StringSlice{a.PrimaryTitle, b.PrimaryTitle}.Less(0, 1)
49         }
50 )
51
52 func (rs ResultSet) ResultsByAID() (res Results) {
53         return rs.ResultsByFunc(aidSort)
54 }
55
56 func (rs ResultSet) ReverseResultsByAID() (res Results) {
57         return rs.ReverseResultsByFunc(aidSort)
58 }
59
60 func (rs ResultSet) ResultsByPrimaryTitle() (res Results) {
61         return rs.ResultsByFunc(titleSort)
62 }
63
64 func (rs ResultSet) ReverseResultsByPrimaryTitle() (res Results) {
65         return rs.ReverseResultsByFunc(titleSort)
66 }
67
68 func (rs ResultSet) ResultsByFunc(f ResultComparer) (res Results) {
69         res = rs.unsortedResults()
70         f.Sort(res)
71         return
72 }
73
74 func (rs ResultSet) ReverseResultsByFunc(f ResultComparer) (res Results) {
75         res = rs.unsortedResults()
76         f.Sort(res)
77         return
78 }