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  }