package org.glassfish.grizzly.asyncqueue;
import org.glassfish.grizzly.Connection;
import org.glassfish.grizzly.WriteResult;
import org.glassfish.grizzly.utils.Holder;
public final class RecordWriteResult<K, L> extends WriteResult<K, L> {
private long lastWrittenBytes;
private long bytesToReleaseAfterLastWrite;
private final SettableHolder<L> dstAddressHolder = new SettableHolder<>();
@Override
protected void set(final Connection<L> connection, final K message, final L dstAddress, final long writtenSize) {
super.set(connection, message, dstAddress, writtenSize);
}
@Override
protected Holder<L> createAddrHolder(final L dstAddress) {
return dstAddressHolder.set(dstAddress);
}
public long lastWrittenBytes() {
return lastWrittenBytes;
}
public long bytesToReleaseAfterLastWrite() {
return bytesToReleaseAfterLastWrite;
}
public RecordWriteResult<K, L> lastWriteResult(final long lastWrittenBytes, final long bytesToReleaseAfterLastWrite) {
this.lastWrittenBytes = lastWrittenBytes;
this.bytesToReleaseAfterLastWrite = bytesToReleaseAfterLastWrite;
return this;
}
@Override
public void recycle() {
lastWrittenBytes = 0;
bytesToReleaseAfterLastWrite = 0;
dstAddressHolder.obj = null;
reset();
}
private static class SettableHolder<L> extends Holder<L> {
private L obj;
public SettableHolder<L> set(final L obj) {
this.obj = obj;
return this;
}
@Override
public L get() {
return obj;
}
}
}