Move isValid utility method to MathUtil
Motivation: In 4.1 and master the isValid utility has been moved to MathUtil. We should stay consistent for internal APIs. Modifications: - Move isValid to MathUtil Result: More consistent internal structure across branches.
This commit is contained in:
parent
e0b9d21520
commit
d353d5936b
@ -32,6 +32,7 @@ import java.nio.channels.GatheringByteChannel;
|
|||||||
import java.nio.channels.ScatteringByteChannel;
|
import java.nio.channels.ScatteringByteChannel;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
|
||||||
|
import static io.netty.util.internal.MathUtil.isOutOfBounds;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A skeletal implementation of a buffer.
|
* A skeletal implementation of a buffer.
|
||||||
@ -1137,7 +1138,7 @@ public abstract class AbstractByteBuf extends ByteBuf {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final void checkIndex0(int index, int fieldLength) {
|
final void checkIndex0(int index, int fieldLength) {
|
||||||
if (isInvalid(index, fieldLength, capacity())) {
|
if (isOutOfBounds(index, fieldLength, capacity())) {
|
||||||
throw new IndexOutOfBoundsException(String.format(
|
throw new IndexOutOfBoundsException(String.format(
|
||||||
"index: %d, length: %d (expected: range(0, %d))", index, fieldLength, capacity()));
|
"index: %d, length: %d (expected: range(0, %d))", index, fieldLength, capacity()));
|
||||||
}
|
}
|
||||||
@ -1145,7 +1146,7 @@ public abstract class AbstractByteBuf extends ByteBuf {
|
|||||||
|
|
||||||
protected final void checkSrcIndex(int index, int length, int srcIndex, int srcCapacity) {
|
protected final void checkSrcIndex(int index, int length, int srcIndex, int srcCapacity) {
|
||||||
checkIndex(index, length);
|
checkIndex(index, length);
|
||||||
if (isInvalid(srcIndex, length, srcCapacity)) {
|
if (isOutOfBounds(srcIndex, length, srcCapacity)) {
|
||||||
throw new IndexOutOfBoundsException(String.format(
|
throw new IndexOutOfBoundsException(String.format(
|
||||||
"srcIndex: %d, length: %d (expected: range(0, %d))", srcIndex, length, srcCapacity));
|
"srcIndex: %d, length: %d (expected: range(0, %d))", srcIndex, length, srcCapacity));
|
||||||
}
|
}
|
||||||
@ -1153,16 +1154,12 @@ public abstract class AbstractByteBuf extends ByteBuf {
|
|||||||
|
|
||||||
protected final void checkDstIndex(int index, int length, int dstIndex, int dstCapacity) {
|
protected final void checkDstIndex(int index, int length, int dstIndex, int dstCapacity) {
|
||||||
checkIndex(index, length);
|
checkIndex(index, length);
|
||||||
if (isInvalid(dstIndex, length, dstCapacity)) {
|
if (isOutOfBounds(dstIndex, length, dstCapacity)) {
|
||||||
throw new IndexOutOfBoundsException(String.format(
|
throw new IndexOutOfBoundsException(String.format(
|
||||||
"dstIndex: %d, length: %d (expected: range(0, %d))", dstIndex, length, dstCapacity));
|
"dstIndex: %d, length: %d (expected: range(0, %d))", dstIndex, length, dstCapacity));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean isInvalid(int index, int length, int capacity) {
|
|
||||||
return (index | length | (index + length) | (capacity - (index + length))) < 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Throws an {@link IndexOutOfBoundsException} if the current
|
* Throws an {@link IndexOutOfBoundsException} if the current
|
||||||
* {@linkplain #readableBytes() readable bytes} of this buffer is less
|
* {@linkplain #readableBytes() readable bytes} of this buffer is less
|
||||||
|
@ -23,6 +23,7 @@ import java.io.OutputStream;
|
|||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
|
|
||||||
|
import static io.netty.util.internal.MathUtil.isOutOfBounds;
|
||||||
import static io.netty.util.internal.ObjectUtil.checkNotNull;
|
import static io.netty.util.internal.ObjectUtil.checkNotNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -282,7 +283,7 @@ final class UnsafeByteBufUtil {
|
|||||||
static void getBytes(AbstractByteBuf buf, long addr, int index, ByteBuf dst, int dstIndex, int length) {
|
static void getBytes(AbstractByteBuf buf, long addr, int index, ByteBuf dst, int dstIndex, int length) {
|
||||||
buf.checkIndex(index, length);
|
buf.checkIndex(index, length);
|
||||||
checkNotNull(dst, "dst");
|
checkNotNull(dst, "dst");
|
||||||
if (AbstractByteBuf.isInvalid(dstIndex, length, dst.capacity())) {
|
if (isOutOfBounds(dstIndex, length, dst.capacity())) {
|
||||||
throw new IndexOutOfBoundsException("dstIndex: " + dstIndex);
|
throw new IndexOutOfBoundsException("dstIndex: " + dstIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -298,7 +299,7 @@ final class UnsafeByteBufUtil {
|
|||||||
static void getBytes(AbstractByteBuf buf, long addr, int index, byte[] dst, int dstIndex, int length) {
|
static void getBytes(AbstractByteBuf buf, long addr, int index, byte[] dst, int dstIndex, int length) {
|
||||||
buf.checkIndex(index, length);
|
buf.checkIndex(index, length);
|
||||||
checkNotNull(dst, "dst");
|
checkNotNull(dst, "dst");
|
||||||
if (AbstractByteBuf.isInvalid(dstIndex, length, dst.length)) {
|
if (isOutOfBounds(dstIndex, length, dst.length)) {
|
||||||
throw new IndexOutOfBoundsException("dstIndex: " + dstIndex);
|
throw new IndexOutOfBoundsException("dstIndex: " + dstIndex);
|
||||||
}
|
}
|
||||||
if (length != 0) {
|
if (length != 0) {
|
||||||
@ -328,7 +329,7 @@ final class UnsafeByteBufUtil {
|
|||||||
static void setBytes(AbstractByteBuf buf, long addr, int index, ByteBuf src, int srcIndex, int length) {
|
static void setBytes(AbstractByteBuf buf, long addr, int index, ByteBuf src, int srcIndex, int length) {
|
||||||
buf.checkIndex(index, length);
|
buf.checkIndex(index, length);
|
||||||
checkNotNull(src, "src");
|
checkNotNull(src, "src");
|
||||||
if (AbstractByteBuf.isInvalid(srcIndex, length, src.capacity())) {
|
if (isOutOfBounds(srcIndex, length, src.capacity())) {
|
||||||
throw new IndexOutOfBoundsException("srcIndex: " + srcIndex);
|
throw new IndexOutOfBoundsException("srcIndex: " + srcIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,4 +36,16 @@ public final class MathUtil {
|
|||||||
assert value > Integer.MIN_VALUE && value < 0x40000000;
|
assert value > Integer.MIN_VALUE && value < 0x40000000;
|
||||||
return 1 << (32 - Integer.numberOfLeadingZeros(value - 1));
|
return 1 << (32 - Integer.numberOfLeadingZeros(value - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the requested {@code index} and {@code length} will fit within {@code capacity}.
|
||||||
|
* @param index The starting index.
|
||||||
|
* @param length The length which will be utilized (starting from {@code index}).
|
||||||
|
* @param capacity The capacity that {@code index + length} is allowed to be within.
|
||||||
|
* @return {@code true} if the requested {@code index} and {@code length} will fit within {@code capacity}.
|
||||||
|
* {@code false} if this would result in an index out of bounds exception.
|
||||||
|
*/
|
||||||
|
public static boolean isOutOfBounds(int index, int length, int capacity) {
|
||||||
|
return (index | length | (index + length) | (capacity - (index + length))) < 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user