rtred/rtree.go

938 lines
19 KiB
Go
Raw Normal View History

2016-07-22 01:30:24 +03:00
// generated; DO NOT EDIT!
2016-06-12 02:43:14 +03:00
package rtree
import (
"math"
2016-07-22 01:30:24 +03:00
d1 "github.com/tidwall/rtree/dims/d1"
d2 "github.com/tidwall/rtree/dims/d2"
d3 "github.com/tidwall/rtree/dims/d3"
d4 "github.com/tidwall/rtree/dims/d4"
d5 "github.com/tidwall/rtree/dims/d5"
d6 "github.com/tidwall/rtree/dims/d6"
d7 "github.com/tidwall/rtree/dims/d7"
d8 "github.com/tidwall/rtree/dims/d8"
d9 "github.com/tidwall/rtree/dims/d9"
d10 "github.com/tidwall/rtree/dims/d10"
d11 "github.com/tidwall/rtree/dims/d11"
d12 "github.com/tidwall/rtree/dims/d12"
d13 "github.com/tidwall/rtree/dims/d13"
d14 "github.com/tidwall/rtree/dims/d14"
d15 "github.com/tidwall/rtree/dims/d15"
d16 "github.com/tidwall/rtree/dims/d16"
d17 "github.com/tidwall/rtree/dims/d17"
d18 "github.com/tidwall/rtree/dims/d18"
d19 "github.com/tidwall/rtree/dims/d19"
d20 "github.com/tidwall/rtree/dims/d20"
2016-06-12 02:43:14 +03:00
)
type Iterator func(item Item) bool
type Item interface {
2016-07-18 03:47:23 +03:00
Rect(ctx interface{}) (min []float64, max []float64)
2016-06-12 02:43:14 +03:00
}
type RTree struct {
2016-07-18 03:47:23 +03:00
ctx interface{}
2016-06-12 02:43:14 +03:00
tr1 *d1.RTree
tr2 *d2.RTree
tr3 *d3.RTree
tr4 *d4.RTree
2016-07-22 01:30:24 +03:00
tr5 *d5.RTree
tr6 *d6.RTree
tr7 *d7.RTree
tr8 *d8.RTree
tr9 *d9.RTree
tr10 *d10.RTree
tr11 *d11.RTree
tr12 *d12.RTree
tr13 *d13.RTree
tr14 *d14.RTree
tr15 *d15.RTree
tr16 *d16.RTree
tr17 *d17.RTree
tr18 *d18.RTree
tr19 *d19.RTree
tr20 *d20.RTree
2016-06-12 02:43:14 +03:00
}
2016-07-18 03:47:23 +03:00
func New(ctx interface{}) *RTree {
2016-06-12 02:43:14 +03:00
return &RTree{
2016-07-18 03:47:23 +03:00
ctx: ctx,
2016-09-03 23:57:44 +03:00
tr1: d1.New(),
tr2: d2.New(),
tr3: d3.New(),
tr4: d4.New(),
tr5: d5.New(),
tr6: d6.New(),
tr7: d7.New(),
tr8: d8.New(),
tr9: d9.New(),
tr10: d10.New(),
tr11: d11.New(),
tr12: d12.New(),
tr13: d13.New(),
tr14: d14.New(),
tr15: d15.New(),
tr16: d16.New(),
tr17: d17.New(),
tr18: d18.New(),
tr19: d19.New(),
tr20: d20.New(),
2016-06-12 02:43:14 +03:00
}
}
func (tr *RTree) Insert(item Item) {
if item == nil {
panic("nil item being added to RTree")
}
2016-07-18 03:47:23 +03:00
min, max := item.Rect(tr.ctx)
2016-06-12 02:43:14 +03:00
if len(min) != len(max) {
2016-07-18 15:26:26 +03:00
return // just return
2016-06-12 02:43:14 +03:00
panic("invalid item rectangle")
}
switch len(min) {
default:
2016-07-18 15:26:26 +03:00
return // just return
2016-06-12 02:43:14 +03:00
panic("invalid dimension")
case 1:
var amin, amax [1]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr1.Insert(amin, amax, item)
case 2:
var amin, amax [2]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr2.Insert(amin, amax, item)
case 3:
var amin, amax [3]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr3.Insert(amin, amax, item)
case 4:
var amin, amax [4]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr4.Insert(amin, amax, item)
2016-07-22 01:30:24 +03:00
case 5:
var amin, amax [5]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr5.Insert(amin, amax, item)
case 6:
var amin, amax [6]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr6.Insert(amin, amax, item)
case 7:
var amin, amax [7]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr7.Insert(amin, amax, item)
case 8:
var amin, amax [8]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr8.Insert(amin, amax, item)
case 9:
var amin, amax [9]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr9.Insert(amin, amax, item)
case 10:
var amin, amax [10]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr10.Insert(amin, amax, item)
case 11:
var amin, amax [11]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr11.Insert(amin, amax, item)
case 12:
var amin, amax [12]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr12.Insert(amin, amax, item)
case 13:
var amin, amax [13]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr13.Insert(amin, amax, item)
case 14:
var amin, amax [14]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr14.Insert(amin, amax, item)
case 15:
var amin, amax [15]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr15.Insert(amin, amax, item)
case 16:
var amin, amax [16]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr16.Insert(amin, amax, item)
case 17:
var amin, amax [17]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr17.Insert(amin, amax, item)
case 18:
var amin, amax [18]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr18.Insert(amin, amax, item)
case 19:
var amin, amax [19]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr19.Insert(amin, amax, item)
case 20:
var amin, amax [20]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr20.Insert(amin, amax, item)
2016-06-12 02:43:14 +03:00
}
}
func (tr *RTree) Remove(item Item) {
if item == nil {
panic("nil item being added to RTree")
}
2016-07-18 03:47:23 +03:00
min, max := item.Rect(tr.ctx)
2016-06-12 02:43:14 +03:00
if len(min) != len(max) {
2016-07-18 15:26:26 +03:00
return // just return
2016-06-12 02:43:14 +03:00
panic("invalid item rectangle")
}
switch len(min) {
default:
2016-07-18 15:26:26 +03:00
return // just return
2016-06-12 02:43:14 +03:00
panic("invalid dimension")
case 1:
var amin, amax [1]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr1.Remove(amin, amax, item)
case 2:
var amin, amax [2]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr2.Remove(amin, amax, item)
case 3:
var amin, amax [3]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr3.Remove(amin, amax, item)
case 4:
var amin, amax [4]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr4.Remove(amin, amax, item)
2016-07-22 01:30:24 +03:00
case 5:
var amin, amax [5]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr5.Remove(amin, amax, item)
case 6:
var amin, amax [6]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr6.Remove(amin, amax, item)
case 7:
var amin, amax [7]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr7.Remove(amin, amax, item)
case 8:
var amin, amax [8]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr8.Remove(amin, amax, item)
case 9:
var amin, amax [9]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr9.Remove(amin, amax, item)
case 10:
var amin, amax [10]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr10.Remove(amin, amax, item)
case 11:
var amin, amax [11]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr11.Remove(amin, amax, item)
case 12:
var amin, amax [12]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr12.Remove(amin, amax, item)
case 13:
var amin, amax [13]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr13.Remove(amin, amax, item)
case 14:
var amin, amax [14]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr14.Remove(amin, amax, item)
case 15:
var amin, amax [15]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr15.Remove(amin, amax, item)
case 16:
var amin, amax [16]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr16.Remove(amin, amax, item)
case 17:
var amin, amax [17]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr17.Remove(amin, amax, item)
case 18:
var amin, amax [18]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr18.Remove(amin, amax, item)
case 19:
var amin, amax [19]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr19.Remove(amin, amax, item)
case 20:
var amin, amax [20]float64
for i := 0; i < len(min); i++ {
amin[i], amax[i] = min[i], max[i]
}
tr.tr20.Remove(amin, amax, item)
2016-06-12 02:43:14 +03:00
}
}
func (tr *RTree) Reset() {
2016-09-03 23:57:44 +03:00
tr.tr1 = d1.New()
tr.tr2 = d2.New()
tr.tr3 = d3.New()
tr.tr4 = d4.New()
tr.tr5 = d5.New()
tr.tr6 = d6.New()
tr.tr7 = d7.New()
tr.tr8 = d8.New()
tr.tr9 = d9.New()
tr.tr10 = d10.New()
tr.tr11 = d11.New()
tr.tr12 = d12.New()
tr.tr13 = d13.New()
tr.tr14 = d14.New()
tr.tr15 = d15.New()
tr.tr16 = d16.New()
tr.tr17 = d17.New()
tr.tr18 = d18.New()
tr.tr19 = d19.New()
tr.tr20 = d20.New()
2016-06-12 02:43:14 +03:00
}
func (tr *RTree) Count() int {
2016-07-22 01:30:24 +03:00
count := 0
count += tr.tr1.Count()
count += tr.tr2.Count()
count += tr.tr3.Count()
count += tr.tr4.Count()
count += tr.tr5.Count()
count += tr.tr6.Count()
count += tr.tr7.Count()
count += tr.tr8.Count()
count += tr.tr9.Count()
count += tr.tr10.Count()
count += tr.tr11.Count()
count += tr.tr12.Count()
count += tr.tr13.Count()
count += tr.tr14.Count()
count += tr.tr15.Count()
count += tr.tr16.Count()
count += tr.tr17.Count()
count += tr.tr18.Count()
count += tr.tr19.Count()
count += tr.tr20.Count()
return count
2016-06-12 02:43:14 +03:00
}
func (tr *RTree) Search(bounds Item, iter Iterator) {
if bounds == nil {
2016-07-18 15:26:26 +03:00
panic("nil bounds being used for search")
2016-06-12 02:43:14 +03:00
}
2016-07-18 03:47:23 +03:00
min, max := bounds.Rect(tr.ctx)
2016-06-12 02:43:14 +03:00
if len(min) != len(max) {
2016-07-18 15:26:26 +03:00
return // just return
2016-06-12 02:43:14 +03:00
panic("invalid item rectangle")
}
switch len(min) {
default:
2016-07-18 15:26:26 +03:00
return // just return
2016-06-12 02:43:14 +03:00
panic("invalid dimension")
2016-07-22 01:30:24 +03:00
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
case 20:
2016-06-12 02:43:14 +03:00
}
if !tr.search1(min, max, iter) {
return
}
if !tr.search2(min, max, iter) {
return
}
if !tr.search3(min, max, iter) {
return
}
if !tr.search4(min, max, iter) {
return
}
2016-07-22 01:30:24 +03:00
if !tr.search5(min, max, iter) {
return
}
if !tr.search6(min, max, iter) {
return
}
if !tr.search7(min, max, iter) {
return
}
if !tr.search8(min, max, iter) {
return
}
if !tr.search9(min, max, iter) {
return
}
if !tr.search10(min, max, iter) {
return
}
if !tr.search11(min, max, iter) {
return
}
if !tr.search12(min, max, iter) {
return
}
if !tr.search13(min, max, iter) {
return
}
if !tr.search14(min, max, iter) {
return
}
if !tr.search15(min, max, iter) {
return
}
if !tr.search16(min, max, iter) {
return
}
if !tr.search17(min, max, iter) {
return
}
if !tr.search18(min, max, iter) {
return
}
if !tr.search19(min, max, iter) {
return
}
if !tr.search20(min, max, iter) {
return
}
2016-06-12 02:43:14 +03:00
}
func (tr *RTree) search1(min, max []float64, iter Iterator) bool {
var amin, amax [1]float64
for i := 0; i < 1; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
2016-06-25 22:51:38 +03:00
tr.tr1.Search(amin, amax, func(dataID interface{}) bool {
2016-06-12 02:43:14 +03:00
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
2016-06-25 22:51:38 +03:00
})
2016-06-12 02:43:14 +03:00
return !ended
}
2016-07-22 01:30:24 +03:00
2016-06-12 02:43:14 +03:00
func (tr *RTree) search2(min, max []float64, iter Iterator) bool {
var amin, amax [2]float64
for i := 0; i < 2; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
2016-06-25 22:51:38 +03:00
tr.tr2.Search(amin, amax, func(dataID interface{}) bool {
2016-06-12 02:43:14 +03:00
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
2016-06-25 22:51:38 +03:00
})
2016-06-12 02:43:14 +03:00
return !ended
}
2016-07-22 01:30:24 +03:00
2016-06-12 02:43:14 +03:00
func (tr *RTree) search3(min, max []float64, iter Iterator) bool {
var amin, amax [3]float64
for i := 0; i < 3; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
2016-06-25 22:51:38 +03:00
tr.tr3.Search(amin, amax, func(dataID interface{}) bool {
2016-06-12 02:43:14 +03:00
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
2016-06-25 22:51:38 +03:00
})
2016-06-12 02:43:14 +03:00
return !ended
}
2016-07-22 01:30:24 +03:00
2016-06-12 02:43:14 +03:00
func (tr *RTree) search4(min, max []float64, iter Iterator) bool {
var amin, amax [4]float64
for i := 0; i < 4; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
2016-06-25 22:51:38 +03:00
tr.tr4.Search(amin, amax, func(dataID interface{}) bool {
2016-06-12 02:43:14 +03:00
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
2016-06-25 22:51:38 +03:00
})
2016-06-12 02:43:14 +03:00
return !ended
}
2016-07-22 01:30:24 +03:00
func (tr *RTree) search5(min, max []float64, iter Iterator) bool {
var amin, amax [5]float64
for i := 0; i < 5; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr5.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}
func (tr *RTree) search6(min, max []float64, iter Iterator) bool {
var amin, amax [6]float64
for i := 0; i < 6; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr6.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}
func (tr *RTree) search7(min, max []float64, iter Iterator) bool {
var amin, amax [7]float64
for i := 0; i < 7; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr7.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}
func (tr *RTree) search8(min, max []float64, iter Iterator) bool {
var amin, amax [8]float64
for i := 0; i < 8; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr8.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}
func (tr *RTree) search9(min, max []float64, iter Iterator) bool {
var amin, amax [9]float64
for i := 0; i < 9; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr9.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}
func (tr *RTree) search10(min, max []float64, iter Iterator) bool {
var amin, amax [10]float64
for i := 0; i < 10; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr10.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}
func (tr *RTree) search11(min, max []float64, iter Iterator) bool {
var amin, amax [11]float64
for i := 0; i < 11; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr11.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}
func (tr *RTree) search12(min, max []float64, iter Iterator) bool {
var amin, amax [12]float64
for i := 0; i < 12; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr12.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}
func (tr *RTree) search13(min, max []float64, iter Iterator) bool {
var amin, amax [13]float64
for i := 0; i < 13; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr13.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}
func (tr *RTree) search14(min, max []float64, iter Iterator) bool {
var amin, amax [14]float64
for i := 0; i < 14; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr14.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}
func (tr *RTree) search15(min, max []float64, iter Iterator) bool {
var amin, amax [15]float64
for i := 0; i < 15; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr15.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}
func (tr *RTree) search16(min, max []float64, iter Iterator) bool {
var amin, amax [16]float64
for i := 0; i < 16; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr16.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}
func (tr *RTree) search17(min, max []float64, iter Iterator) bool {
var amin, amax [17]float64
for i := 0; i < 17; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr17.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}
func (tr *RTree) search18(min, max []float64, iter Iterator) bool {
var amin, amax [18]float64
for i := 0; i < 18; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr18.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}
func (tr *RTree) search19(min, max []float64, iter Iterator) bool {
var amin, amax [19]float64
for i := 0; i < 19; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr19.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}
func (tr *RTree) search20(min, max []float64, iter Iterator) bool {
var amin, amax [20]float64
for i := 0; i < 20; i++ {
if i < len(min) {
amin[i] = min[i]
amax[i] = max[i]
} else {
amin[i] = math.Inf(-1)
amax[i] = math.Inf(+1)
}
}
ended := false
tr.tr20.Search(amin, amax, func(dataID interface{}) bool {
if !iter(dataID.(Item)) {
ended = true
return false
}
return true
})
return !ended
}