Mercurial > gemma
changeset 2564:27501719e79b
STT tree: deduplicated som code.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 11 Mar 2019 10:49:16 +0100 |
parents | dc4fae4bdb8f |
children | 114979e97a6c |
files | pkg/octree/strtree.go |
diffstat | 1 files changed, 18 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- 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)