github.com/tardisgo/tardisgo@v0.0.0-20161119180838-e0dd9a7e46b5/pogo/sorters.go (about) 1 package pogo 2 3 import ( 4 "go/types" 5 "sort" 6 7 "golang.org/x/tools/go/ssa" 8 ) 9 10 // PackageSorter is a type to allow packages to be sorted by name 11 type PackageSorter []*ssa.Package 12 13 func (a PackageSorter) Len() int { return len(a) } 14 func (a PackageSorter) Swap(i, j int) { a[i], a[j] = a[j], a[i] } 15 func (a PackageSorter) Less(i, j int) bool { return a[i].String() < a[j].String() } 16 17 // MemberNamesSorted provides a sorted list of package member names 18 func MemberNamesSorted(pkg *ssa.Package) []string { 19 allMem := []string{} 20 for mName := range pkg.Members { 21 allMem = append(allMem, mName) 22 } 23 sort.Strings(allMem) 24 return allMem 25 } 26 27 type fnMapSorter []*ssa.Function 28 29 func (a fnMapSorter) Len() int { return len(a) } 30 func (a fnMapSorter) Swap(i, j int) { a[i], a[j] = a[j], a[i] } 31 func (a fnMapSorter) Less(i, j int) bool { return a[i].String() < a[j].String() } 32 33 func (comp *Compilation) fnMapSorted() []*ssa.Function { 34 var fms = fnMapSorter([]*ssa.Function{}) 35 for f := range comp.fnMap { 36 fms = append(fms, f) 37 } 38 sort.Sort(fms) 39 return []*ssa.Function(fms) 40 } 41 42 // TypeSorter is a type to allow types to be sorted 43 type TypeSorter []types.Type 44 45 func (a TypeSorter) Len() int { return len(a) } 46 func (a TypeSorter) Swap(i, j int) { a[i], a[j] = a[j], a[i] } 47 func (a TypeSorter) Less(i, j int) bool { return a[i].String() < a[j].String() }