@SuppressWarnings("unchecked") private void processNextNode() { if (stateStack.isEmpty()) { nextEvent = null; return; } currentItr = stateStack.peek(); if (currentItr.hasNext()) { Object o = currentItr.next(); if (inMap()) { Entry<String, HValue> entry = (Entry<String, HValue>) o; key = entry.getKey(); value = entry.getValue(); } else { key = null; value = HValue.initFromObject(o); } nextEvent = Types.getEventTypeForType(value.getType()); if (!value.getType().isScalar()) { stateStack.push(new IteratorWithType(value)); } } else { IteratorWithType iter = stateStack.pop(); key = null; value = iter.getValue(); nextEvent = (iter.getType() == Type.MAP) ? EventType.END_MAP : EventType.END_ARRAY; currentItr = stateStack.isEmpty() ? null : stateStack.peek(); } }
IteratorWithType(HValue value) { this.value = value; this.i = (value.getType() == Type.MAP) ? ((HDocument) value).iterator() : ((HList) value).listIterator(); }
HDocumentReader(HValue value) { stateStack = new ArrayDeque<>(); this.key = null; this.value = value; Type type = value.getType(); nextEvent = Types.getEventTypeForType(type); if (!type.isScalar()) { stateStack.push(new IteratorWithType(value)); } }
Type getType() { return value.getType(); }