9 package javolution.util.internal.bitset;
11 import java.io.Serializable;
12 import java.util.Iterator;
45 int n =
MathLib.
min(this.bits.length, thatBits.length);
46 for (
int i = 0; i < n; i++) {
47 this.bits[i] &= thatBits[i];
49 for (
int i = n; i <
bits.length; i++) {
58 int n =
MathLib.
min(this.bits.length, thatBits.length);
59 for (
int i = 0; i < n; i++) {
60 this.bits[i] &= ~thatBits[i];
68 for (
int i = 0; i <
bits.length; i++) {
80 public void clear(
int bitIndex) {
81 int longIndex = bitIndex >> 6;
82 if (longIndex >=
bits.length)
84 bits[longIndex] &= ~(1L << bitIndex);
89 public void clear(
int fromIndex,
int toIndex) {
90 if ((fromIndex < 0) || (toIndex < fromIndex))
91 throw new IndexOutOfBoundsException();
92 int i = fromIndex >>> 6;
95 int j = toIndex >>> 6;
97 bits[i] &= ((1L << fromIndex) - 1) | (-1L << toIndex);
100 bits[i] &= (1L << fromIndex) - 1;
101 if (j <
bits.length) {
102 bits[j] &= -1L << toIndex;
104 for (
int k = i + 1; (k < j) && (k <
bits.length); k++) {
117 return get(((
Index)index).intValue());
121 public void flip(
int bitIndex) {
122 int i = bitIndex >> 6;
124 bits[i] ^= 1L << bitIndex;
129 public void flip(
int fromIndex,
int toIndex) {
130 if ((fromIndex < 0) || (toIndex < fromIndex))
131 throw new IndexOutOfBoundsException();
132 int i = fromIndex >>> 6;
133 int j = toIndex >>> 6;
136 bits[i] ^= (-1L << fromIndex) & ((1L << toIndex) - 1);
139 bits[i] ^= -1L << fromIndex;
140 bits[j] ^= (1L << toIndex) - 1;
141 for (
int k = i + 1; k < j; k++) {
148 public boolean get(
int bitIndex) {
149 int i = bitIndex >> 6;
150 return (i >=
bits.length) ? false : (
bits[i] & (1L << bitIndex)) != 0;
155 if (fromIndex < 0 || fromIndex > toIndex)
156 throw new IndexOutOfBoundsException();
161 bitSet.
clear(0, fromIndex);
169 int i = bitIndex >> 6;
170 if (i >=
bits.length) {
173 boolean previous = (
bits[i] & (1L << bitIndex)) != 0;
175 bits[i] |= 1L << bitIndex;
177 bits[i] &= ~(1L << bitIndex);
186 int i =
MathLib.
min(this.bits.length, thatBits.length);
188 if ((
bits[i] & thatBits[i]) != 0)
return true;
200 if (
bits.length == 0)
return 0;
206 int offset = fromIndex >> 6;
207 long mask = 1L << fromIndex;
208 while (offset <
bits.length) {
209 long h =
bits[offset];
211 if ((h & mask) == 0) {
return fromIndex; }
223 int offset = fromIndex >> 6;
224 long mask = 1L << fromIndex;
225 while (offset <
bits.length) {
226 long h =
bits[offset];
243 if (thatBits.length >
this.bits.length) {
246 for (
int i = thatBits.length; --i >= 0;) {
247 bits[i] |= thatBits[i];
254 int offset = fromIndex >> 6;
255 long mask = 1L << fromIndex;
256 while (offset >= 0) {
257 long h =
bits[offset];
272 int offset = fromIndex >> 6;
273 long mask = 1L << fromIndex;
274 while (offset >= 0) {
275 long h =
bits[offset];
289 public boolean remove(Object index) {
294 public void set(
int bitIndex) {
295 int i = bitIndex >> 6;
296 if (i >=
bits.length) {
299 bits[i] |= 1L << bitIndex;
303 public void set(
int bitIndex,
boolean value) {
312 public void set(
int fromIndex,
int toIndex) {
313 int i = fromIndex >>> 6;
314 int j = toIndex >>> 6;
317 bits[i] |= (-1L << fromIndex) & ((1L << toIndex) - 1);
320 bits[i] |= -1L << fromIndex;
321 bits[j] |= (1L << toIndex) - 1;
322 for (
int k = i + 1; k < j; k++) {
328 public void set(
int fromIndex,
int toIndex,
boolean value) {
330 set(fromIndex, toIndex);
332 clear(fromIndex, toIndex);
350 if (thatBits.length >
this.bits.length) {
353 for (
int i = thatBits.length; --i >= 0;) {
354 bits[i] ^= thatBits[i];
363 long[] tmp =
new long[newLength];
364 if (newLength >=
bits.length) {
365 System.arraycopy(
bits, 0, tmp, 0,
bits.length);
367 System.arraycopy(
bits, 0, tmp, 0, newLength);
377 while ((--n >= 0) && (
bits[n] == 0L)) {}