Mercurial > gemma
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 { |