1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- package namer
- import (
- "sort"
- "go-common/app/tool/gengo/types"
- )
- // Orderer produces an ordering of types given a Namer.
- type Orderer struct {
- Namer
- }
- // OrderUniverse assigns a name to every type in the Universe, including Types,
- // Functions and Variables, and returns a list sorted by those names.
- func (o *Orderer) OrderUniverse(u types.Universe) []*types.Type {
- list := tList{
- namer: o.Namer,
- }
- for _, p := range u {
- for _, t := range p.Types {
- list.types = append(list.types, t)
- }
- for _, f := range p.Functions {
- list.types = append(list.types, f)
- }
- for _, v := range p.Variables {
- list.types = append(list.types, v)
- }
- }
- sort.Sort(list)
- return list.types
- }
- // OrderTypes assigns a name to every type, and returns a list sorted by those
- // names.
- func (o *Orderer) OrderTypes(typeList []*types.Type) []*types.Type {
- list := tList{
- namer: o.Namer,
- types: typeList,
- }
- sort.Sort(list)
- return list.types
- }
- type tList struct {
- namer Namer
- types []*types.Type
- }
- func (t tList) Len() int { return len(t.types) }
- func (t tList) Less(i, j int) bool { return t.namer.Name(t.types[i]) < t.namer.Name(t.types[j]) }
- func (t tList) Swap(i, j int) { t.types[i], t.types[j] = t.types[j], t.types[i] }
|