mirror of https://github.com/containers/podman.git
86 lines
2.8 KiB
Go
86 lines
2.8 KiB
Go
// Copyright 2017 Google Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// https://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package intervalset
|
|
|
|
// ImmutableSet is a set of interval objects. It provides various set theory
|
|
// operations.
|
|
type ImmutableSet struct {
|
|
set *Set
|
|
}
|
|
|
|
// NewImmutableSet returns a new set given a sorted slice of intervals. This
|
|
// function panics if the intervals are not sorted.
|
|
func NewImmutableSet(intervals []Interval) *ImmutableSet {
|
|
return NewImmutableSetV1(intervals, oldBehaviorFactory.makeZero)
|
|
}
|
|
|
|
// NewImmutableSetV1 returns a new set given a sorted slice of intervals. This
|
|
// function panics if the intervals are not sorted.
|
|
func NewImmutableSetV1(intervals []Interval, makeZero func() Interval) *ImmutableSet {
|
|
return &ImmutableSet{NewSetV1(intervals, makeZero)}
|
|
}
|
|
|
|
// String returns a human-friendly representation of the set.
|
|
func (s *ImmutableSet) String() string {
|
|
return s.set.String()
|
|
}
|
|
|
|
// Extent returns the Interval defined by the minimum and maximum values of the
|
|
// set.
|
|
func (s *ImmutableSet) Extent() Interval {
|
|
return s.set.Extent()
|
|
}
|
|
|
|
// Contains reports whether an interval is entirely contained by the set.
|
|
func (s *ImmutableSet) Contains(ival Interval) bool {
|
|
return s.set.Contains(ival)
|
|
}
|
|
|
|
// Union returns a set with the contents of this set and another set.
|
|
func (s *ImmutableSet) Union(b SetInput) *ImmutableSet {
|
|
union := s.set.Copy()
|
|
union.Add(b)
|
|
return &ImmutableSet{union}
|
|
}
|
|
|
|
// Sub returns a set without the intervals of another set.
|
|
func (s *ImmutableSet) Sub(b SetInput) *ImmutableSet {
|
|
x := s.set.Copy()
|
|
x.Sub(b)
|
|
return &ImmutableSet{x}
|
|
}
|
|
|
|
// Intersect returns the intersection of two sets.
|
|
func (s *ImmutableSet) Intersect(b SetInput) *ImmutableSet {
|
|
x := s.set.Copy()
|
|
x.Intersect(b)
|
|
return &ImmutableSet{x}
|
|
}
|
|
|
|
// IntervalsBetween iterates over the intervals within extents set and calls f
|
|
// with each. If f returns false, iteration ceases.
|
|
//
|
|
// Any interval within the set that overlaps partially with extents is truncated
|
|
// before being passed to f.
|
|
func (s *ImmutableSet) IntervalsBetween(extents Interval, f IntervalReceiver) {
|
|
s.set.IntervalsBetween(extents, f)
|
|
}
|
|
|
|
// Intervals iterates over all the intervals within the set and calls f with
|
|
// each one. If f returns false, iteration ceases.
|
|
func (s *ImmutableSet) Intervals(f IntervalReceiver) {
|
|
s.set.Intervals(f)
|
|
}
|