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)