aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/google/go-intervals/intervalset/intervalset_immutable.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/google/go-intervals/intervalset/intervalset_immutable.go')
-rw-r--r--vendor/github.com/google/go-intervals/intervalset/intervalset_immutable.go85
1 files changed, 85 insertions, 0 deletions
diff --git a/vendor/github.com/google/go-intervals/intervalset/intervalset_immutable.go b/vendor/github.com/google/go-intervals/intervalset/intervalset_immutable.go
new file mode 100644
index 000000000..f6d5cbb52
--- /dev/null
+++ b/vendor/github.com/google/go-intervals/intervalset/intervalset_immutable.go
@@ -0,0 +1,85 @@
+// 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)
+}