aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo/slime/ArrayValue.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /vespajlib/src/main/java/com/yahoo/slime/ArrayValue.java
Publish
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/slime/ArrayValue.java')
-rw-r--r--vespajlib/src/main/java/com/yahoo/slime/ArrayValue.java45
1 files changed, 45 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/slime/ArrayValue.java b/vespajlib/src/main/java/com/yahoo/slime/ArrayValue.java
new file mode 100644
index 00000000000..4e520cde3c4
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/slime/ArrayValue.java
@@ -0,0 +1,45 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.slime;
+
+
+final class ArrayValue extends Value {
+
+ private int capacity = 16;
+ private int used = 0;
+ private Value[] values = new Value[capacity];
+ private final SymbolTable names;
+
+ public ArrayValue(SymbolTable names) { this.names = names; }
+ public final Type type() { return Type.ARRAY; }
+ public final int children() { return used; }
+ public final int entries() { return used; }
+ public final Value entry(int index) {
+ return (index < used) ? values[index] : NixValue.invalid();
+ }
+
+ public final void accept(Visitor v) { v.visitArray(this); }
+
+ public final void traverse(ArrayTraverser at) {
+ for (int i = 0; i < used; i++) {
+ at.entry(i, values[i]);
+ }
+ }
+
+ private void grow() {
+ Value[] v = values;
+ capacity = (capacity << 1);
+ values = new Value[capacity];
+ System.arraycopy(v, 0, values, 0, used);
+ }
+
+ protected final Value addLeaf(Value value) {
+ if (used == capacity) {
+ grow();
+ }
+ values[used++] = value;
+ return value;
+ }
+
+ public final Value addArray() { return addLeaf(new ArrayValue(names)); }
+ public final Value addObject() { return addLeaf(new ObjectValue(names)); }
+}