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() }