Table ToString outputs sections in alphabetical order
This commit is contained in:
parent
47cb89206a
commit
0d53d7ad32
@ -1,6 +1,7 @@
|
||||
package analyzer
|
||||
|
||||
import "os"
|
||||
import "sort"
|
||||
import "path/filepath"
|
||||
|
||||
// locator uniquely identifies a section in the section table.
|
||||
@ -26,12 +27,48 @@ type SectionTable map[locator] Section
|
||||
|
||||
// ToString returns the data stored in the table as a 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)
|
||||
}
|
||||
|
||||
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.
|
||||
type Section interface {
|
||||
|
Reference in New Issue
Block a user