@Override public void clear() { values = new Hashlet<>(); invalidateOrder(); }
public FieldValue setValue(FieldValue value) { if (value == null) { throw new NullPointerException("Null values in Struct not supported, use removeFieldValue() to remove value instead."); } int index = values.getIndexOfKey(id); FieldValue retVal = null; if (index == -1) { values.put(id, value); invalidateOrder(); } else { retVal = values.value(index); values.setValue(index, value); } return retVal; }
@Override protected void doSetFieldValue(Field field, FieldValue value) { if (field == null) { throw new IllegalArgumentException("Invalid null field pointer"); } Field myField = getDataType().getField(field.getId()); if (myField==null) { throw new IllegalArgumentException("No such field in "+getDataType()+" : "+field.getName()); } if (!myField .getDataType().isValueCompatible(value)) { throw new IllegalArgumentException( "Incompatible data types. Got " + value.getDataType() + ", expected " + myField.getDataType()); } if (myField.getId() != field.getId()) { throw new IllegalArgumentException( "Inconsistent field: " + field); } int index = values.getIndexOfKey(field.getId()); if (index == -1) { values.put(field.getId(), value); invalidateOrder(); } else { values.setValue(index, value); } }
@Override public FieldValue removeFieldValue(Field field) { FieldValue found = values.get(field.getId()); if (found != null) { Hashlet<Integer, FieldValue> copy = new Hashlet<>(); copy.reserve(values.size() - 1); for (int i=0; i < values.size(); i++) { if (values.key(i) != field.getId()) { copy.put(values.key(i), values.value(i)); } } values = copy; invalidateOrder(); } return found; }