mirror of
https://github.com/konsoletyper/teavm.git
synced 2024-11-27 01:30:35 +08:00
classlib: improve range checks for BitSet (#820)
This commit is contained in:
parent
82cd9d9cdf
commit
4e9d89b669
@ -33,10 +33,13 @@ public class TBitSet extends TObject implements TCloneable, TSerializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public TBitSet() {
|
public TBitSet() {
|
||||||
data = new int[0];
|
data = new int[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
public TBitSet(int nbits) {
|
public TBitSet(int nbits) {
|
||||||
|
if (nbits < 0) {
|
||||||
|
throw new NegativeArraySizeException();
|
||||||
|
}
|
||||||
data = new int[(nbits + TInteger.SIZE - 1) / TInteger.SIZE];
|
data = new int[(nbits + TInteger.SIZE - 1) / TInteger.SIZE];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,7 +126,7 @@ public class TBitSet extends TObject implements TCloneable, TSerializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void flip(int fromIndex, int toIndex) {
|
public void flip(int fromIndex, int toIndex) {
|
||||||
if (fromIndex > toIndex) {
|
if (fromIndex < 0 || fromIndex > toIndex) {
|
||||||
throw new TIndexOutOfBoundsException();
|
throw new TIndexOutOfBoundsException();
|
||||||
}
|
}
|
||||||
int fromDataIndex = fromIndex / 32;
|
int fromDataIndex = fromIndex / 32;
|
||||||
@ -149,6 +152,9 @@ public class TBitSet extends TObject implements TCloneable, TSerializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void set(int bitIndex) {
|
public void set(int bitIndex) {
|
||||||
|
if (bitIndex < 0) {
|
||||||
|
throw new IndexOutOfBoundsException();
|
||||||
|
}
|
||||||
int index = bitIndex / 32;
|
int index = bitIndex / 32;
|
||||||
if (bitIndex >= length) {
|
if (bitIndex >= length) {
|
||||||
ensureCapacity(index + 1);
|
ensureCapacity(index + 1);
|
||||||
@ -166,7 +172,7 @@ public class TBitSet extends TObject implements TCloneable, TSerializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void set(int fromIndex, int toIndex) {
|
public void set(int fromIndex, int toIndex) {
|
||||||
if (fromIndex > toIndex) {
|
if (fromIndex < 0 || fromIndex > toIndex) {
|
||||||
throw new TIndexOutOfBoundsException();
|
throw new TIndexOutOfBoundsException();
|
||||||
}
|
}
|
||||||
if (fromIndex == toIndex) {
|
if (fromIndex == toIndex) {
|
||||||
@ -210,6 +216,9 @@ public class TBitSet extends TObject implements TCloneable, TSerializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void clear(int bitIndex) {
|
public void clear(int bitIndex) {
|
||||||
|
if (bitIndex < 0) {
|
||||||
|
throw new IndexOutOfBoundsException();
|
||||||
|
}
|
||||||
int index = bitIndex / 32;
|
int index = bitIndex / 32;
|
||||||
if (index < data.length) {
|
if (index < data.length) {
|
||||||
data[index] &= TInteger.rotateLeft(0xFFFFFFFE, bitIndex % 32);
|
data[index] &= TInteger.rotateLeft(0xFFFFFFFE, bitIndex % 32);
|
||||||
@ -220,7 +229,7 @@ public class TBitSet extends TObject implements TCloneable, TSerializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void clear(int fromIndex, int toIndex) {
|
public void clear(int fromIndex, int toIndex) {
|
||||||
if (fromIndex > toIndex) {
|
if (fromIndex < 0 || fromIndex > toIndex) {
|
||||||
throw new TIndexOutOfBoundsException();
|
throw new TIndexOutOfBoundsException();
|
||||||
}
|
}
|
||||||
if (fromIndex >= length) {
|
if (fromIndex >= length) {
|
||||||
@ -252,12 +261,15 @@ public class TBitSet extends TObject implements TCloneable, TSerializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean get(int bitIndex) {
|
public boolean get(int bitIndex) {
|
||||||
|
if (bitIndex < 0) {
|
||||||
|
throw new IndexOutOfBoundsException();
|
||||||
|
}
|
||||||
int index = bitIndex / 32;
|
int index = bitIndex / 32;
|
||||||
return index < data.length && (data[index] & (1 << (bitIndex % 32))) != 0;
|
return index < data.length && (data[index] & (1 << (bitIndex % 32))) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TBitSet get(int fromIndex, int toIndex) {
|
public TBitSet get(int fromIndex, int toIndex) {
|
||||||
if (fromIndex > toIndex) {
|
if (fromIndex < 0 || fromIndex > toIndex) {
|
||||||
throw new TIndexOutOfBoundsException();
|
throw new TIndexOutOfBoundsException();
|
||||||
}
|
}
|
||||||
if (toIndex > length) {
|
if (toIndex > length) {
|
||||||
@ -292,6 +304,9 @@ public class TBitSet extends TObject implements TCloneable, TSerializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int nextSetBit(int fromIndex) {
|
public int nextSetBit(int fromIndex) {
|
||||||
|
if (fromIndex < 0) {
|
||||||
|
throw new IndexOutOfBoundsException();
|
||||||
|
}
|
||||||
if (fromIndex >= length) {
|
if (fromIndex >= length) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -311,6 +326,9 @@ public class TBitSet extends TObject implements TCloneable, TSerializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int nextClearBit(int fromIndex) {
|
public int nextClearBit(int fromIndex) {
|
||||||
|
if (fromIndex < 0) {
|
||||||
|
throw new IndexOutOfBoundsException();
|
||||||
|
}
|
||||||
if (fromIndex >= length) {
|
if (fromIndex >= length) {
|
||||||
return fromIndex;
|
return fromIndex;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user