package net.tomp2p.message;
import io.netty.buffer.ByteBuf;
import java.io.IOException;
import net.tomp2p.utils.Utils;
public class Buffer {
private final ByteBuf buffer;
private final int length;
private int read = 0;
public Buffer(final ByteBuf buffer, final int length) {
this.buffer = buffer;
this.length = length;
}
public Buffer(ByteBuf buffer) {
this.buffer = buffer;
this.length = buffer.readableBytes();
}
public int length() {
return length;
}
public ByteBuf buffer() {
return buffer;
}
public int readable() {
int remaining = length - read;
int available = buffer.readableBytes();
return Math.min(remaining, available);
}
public boolean isComplete() {
return length == buffer.readableBytes();
}
public int incRead(final int read) {
this.read += read;
return this.read;
}
public Object object() throws ClassNotFoundException, IOException {
return Utils.decodeJavaObject(buffer.duplicate().readerIndex(0));
}
public void reset() {
read = 0;
buffer.resetReaderIndex();
}
@Override
public int hashCode() {
return buffer.duplicate().readerIndex(0).hashCode() ^ length;
}
@Override
public boolean equals(final Object obj) {
if (!(obj instanceof Buffer)) {
return false;
}
if (obj == this) {
return true;
}
final Buffer b = (Buffer) obj;
if(b.length != length) {
return false;
}
return b.buffer.duplicate().readerIndex(0).equals(buffer.duplicate().readerIndex(0));
}
}