public StatefulBuffer readStatefulBufferById(Transaction trans, int id, boolean lastCommitted) {
    if (id <= 0) {
      throw new IllegalArgumentException("id=" + id);
    }

    Slot slot =
        lastCommitted ? trans.idSystem().committedSlot(id) : trans.idSystem().currentSlot(id);

    if (DTrace.enabled) {
      DTrace.SLOT_READ.logLength(id, slot);
    }

    return readStatefulBufferBySlot(trans, id, slot);
  }
  public final boolean delete4(
      Transaction transaction, ObjectReference ref, Object obj, int cascade, boolean userCall) {
    int id = ref.getID();
    StatefulBuffer reader = readStatefulBufferById(transaction, id);
    if (reader != null) {
      if (obj != null) {
        if ((!showInternalClasses()) && Const4.CLASS_INTERNAL.isAssignableFrom(obj.getClass())) {
          return false;
        }
      }
      reader.setCascadeDeletes(cascade);
      transaction.idSystem().notifySlotDeleted(id, SlotChangeFactory.USER_OBJECTS);
      ClassMetadata classMetadata = ref.classMetadata();
      classMetadata.delete(reader, obj);

      return true;
    }
    return false;
  }
 @Override
 public boolean isDeleted(Transaction trans, int id) {
   return trans.idSystem().isDeleted(id);
 }
 public final Slot allocateSlotForNewUserObject(Transaction trans, int id, int length) {
   Slot slot = allocateSlot(length);
   trans.idSystem().notifySlotCreated(id, slot, SlotChangeFactory.USER_OBJECTS);
   return slot;
 }
 public final void rollback1(Transaction trans) {
   trans.rollback();
 }
 public final int idForNewUserObject(Transaction trans) {
   return trans.idSystem().newId(SlotChangeFactory.USER_OBJECTS);
 }
 public void commit1(Transaction trans) {
   trans.commit();
 }