@Override public void beginArray() throws IOException { List<?> peeked = require(List.class, Token.BEGIN_ARRAY); JsonIterator iterator = new JsonIterator( Token.END_ARRAY, peeked.toArray(new Object[peeked.size()]), 0); stack[stackSize - 1] = iterator; scopes[stackSize - 1] = JsonScope.EMPTY_ARRAY; pathIndices[stackSize - 1] = 0; // If the iterator isn't empty push its first value onto the stack. if (iterator.hasNext()) { push(iterator.next()); } }
@Override public void beginObject() throws IOException { Map<?, ?> peeked = require(Map.class, Token.BEGIN_OBJECT); JsonIterator iterator = new JsonIterator( Token.END_OBJECT, peeked.entrySet().toArray(new Object[peeked.size()]), 0); stack[stackSize - 1] = iterator; scopes[stackSize - 1] = JsonScope.EMPTY_OBJECT; // If the iterator isn't empty push its first value onto the stack. if (iterator.hasNext()) { push(iterator.next()); } }
@Override public void beginArray() throws IOException { List<?> peeked = require(List.class, Token.BEGIN_ARRAY); JsonIterator iterator = new JsonIterator( Token.END_ARRAY, peeked.toArray(new Object[peeked.size()]), 0); stack[stackSize - 1] = iterator; scopes[stackSize - 1] = JsonScope.EMPTY_ARRAY; pathIndices[stackSize - 1] = 0; // If the iterator isn't empty push its first value onto the stack. if (iterator.hasNext()) { push(iterator.next()); } }
@Override public void endObject() throws IOException { JsonIterator peeked = require(JsonIterator.class, Token.END_OBJECT); if (peeked.endToken != Token.END_OBJECT || peeked.hasNext()) { throw typeMismatch(peeked, Token.END_OBJECT); } pathNames[stackSize - 1] = null; remove(); }
@Override public void endArray() throws IOException { JsonIterator peeked = require(JsonIterator.class, Token.END_ARRAY); if (peeked.endToken != Token.END_ARRAY || peeked.hasNext()) { throw typeMismatch(peeked, Token.END_ARRAY); } remove(); }
/** Copy-constructor makes a deep copy for peeking. */ JsonValueReader(JsonValueReader copyFrom) { super(copyFrom); stack = copyFrom.stack.clone(); for (int i = 0; i < stackSize; i++) { if (stack[i] instanceof JsonIterator) { stack[i] = ((JsonIterator) stack[i]).clone(); } } }
@Override protected JsonIterator clone() { // No need to copy the array; it's read-only. return new JsonIterator(endToken, array, next); } }
/** Copy-constructor makes a deep copy for peeking. */ JsonValueReader(JsonValueReader copyFrom) { super(copyFrom); stack = copyFrom.stack.clone(); for (int i = 0; i < stackSize; i++) { if (stack[i] instanceof JsonIterator) { stack[i] = ((JsonIterator) stack[i]).clone(); } } }
@Override public void endArray() throws IOException { JsonIterator peeked = require(JsonIterator.class, Token.END_ARRAY); if (peeked.endToken != Token.END_ARRAY || peeked.hasNext()) { throw typeMismatch(peeked, Token.END_ARRAY); } remove(); }
@Override protected JsonIterator clone() { // No need to copy the array; it's read-only. return new JsonIterator(endToken, array, next); } }
@Override public void endObject() throws IOException { JsonIterator peeked = require(JsonIterator.class, Token.END_OBJECT); if (peeked.endToken != Token.END_OBJECT || peeked.hasNext()) { throw typeMismatch(peeked, Token.END_OBJECT); } pathNames[stackSize - 1] = null; remove(); }
@Override public void beginObject() throws IOException { Map<?, ?> peeked = require(Map.class, Token.BEGIN_OBJECT); JsonIterator iterator = new JsonIterator( Token.END_OBJECT, peeked.entrySet().toArray(new Object[peeked.size()]), 0); stack[stackSize - 1] = iterator; scopes[stackSize - 1] = JsonScope.EMPTY_OBJECT; // If the iterator isn't empty push its first value onto the stack. if (iterator.hasNext()) { push(iterator.next()); } }