diff --git a/pkg/services/tree/heap/ordered_slice.go b/pkg/services/tree/heap/ordered_slice.go index 6752bb685..23efe216d 100644 --- a/pkg/services/tree/heap/ordered_slice.go +++ b/pkg/services/tree/heap/ordered_slice.go @@ -8,9 +8,13 @@ import ( ) type OrderedSlice struct { - nodes []pilorama.NodeInfo + nodes []node sorted bool } +type node struct { + filename []byte + info *pilorama.NodeInfo +} func NewOrderedSlice() *OrderedSlice { return new(OrderedSlice) @@ -18,7 +22,12 @@ func NewOrderedSlice() *OrderedSlice { func (s *OrderedSlice) Insert(infos ...pilorama.NodeInfo) { s.sorted = false - s.nodes = append(s.nodes, infos...) + for i := range infos { + s.nodes = append(s.nodes, node{ + filename: infos[i].Meta.GetAttr(pilorama.AttributeFilename), + info: &infos[i], + }) + } } func (s *OrderedSlice) IsEmpty() bool { @@ -33,15 +42,15 @@ func (s *OrderedSlice) ExtractMin() pilorama.NodeInfo { node := s.nodes[0] s.nodes = s.nodes[1:] - return node + return *node.info } -func sortByFilename(nodes []pilorama.NodeInfo) { +func sortByFilename(nodes []node) { if len(nodes) == 0 { return } less := func(i, j int) bool { - return bytes.Compare(nodes[i].Meta.GetAttr(pilorama.AttributeFilename), nodes[j].Meta.GetAttr(pilorama.AttributeFilename)) < 0 + return bytes.Compare(nodes[i].filename, nodes[j].filename) < 0 } sort.Slice(nodes, less) }