@Override
  public void setAddress(int record, long address) throws IOException {
    markDirty();

    int addressOfRecordAbsoluteOffset = getOffset(record, ADDRESS_OFFSET);
    int existing_address = myStorage.getInt(addressOfRecordAbsoluteOffset);

    if (existing_address < 0) { // update address in indirect record
      super.setAddress(-existing_address, address);
      return;
    }
    if (address > Integer.MAX_VALUE || address < 0 || forceSplit) {
      // nonnegative integer address is not enough and we introduce indirect record
      int extendedRecord = doCreateNewRecord();
      super.setAddress(extendedRecord, address);
      myStorage.putInt(addressOfRecordAbsoluteOffset, -extendedRecord);
    }
    else {
      myStorage.putInt(addressOfRecordAbsoluteOffset, (int)address);
    }
  }
@Override
  public void setAddress(int record, long address)