diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
commit | 72231250ed81e10d66bfe70701e64fa5fe50f712 (patch) | |
tree | 2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /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.java | 45 |
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)); } +} |