private Object getValueOrValueVector() { Pair<Expression, Expression> pair; ValueVector currVector; Value currValue = getRootValue(); int index; for (int i = 0; i < path.length; i++) { pair = path[i]; currVector = currValue.getChildren(pair.key().evaluate().strValue()); if (pair.value() == null) { if ((i + 1) < path.length) { currValue = currVector.get(0); } else { // We're finished return currVector; } } else { index = pair.value().evaluate().intValue(); if ((i + 1) < path.length) { currValue = currVector.get(index); } else { return currVector.get(index); } } } return currValue; }
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 Value getValue(Value rootValue) { Value currValue = rootValue; String keyStr; for (Pair<Expression, Expression> pair : path) { keyStr = pair.key().evaluate().strValue(); if (pair.value() == null) currValue = currValue.getFirstChild(keyStr); else currValue = currValue.getChildren(keyStr).get(pair.value().evaluate().intValue()); } return currValue; }
public final ValueVector getValueVector(Value rootValue) { Pair<Expression, Expression> pair; ValueVector currVector = null; Value currValue = rootValue; for (int i = 0; i < path.length; i++) { pair = path[i]; currVector = currValue.getChildren(pair.key().evaluate().strValue()); if ((i + 1) < path.length) { if (pair.value() == null) { currValue = currVector.get(0); } else { currValue = currVector.get(pair.value().evaluate().intValue()); } } } return currVector; }
public final void setValue(Value value) { Pair<Expression, Expression> pair; ValueVector currVector; Value currValue = getRootValue(); int index; String keyStr; if (path.length == 0) { currValue.refCopy(value); } else { 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 if (currVector.get(0).isUsedInCorrelation()) { currVector.get(0).refCopy(value); } else { currVector.set(0, value); } } } else { index = pair.value().evaluate().intValue(); if ((i + 1) < path.length) { currValue = currVector.get(index); } else { if (currVector.get(index).isUsedInCorrelation()) { currVector.get(index).refCopy(value); } else { currVector.set(index, value); } } } } } }