29 lines
740 B
Go
29 lines
740 B
Go
package intervals
|
|
|
|
import "fmt"
|
|
|
|
func (intvls *intervals) FindIntervalsForValue(value int) []*Interval {
|
|
// sort intervals (if necessary)
|
|
intvls.Sort()
|
|
|
|
var matches []*Interval
|
|
for _, intvl := range intvls.Intervals {
|
|
// convert if necessary exclusive low/high values into inclusive ones
|
|
low, high, err := intvls.getInclusives(intvl.Low, intvl.High)
|
|
if err != nil {
|
|
fmt.Printf("FindIntervalsForValue - unable to get inclusives: %v", err)
|
|
continue
|
|
}
|
|
|
|
// check if we have to stop searching
|
|
if low > value {
|
|
// due to the intervals are sorted byLow, we can confirm that we will not find more matches
|
|
break
|
|
}
|
|
if inBetweenInclusive(value, low, high) {
|
|
matches = append(matches, intvl)
|
|
}
|
|
}
|
|
return matches
|
|
}
|