From 4ab28599445309bb0ed3ffeb5fea7067ba886374 Mon Sep 17 00:00:00 2001 From: Josh Baker Date: Sun, 17 Jul 2016 17:47:23 -0700 Subject: [PATCH] added context to rectangle --- rtree.go | 12 +++++++----- rtree_test.go | 14 +++++++------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/rtree.go b/rtree.go index 0042274..4f289a4 100644 --- a/rtree.go +++ b/rtree.go @@ -10,18 +10,20 @@ import ( type Iterator func(item Item) bool type Item interface { - Rect() (min []float64, max []float64) + Rect(ctx interface{}) (min []float64, max []float64) } type RTree struct { + ctx interface{} tr1 *d1.RTree tr2 *d2.RTree tr3 *d3.RTree tr4 *d4.RTree } -func New() *RTree { +func New(ctx interface{}) *RTree { return &RTree{ + ctx: ctx, tr1: d1.NewRTree(), tr2: d2.NewRTree(), tr3: d3.NewRTree(), @@ -33,7 +35,7 @@ func (tr *RTree) Insert(item Item) { if item == nil { panic("nil item being added to RTree") } - min, max := item.Rect() + min, max := item.Rect(tr.ctx) if len(min) != len(max) { panic("invalid item rectangle") } @@ -71,7 +73,7 @@ func (tr *RTree) Remove(item Item) { if item == nil { panic("nil item being added to RTree") } - min, max := item.Rect() + min, max := item.Rect(tr.ctx) if len(min) != len(max) { panic("invalid item rectangle") } @@ -117,7 +119,7 @@ func (tr *RTree) Search(bounds Item, iter Iterator) { if bounds == nil { panic("nil item being added to RTree") } - min, max := bounds.Rect() + min, max := bounds.Rect(tr.ctx) if len(min) != len(max) { panic("invalid item rectangle") } diff --git a/rtree_test.go b/rtree_test.go index d1700b4..cd79e7a 100644 --- a/rtree_test.go +++ b/rtree_test.go @@ -12,12 +12,12 @@ type tRect []float64 func (r *tRect) Arr() []float64 { return []float64(*r) } -func (r *tRect) Rect() (min, max []float64) { +func (r *tRect) Rect(ctx interface{}) (min, max []float64) { return r.Arr()[:len(r.Arr())/2], r.Arr()[len(r.Arr())/2:] } func (r *tRect) String() string { - min, max := r.Rect() + min, max := r.Rect(nil) return fmt.Sprintf("%v,%v", min, max) } func tRandRect(dims int) *tRect { @@ -41,7 +41,7 @@ type tPoint struct { x, y float64 } -func (r *tPoint) Rect() (min, max []float64) { +func (r *tPoint) Rect(ctx interface{}) (min, max []float64) { return []float64{r.x, r.y}, []float64{r.x, r.y} } func tRandPoint() *tPoint { @@ -51,7 +51,7 @@ func tRandPoint() *tPoint { } } func TestRTree(t *testing.T) { - tr := New() + tr := New("hello") zeroPoint := &tRect{0, 0, 0, 0} tr.Insert(&tRect{10, 10, 10, 10, 20, 20, 20, 20}) tr.Insert(&tRect{10, 10, 10, 20, 20, 20}) @@ -85,7 +85,7 @@ func TestRTree(t *testing.T) { func TestInsertDelete(t *testing.T) { rand.Seed(time.Now().UnixNano()) n := 50000 - tr := New() + tr := New(nil) var r2arr []*tRect for i := 0; i < n; i++ { r := tRandRect(-1) @@ -120,7 +120,7 @@ func TestInsertDelete(t *testing.T) { func TestPoints(t *testing.T) { rand.Seed(time.Now().UnixNano()) n := 25000 - tr := New() + tr := New(nil) var points []*tPoint for i := 0; i < n; i++ { r := tRandPoint() @@ -150,7 +150,7 @@ func TestPoints(t *testing.T) { func BenchmarkInsert(t *testing.B) { t.StopTimer() rand.Seed(time.Now().UnixNano()) - tr := New() + tr := New(nil) var points []*tPoint for i := 0; i < t.N; i++ { points = append(points, tRandPoint())