Make ByteCursors from CompositeBuf slightly faster
This commit is contained in:
parent
a7701c04b5
commit
4960e8b3e7
@ -329,25 +329,31 @@ final class CompositeBuf extends RcSupport<Buf, CompositeBuf> implements Buf {
|
|||||||
int index = fromOffset;
|
int index = fromOffset;
|
||||||
final int end = fromOffset + length;
|
final int end = fromOffset + length;
|
||||||
int bufferIndex = startBufferIndex;
|
int bufferIndex = startBufferIndex;
|
||||||
|
int initOffset = startCursor.currentOffset();
|
||||||
ByteCursor cursor = startCursor;
|
ByteCursor cursor = startCursor;
|
||||||
long longValue = -1;
|
long longValue = -1;
|
||||||
byte byteValue = -1;
|
byte byteValue = -1;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean readLong() {
|
public boolean readLong() {
|
||||||
|
if (cursor.readLong()) {
|
||||||
|
longValue = cursor.getLong();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
if (bytesLeft() >= Long.BYTES) {
|
if (bytesLeft() >= Long.BYTES) {
|
||||||
if (cursor.readLong()) {
|
longValue = nextLongFromBytes();
|
||||||
longValue = cursor.getLong();
|
|
||||||
index += Long.BYTES;
|
|
||||||
} else {
|
|
||||||
longValue = nextLongFromBytes(); // Leave index increments to 'readByte'
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private long nextLongFromBytes() {
|
private long nextLongFromBytes() {
|
||||||
|
if (cursor.bytesLeft() == 0) {
|
||||||
|
nextCursor();
|
||||||
|
if (cursor.readLong()) {
|
||||||
|
return cursor.getLong();
|
||||||
|
}
|
||||||
|
}
|
||||||
long val = 0;
|
long val = 0;
|
||||||
for (int i = 0; i < 8; i++) {
|
for (int i = 0; i < 8; i++) {
|
||||||
readByte();
|
readByte();
|
||||||
@ -364,20 +370,26 @@ final class CompositeBuf extends RcSupport<Buf, CompositeBuf> implements Buf {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean readByte() {
|
public boolean readByte() {
|
||||||
if (index < end) {
|
if (cursor.readByte()) {
|
||||||
if (!cursor.readByte()) {
|
byteValue = cursor.getByte();
|
||||||
bufferIndex++;
|
return true;
|
||||||
Buf nextBuf = bufs[bufferIndex];
|
}
|
||||||
cursor = nextBuf.openCursor(0, Math.min(nextBuf.capacity(), bytesLeft()));
|
if (bytesLeft() > 0) {
|
||||||
cursor.readByte();
|
nextCursor();
|
||||||
}
|
cursor.readByte();
|
||||||
byteValue = cursor.getByte();
|
byteValue = cursor.getByte();
|
||||||
index++;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void nextCursor() {
|
||||||
|
bufferIndex++;
|
||||||
|
Buf nextBuf = bufs[bufferIndex];
|
||||||
|
cursor = nextBuf.openCursor(0, Math.min(nextBuf.capacity(), bytesLeft()));
|
||||||
|
initOffset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte getByte() {
|
public byte getByte() {
|
||||||
return byteValue;
|
return byteValue;
|
||||||
@ -385,12 +397,15 @@ final class CompositeBuf extends RcSupport<Buf, CompositeBuf> implements Buf {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int currentOffset() {
|
public int currentOffset() {
|
||||||
|
int currOff = cursor.currentOffset();
|
||||||
|
index += currOff - initOffset;
|
||||||
|
initOffset = currOff;
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int bytesLeft() {
|
public int bytesLeft() {
|
||||||
return end - index;
|
return end - currentOffset();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -415,25 +430,31 @@ final class CompositeBuf extends RcSupport<Buf, CompositeBuf> implements Buf {
|
|||||||
int index = fromOffset;
|
int index = fromOffset;
|
||||||
final int end = fromOffset - length;
|
final int end = fromOffset - length;
|
||||||
int bufferIndex = startBufferIndex;
|
int bufferIndex = startBufferIndex;
|
||||||
|
int initOffset = startCursor.currentOffset();
|
||||||
ByteCursor cursor = startCursor;
|
ByteCursor cursor = startCursor;
|
||||||
long longValue = -1;
|
long longValue = -1;
|
||||||
byte byteValue = -1;
|
byte byteValue = -1;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean readLong() {
|
public boolean readLong() {
|
||||||
|
if (cursor.readLong()) {
|
||||||
|
longValue = cursor.getLong();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
if (bytesLeft() >= Long.BYTES) {
|
if (bytesLeft() >= Long.BYTES) {
|
||||||
if (cursor.readLong()) {
|
longValue = nextLongFromBytes();
|
||||||
index -= Long.BYTES;
|
|
||||||
longValue = cursor.getLong();
|
|
||||||
} else {
|
|
||||||
longValue = nextLongFromBytes(); // Leave index increments to 'readByte'
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private long nextLongFromBytes() {
|
private long nextLongFromBytes() {
|
||||||
|
if (cursor.bytesLeft() == 0) {
|
||||||
|
nextCursor();
|
||||||
|
if (cursor.readLong()) {
|
||||||
|
return cursor.getLong();
|
||||||
|
}
|
||||||
|
}
|
||||||
long val = 0;
|
long val = 0;
|
||||||
for (int i = 0; i < 8; i++) {
|
for (int i = 0; i < 8; i++) {
|
||||||
readByte();
|
readByte();
|
||||||
@ -450,21 +471,28 @@ final class CompositeBuf extends RcSupport<Buf, CompositeBuf> implements Buf {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean readByte() {
|
public boolean readByte() {
|
||||||
if (index > end) {
|
if (cursor.readByte()) {
|
||||||
if (!cursor.readByte()) {
|
byteValue = cursor.getByte();
|
||||||
bufferIndex--;
|
return true;
|
||||||
Buf nextBuf = bufs[bufferIndex];
|
}
|
||||||
int length = Math.min(nextBuf.capacity(), bytesLeft());
|
if (bytesLeft() > 0) {
|
||||||
cursor = nextBuf.openReverseCursor(nextBuf.capacity() - 1, length);
|
nextCursor();
|
||||||
cursor.readByte();
|
cursor.readByte();
|
||||||
}
|
|
||||||
byteValue = cursor.getByte();
|
byteValue = cursor.getByte();
|
||||||
index--;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void nextCursor() {
|
||||||
|
bufferIndex--;
|
||||||
|
Buf nextBuf = bufs[bufferIndex];
|
||||||
|
int length = Math.min(nextBuf.capacity(), bytesLeft());
|
||||||
|
int offset = nextBuf.capacity() - 1;
|
||||||
|
cursor = nextBuf.openReverseCursor(offset, length);
|
||||||
|
initOffset = offset;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte getByte() {
|
public byte getByte() {
|
||||||
return byteValue;
|
return byteValue;
|
||||||
@ -472,12 +500,15 @@ final class CompositeBuf extends RcSupport<Buf, CompositeBuf> implements Buf {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int currentOffset() {
|
public int currentOffset() {
|
||||||
|
int currOff = cursor.currentOffset();
|
||||||
|
index -= initOffset - currOff;
|
||||||
|
initOffset = currOff;
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int bytesLeft() {
|
public int bytesLeft() {
|
||||||
return index - end;
|
return currentOffset() - end;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user