insert recursively inserts an interval and rebalances.
(node *treeNode, interval ast.Interval)
| 58 | |
| 59 | // insert recursively inserts an interval and rebalances. |
| 60 | func (t *IntervalTree) insert(node *treeNode, interval ast.Interval) *treeNode { |
| 61 | if node == nil { |
| 62 | return &treeNode{ |
| 63 | interval: interval, |
| 64 | maxEnd: GetEndTime(interval), |
| 65 | height: 1, |
| 66 | } |
| 67 | } |
| 68 | |
| 69 | start := GetStartTime(interval) |
| 70 | nodeStart := GetStartTime(node.interval) |
| 71 | |
| 72 | if start < nodeStart { |
| 73 | node.left = t.insert(node.left, interval) |
| 74 | } else { |
| 75 | node.right = t.insert(node.right, interval) |
| 76 | } |
| 77 | |
| 78 | // Update max end |
| 79 | node.maxEnd = maxInt(node.maxEnd, GetEndTime(interval)) |
| 80 | |
| 81 | // Rebalance |
| 82 | return t.rebalance(node) |
| 83 | } |
| 84 | |
| 85 | // contains checks if an exact interval exists in the tree. |
| 86 | func (t *IntervalTree) contains(interval ast.Interval) bool { |
no test coverage detected