comparison pkg/octree/strtree.go @ 2513:1534df518201 octree-diff

Called STT tree building.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 05 Mar 2019 15:00:42 +0100
parents 2768f74d54ab
children 6bcaa8bf2603
comparison
equal deleted inserted replaced
2512:2768f74d54ab 2513:1534df518201
57 S := int(math.Ceil(math.Sqrt(float64(P)))) 57 S := int(math.Ceil(math.Sqrt(float64(P))))
58 58
59 sm := S * numEntries 59 sm := S * numEntries
60 60
61 slices := make([][]int32, S) 61 slices := make([][]int32, S)
62 rest := items
62 for i := range slices { 63 for i := range slices {
63 end := (i + 1) * sm 64 var n int
64 if end > len(items) { 65 if len(rest) < sm {
65 end = len(items) 66 n = len(rest)
66 } 67 } else {
67 slices[i] = items[i*sm : end] 68 n = sm
69 }
70 slices[i] = rest[:n]
71 rest = rest[n:]
68 } 72 }
69 73
70 leaves := make([]int32, 0, S*S) 74 leaves := make([]int32, 0, S*S)
71 75
72 for _, slice := range slices { 76 for _, slice := range slices {
112 S := int(math.Ceil(math.Sqrt(float64(P)))) 116 S := int(math.Ceil(math.Sqrt(float64(P))))
113 117
114 sm := S * numEntries 118 sm := S * numEntries
115 119
116 slices := make([][]int32, S) 120 slices := make([][]int32, S)
121 /*
122 log.Printf("S: %d\n", S)
123 log.Printf("SM: %d\n", sm)
124 log.Printf("S * SM: %d\n", S*sm)
125 log.Printf("N: %d\n", len(items))
126 */
127
128 rest := items
117 for i := range slices { 129 for i := range slices {
118 end := (i + 1) * sm 130 var n int
119 if end > len(items) { 131 if len(rest) < sm {
120 end = len(items) 132 n = len(rest)
121 } 133 } else {
122 slices[i] = items[i*sm : end] 134 n = sm
135 }
136 slices[i] = rest[:n]
137 rest = rest[n:]
123 } 138 }
124 139
125 nodes := make([]int32, 0, S*S) 140 nodes := make([]int32, 0, S*S)
126 141
127 for _, slice := range slices { 142 for _, slice := range slices {