public final void makePointer(VariablePath rightPath) { Pair<Expression, Expression> pair; ValueVector currVector; Value currValue = getRootValue(); int index; String keyStr; for (int i = 0; i < path.length; i++) { pair = path[i]; keyStr = pair.key().evaluate().strValue(); currVector = currValue.getChildren(keyStr); if (pair.value() == null) { if ((i + 1) < path.length) { currValue = currVector.get(0); } else { // We're finished currValue.children().put(keyStr, ValueVector.createLink(rightPath)); } } else { index = pair.value().evaluate().intValue(); if ((i + 1) < path.length) { currValue = currVector.get(index); } else { currVector.set(index, Value.createLink(rightPath)); } } } }
public final void undef() { Pair<Expression, Expression> pair = null; ValueVector currVector = null; Value currValue = getRootValue(); int index; String keyStr; for (int i = 0; i < path.length; i++) { pair = path[i]; keyStr = pair.key().evaluate().strValue(); currVector = currValue.children().get(keyStr); if (currVector == null) { return; } else if (currVector.size() < 1) { if (currVector.isLink()) { currValue.children().remove(keyStr); } return; } if (pair.value() == null) { if ((i + 1) < path.length) { currValue = currVector.get(0); } else { // We're finished currValue.children().remove(keyStr); } } else { index = pair.value().evaluate().intValue(); if ((i + 1) < path.length) { if (currVector.size() <= index) { return; } currValue = currVector.get(index); } else { if (currVector.size() > index) { currVector.remove(index); } } } } }
public final Value getValueOrNull(Value rootValue) { Pair<Expression, Expression> pair = null; ValueVector currVector = null; Value currValue = rootValue; int index; for (int i = 0; i < path.length; i++) { pair = path[i]; currVector = currValue.children().get(pair.key().evaluate().strValue()); if (currVector == null) { return null; } if (pair.value() == null) { if ((i + 1) < path.length) { if (currVector.isEmpty()) { return null; } currValue = currVector.get(0); } else { // We're finished if (currVector.isEmpty()) { return null; } else { return currVector.get(0); } } } else { index = pair.value().evaluate().intValue(); if (currVector.size() <= index) { return null; } currValue = currVector.get(index); if ((i + 1) >= path.length) { return currValue; } } } return currValue; }