示例#1
0
  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;
  }
示例#2
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));
        }
      }
    }
  }
示例#3
0
  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;
  }
示例#4
0
  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;
  }
示例#5
0
  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);
            }
          }
        }
      }
    }
  }