MCPcopy
hub / github.com/google/mangle / queryRange

Method queryRange

factstore/interval_tree.go:163–197  ·  view source on GitHub ↗

queryRange recursively queries for overlapping intervals. Two intervals [s1, e1] and [s2, e2] overlap if s1 <= e2 AND s2 <= e1.

(node *treeNode, start, end int64, fn func(ast.Interval) error)

Source from the content-addressed store, hash-verified

161// queryRange recursively queries for overlapping intervals.
162// Two intervals [s1, e1] and [s2, e2] overlap if s1 <= e2 AND s2 <= e1.
163func (t *IntervalTree) queryRange(node *treeNode, start, end int64, fn func(ast.Interval) error) error {
164 if node == nil {
165 return nil
166 }
167
168 // If max end in this subtree is less than query start, no overlap possible
169 if node.maxEnd < start {
170 return nil
171 }
172
173 // Check left subtree
174 if err := t.queryRange(node.left, start, end, fn); err != nil {
175 return err
176 }
177
178 // Check current node for overlap
179 nodeStart := GetStartTime(node.interval)
180 nodeEnd := GetEndTime(node.interval)
181
182 // Overlap condition: nodeStart <= end AND start <= nodeEnd
183 if nodeStart <= end && start <= nodeEnd {
184 if err := fn(node.interval); err != nil {
185 return err
186 }
187 }
188
189 // Check right subtree only if possible overlap exists
190 if nodeStart <= end {
191 if err := t.queryRange(node.right, start, end, fn); err != nil {
192 return err
193 }
194 }
195
196 return nil
197}
198
199// All calls fn for every interval in the tree (in-order traversal).
200func (t *IntervalTree) All(fn func(ast.Interval) error) error {

Callers 1

QueryRangeMethod · 0.95

Calls 2

GetStartTimeFunction · 0.85
GetEndTimeFunction · 0.85

Tested by

no test coverage detected