# HG changeset patch # User Sascha L. Teichmann # Date 1552297756 -3600 # Node ID 27501719e79b7e825d505fe573b03598408c5c6f # Parent dc4fae4bdb8f346ebe4a84a3b0ad361430d9ea8d STT tree: deduplicated som code. diff -r dc4fae4bdb8f -r 27501719e79b pkg/octree/strtree.go --- a/pkg/octree/strtree.go Fri Mar 08 19:15:47 2019 +0100 +++ b/pkg/octree/strtree.go Mon Mar 11 10:49:16 2019 +0100 @@ -106,6 +106,22 @@ } } +func strSplit(items []int32, S int) [][]int32 { + sm := S * numEntries + slices := make([][]int32, S) + for i := range slices { + var n int + if l := len(items); l < sm { + n = l + } else { + n = sm + } + slices[i] = items[:n] + items = items[n:] + } + return slices +} + func (s *STRTree) build(items []int32) int32 { sort.Slice(items, func(i, j int) bool { ti := s.tin.Triangles[items[i]] @@ -116,20 +132,7 @@ P := int(math.Ceil(float64(len(items)) / float64(numEntries))) S := int(math.Ceil(math.Sqrt(float64(P)))) - sm := S * numEntries - - slices := make([][]int32, S) - rest := items - for i := range slices { - var n int - if l := len(rest); l < sm { - n = l - } else { - n = sm - } - slices[i] = rest[:n] - rest = rest[n:] - } + slices := strSplit(items, S) leaves := make([]int32, 0, S*S) @@ -173,21 +176,7 @@ P := int(math.Ceil(float64(len(items)) / float64(numEntries))) S := int(math.Ceil(math.Sqrt(float64(P)))) - sm := S * numEntries - - slices := make([][]int32, S) - - rest := items - for i := range slices { - var n int - if l := len(rest); l < sm { - n = l - } else { - n = sm - } - slices[i] = rest[:n] - rest = rest[n:] - } + slices := strSplit(items, S) nodes := make([]int32, 0, S*S)