mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Make segment range type split safe.
This allows for use in restricted contexts. Updates #5039 PiperOrigin-RevId: 351265378
This commit is contained in:
committed by
gVisor bot
parent
aac477733f
commit
e06c2b1264
@@ -30,27 +30,37 @@ type Range struct {
|
||||
|
||||
// WellFormed returns true if r.Start <= r.End. All other methods on a Range
|
||||
// require that the Range is well-formed.
|
||||
//
|
||||
//go:nosplit
|
||||
func (r Range) WellFormed() bool {
|
||||
return r.Start <= r.End
|
||||
}
|
||||
|
||||
// Length returns the length of the range.
|
||||
//
|
||||
//go:nosplit
|
||||
func (r Range) Length() T {
|
||||
return r.End - r.Start
|
||||
}
|
||||
|
||||
// Contains returns true if r contains x.
|
||||
//
|
||||
//go:nosplit
|
||||
func (r Range) Contains(x T) bool {
|
||||
return r.Start <= x && x < r.End
|
||||
}
|
||||
|
||||
// Overlaps returns true if r and r2 overlap.
|
||||
//
|
||||
//go:nosplit
|
||||
func (r Range) Overlaps(r2 Range) bool {
|
||||
return r.Start < r2.End && r2.Start < r.End
|
||||
}
|
||||
|
||||
// IsSupersetOf returns true if r is a superset of r2; that is, the range r2 is
|
||||
// contained within r.
|
||||
//
|
||||
//go:nosplit
|
||||
func (r Range) IsSupersetOf(r2 Range) bool {
|
||||
return r.Start <= r2.Start && r.End >= r2.End
|
||||
}
|
||||
@@ -58,6 +68,8 @@ func (r Range) IsSupersetOf(r2 Range) bool {
|
||||
// Intersect returns a range consisting of the intersection between r and r2.
|
||||
// If r and r2 do not overlap, Intersect returns a range with unspecified
|
||||
// bounds, but for which Length() == 0.
|
||||
//
|
||||
//go:nosplit
|
||||
func (r Range) Intersect(r2 Range) Range {
|
||||
if r.Start < r2.Start {
|
||||
r.Start = r2.Start
|
||||
@@ -74,6 +86,8 @@ func (r Range) Intersect(r2 Range) Range {
|
||||
// CanSplitAt returns true if it is legal to split a segment spanning the range
|
||||
// r at x; that is, splitting at x would produce two ranges, both of which have
|
||||
// non-zero length.
|
||||
//
|
||||
//go:nosplit
|
||||
func (r Range) CanSplitAt(x T) bool {
|
||||
return r.Contains(x) && r.Start < x
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user