aboutsummaryrefslogtreecommitdiffstats
path: root/client/go/internal/slime/array_value.go
diff options
context:
space:
mode:
Diffstat (limited to 'client/go/internal/slime/array_value.go')
-rw-r--r--client/go/internal/slime/array_value.go96
1 files changed, 96 insertions, 0 deletions
diff --git a/client/go/internal/slime/array_value.go b/client/go/internal/slime/array_value.go
new file mode 100644
index 00000000000..e5f84f47442
--- /dev/null
+++ b/client/go/internal/slime/array_value.go
@@ -0,0 +1,96 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Author: arnej
+
+package slime
+
+type ArrayValue struct {
+ valueBase
+ v []Cursor
+}
+
+func newArrayValue() *ArrayValue {
+ return &ArrayValue{
+ v: make([]Cursor, 0, 10),
+ }
+}
+
+func (a *ArrayValue) addElement(elem Cursor) Cursor {
+ a.v = append(a.v, elem)
+ return elem
+}
+
+func (a *ArrayValue) Valid() bool {
+ return true
+}
+
+func (a *ArrayValue) Type() Type {
+ return ARRAY
+}
+
+func (a *ArrayValue) Entries() int {
+ return len(a.v)
+}
+
+func (a *ArrayValue) TraverseArray(traverser ArrayTraverser) {
+ for idx, value := range a.v {
+ traverser.Entry(idx, value)
+ }
+}
+
+func (a *ArrayValue) Entry(idx int) Inspector {
+ if idx < len(a.v) {
+ return a.v[idx]
+ }
+ return InvalidNix
+}
+
+func (a *ArrayValue) MutableEntry(idx int) Cursor {
+ if idx < len(a.v) {
+ return a.v[idx]
+ }
+ return InvalidNix
+}
+
+func (a *ArrayValue) AddNix() Inspector {
+ return a.addElement(ValidNix)
+}
+
+func (a *ArrayValue) AddBool(value bool) Inspector {
+ return a.addElement(newBoolValue(value))
+}
+
+func (a *ArrayValue) AddLong(value int64) Inspector {
+ n := newLongValue(value)
+ a.v = append(a.v, n)
+ return n
+}
+
+func (a *ArrayValue) AddDouble(value float64) Inspector {
+ n := newDoubleValue(value)
+ a.v = append(a.v, n)
+ return n
+}
+
+func (a *ArrayValue) AddString(value string) Inspector {
+ n := newStringValue(value)
+ a.v = append(a.v, n)
+ return n
+}
+
+func (a *ArrayValue) AddData(value []byte) Inspector {
+ n := newDataValue(value)
+ a.v = append(a.v, n)
+ return n
+}
+
+func (a *ArrayValue) AddArray() Cursor {
+ n := newArrayValue()
+ a.v = append(a.v, n)
+ return n
+}
+
+func (a *ArrayValue) AddObject() Cursor {
+ n := newObjectValue()
+ a.v = append(a.v, n)
+ return n
+}