Table ToString outputs sections in alphabetical order
This commit is contained in:
parent
47cb89206a
commit
0d53d7ad32
@ -1,6 +1,7 @@
|
|||||||
package analyzer
|
package analyzer
|
||||||
|
|
||||||
import "os"
|
import "os"
|
||||||
|
import "sort"
|
||||||
import "path/filepath"
|
import "path/filepath"
|
||||||
|
|
||||||
// locator uniquely identifies a section in the section table.
|
// locator uniquely identifies a section in the section table.
|
||||||
@ -26,13 +27,49 @@ type SectionTable map[locator] Section
|
|||||||
|
|
||||||
// ToString returns the data stored in the table as a string.
|
// ToString returns the data stored in the table as a string.
|
||||||
func (table SectionTable) ToString (indent int) (output string) {
|
func (table SectionTable) ToString (indent int) (output string) {
|
||||||
for _, section := range table {
|
sortedKeys := make(locatorArray, len(table))
|
||||||
|
index := 0
|
||||||
|
for key, _ := range table {
|
||||||
|
sortedKeys[index] = key
|
||||||
|
index ++
|
||||||
|
}
|
||||||
|
sort.Sort(sortedKeys)
|
||||||
|
|
||||||
|
for _, name := range sortedKeys {
|
||||||
|
section := table[name]
|
||||||
output += section.ToString(indent)
|
output += section.ToString(indent)
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// locatorArray holds a sortable array of locators
|
||||||
|
type locatorArray []locator
|
||||||
|
|
||||||
|
// Len returns the length of the locator array
|
||||||
|
func (array locatorArray) Len () (length int) {
|
||||||
|
length = len(array)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Less returns whether item at index left is less than item at index right.
|
||||||
|
func (array locatorArray) Less (left, right int) (less bool) {
|
||||||
|
leftLocator := array[left]
|
||||||
|
rightLocator := array[right]
|
||||||
|
|
||||||
|
less =
|
||||||
|
leftLocator.modulePath + leftLocator.name <
|
||||||
|
rightLocator.modulePath + rightLocator.name
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Swap swaps the elments at indices left and right.
|
||||||
|
func (array locatorArray) Swap (left, right int) {
|
||||||
|
temp := array[left]
|
||||||
|
array[left] = array[right]
|
||||||
|
array[right] = temp
|
||||||
|
}
|
||||||
|
|
||||||
// Section is a semantically analyzed section.
|
// Section is a semantically analyzed section.
|
||||||
type Section interface {
|
type Section interface {
|
||||||
// Provided by sectionBase
|
// Provided by sectionBase
|
||||||
|
Reference in New Issue
Block a user