github.com/biogo/store@v0.0.0-20201120204734-aad293a2328f/interval/int_interval_example_test.go (about) 1 /// Copyright ©2012 The bíogo Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package interval_test 6 7 import ( 8 "fmt" 9 10 "github.com/biogo/store/interval" 11 ) 12 13 // Integer-specific intervals 14 type IntInterval struct { 15 Start, End int 16 UID uintptr 17 Payload interface{} 18 } 19 20 func (i IntInterval) Overlap(b interval.IntRange) bool { 21 // Half-open interval indexing. 22 return i.End > b.Start && i.Start < b.End 23 } 24 func (i IntInterval) ID() uintptr { return i.UID } 25 func (i IntInterval) Range() interval.IntRange { return interval.IntRange{i.Start, i.End} } 26 func (i IntInterval) String() string { return fmt.Sprintf("[%d,%d)#%d", i.Start, i.End, i.UID) } 27 28 var intIvs = []IntInterval{ 29 {Start: 0, End: 2}, 30 {Start: 2, End: 4}, 31 {Start: 1, End: 6}, 32 {Start: 3, End: 4}, 33 {Start: 1, End: 3}, 34 {Start: 4, End: 6}, 35 {Start: 5, End: 8}, 36 {Start: 6, End: 8}, 37 {Start: 5, End: 7}, 38 {Start: 8, End: 9}, 39 } 40 41 func Example_2() { 42 t := &interval.IntTree{} 43 for i, iv := range intIvs { 44 iv.UID = uintptr(i) 45 err := t.Insert(iv, false) 46 if err != nil { 47 fmt.Println(err) 48 } 49 } 50 51 fmt.Println("Integer-specific interval tree:") 52 fmt.Println(t.Get(IntInterval{Start: 3, End: 6})) 53 54 // Output: 55 // Integer-specific interval tree: 56 // [[1,6)#2 [2,4)#1 [3,4)#3 [4,6)#5 [5,8)#6 [5,7)#8] 57 }