summaryrefslogtreecommitdiff
path: root/vendor/sigs.k8s.io/structured-merge-diff/v3/value/listunstructured.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/sigs.k8s.io/structured-merge-diff/v3/value/listunstructured.go')
-rw-r--r--vendor/sigs.k8s.io/structured-merge-diff/v3/value/listunstructured.go74
1 files changed, 74 insertions, 0 deletions
diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v3/value/listunstructured.go b/vendor/sigs.k8s.io/structured-merge-diff/v3/value/listunstructured.go
new file mode 100644
index 000000000..64cd8e7c0
--- /dev/null
+++ b/vendor/sigs.k8s.io/structured-merge-diff/v3/value/listunstructured.go
@@ -0,0 +1,74 @@
+/*
+Copyright 2019 The Kubernetes Authors.
+
+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
+
+ http://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 value
+
+type listUnstructured []interface{}
+
+func (l listUnstructured) Length() int {
+ return len(l)
+}
+
+func (l listUnstructured) At(i int) Value {
+ return NewValueInterface(l[i])
+}
+
+func (l listUnstructured) AtUsing(a Allocator, i int) Value {
+ return a.allocValueUnstructured().reuse(l[i])
+}
+
+func (l listUnstructured) Equals(other List) bool {
+ return l.EqualsUsing(HeapAllocator, other)
+}
+
+func (l listUnstructured) EqualsUsing(a Allocator, other List) bool {
+ return ListEqualsUsing(a, &l, other)
+}
+
+func (l listUnstructured) Range() ListRange {
+ return l.RangeUsing(HeapAllocator)
+}
+
+func (l listUnstructured) RangeUsing(a Allocator) ListRange {
+ if len(l) == 0 {
+ return EmptyRange
+ }
+ r := a.allocListUnstructuredRange()
+ r.list = l
+ r.i = -1
+ return r
+}
+
+type listUnstructuredRange struct {
+ list listUnstructured
+ vv *valueUnstructured
+ i int
+}
+
+func (r *listUnstructuredRange) Next() bool {
+ r.i += 1
+ return r.i < len(r.list)
+}
+
+func (r *listUnstructuredRange) Item() (index int, value Value) {
+ if r.i < 0 {
+ panic("Item() called before first calling Next()")
+ }
+ if r.i >= len(r.list) {
+ panic("Item() called on ListRange with no more items")
+ }
+ return r.i, r.vv.reuse(r.list[r.i])
+}