Example #1
0
  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));
        }
      }
    }
  }
Example #2
0
  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);
          }
        }
      }
    }
  }
Example #3
0
  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;
  }