2 * Copyright (C) 2014, United States Government, as represented by the
3 * Administrator of the National Aeronautics and Space Administration.
6 * The Java Pathfinder core (jpf-core) platform is licensed under the
7 * Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0.
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
19 package gov.nasa.jpf.util;
23 * a fixed size BitSet with 1024 bits.
25 * The main motivation for this class is to minimize memory size while maximizing
26 * performance and keeping a java.util.BitSet compatible interface. The only
27 * deviation from the standard BitSet is that we assume more cardinality() calls
28 * than set()/clear() calls, i.e. we want to cache this value
30 * Instances of this class do not allocate any additional memory, we keep all
31 * data in builtin type fields
33 public class BitSet1024 extends AbstractFixedBitSet {
35 public static final int INDEX_MASK = 0xfffffc00;
37 long l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15;
43 public BitSet1024 (int i){
47 public BitSet1024 (int... idx){
53 private final int computeCardinality (){
54 int n= Long.bitCount(l0);
55 n += Long.bitCount(l1);
56 n += Long.bitCount(l2);
57 n += Long.bitCount(l3);
58 n += Long.bitCount(l4);
59 n += Long.bitCount(l5);
60 n += Long.bitCount(l6);
61 n += Long.bitCount(l7);
62 n += Long.bitCount(l8);
63 n += Long.bitCount(l9);
64 n += Long.bitCount(l10);
65 n += Long.bitCount(l11);
66 n += Long.bitCount(l12);
67 n += Long.bitCount(l13);
68 n += Long.bitCount(l14);
69 n += Long.bitCount(l15);
73 //--- public interface (much like java.util.BitSet)
76 public void set (int i){
77 if ((i & INDEX_MASK) == 0) {
78 long bitPattern = (1L << i);
82 if ((l0 & bitPattern) == 0L) {
88 if ((l1 & bitPattern) == 0L) {
94 if ((l2 & bitPattern) == 0L) {
100 if ((l3 & bitPattern) == 0L) {
106 if ((l4 & bitPattern) == 0L) {
112 if ((l5 & bitPattern) == 0L) {
118 if ((l6 & bitPattern) == 0L) {
124 if ((l7 & bitPattern) == 0L) {
130 if ((l8 & bitPattern) == 0L) {
136 if ((l9 & bitPattern) == 0L) {
142 if ((l10 & bitPattern) == 0L) {
148 if ((l11 & bitPattern) == 0L) {
154 if ((l12 & bitPattern) == 0L) {
160 if ((l13 & bitPattern) == 0L) {
166 if ((l14 & bitPattern) == 0L) {
172 if ((l15 & bitPattern) == 0L) {
178 throw new IndexOutOfBoundsException("BitSet1024 index out of range: " + i);
183 public void clear (int i){
184 if ((i & INDEX_MASK) == 0) {
185 long bitPattern = (1L << i);
189 if ((l0 & bitPattern) != 0L) {
195 if ((l1 & bitPattern) != 0L) {
201 if ((l2 & bitPattern) != 0L) {
207 if ((l3 & bitPattern) != 0L) {
212 if ((l4 & bitPattern) != 0L) {
218 if ((l5 & bitPattern) != 0L) {
224 if ((l6 & bitPattern) != 0L) {
230 if ((l7 & bitPattern) != 0L) {
236 if ((l8 & bitPattern) != 0L) {
242 if ((l9 & bitPattern) != 0L) {
248 if ((l10 & bitPattern) != 0L) {
254 if ((l11 & bitPattern) != 0L) {
260 if ((l12 & bitPattern) != 0L) {
266 if ((l13 & bitPattern) != 0L) {
272 if ((l14 & bitPattern) != 0L) {
278 if ((l15 & bitPattern) != 0L) {
284 throw new IndexOutOfBoundsException("BitSet1024 index out of range: " + i);
289 public boolean get (int i){
290 if ((i & INDEX_MASK) == 0) {
291 long bitPattern = (1L << i);
295 return ((l0 & bitPattern) != 0);
297 return ((l1 & bitPattern) != 0);
299 return ((l2 & bitPattern) != 0);
301 return ((l3 & bitPattern) != 0);
303 return ((l4 & bitPattern) != 0);
305 return ((l5 & bitPattern) != 0);
307 return ((l6 & bitPattern) != 0);
309 return ((l7 & bitPattern) != 0);
311 return ((l8 & bitPattern) != 0);
313 return ((l9 & bitPattern) != 0);
315 return ((l10 & bitPattern) != 0);
317 return ((l11 & bitPattern) != 0);
319 return ((l12 & bitPattern) != 0);
321 return ((l13 & bitPattern) != 0);
323 return ((l14 & bitPattern) != 0);
325 return ((l15 & bitPattern) != 0);
329 throw new IndexOutOfBoundsException("BitSet1024 index out of range: " + i);
338 * number of bits we can store
341 public int capacity() {
346 * index of highest set bit + 1
349 public int length() {
351 return 1024 - Long.numberOfLeadingZeros(l15);
352 } else if (l14 != 0) {
353 return 960 - Long.numberOfLeadingZeros(l14);
354 } else if (l13 != 0) {
355 return 896 - Long.numberOfLeadingZeros(l13);
356 } else if (l12 != 0) {
357 return 832 - Long.numberOfLeadingZeros(l12);
358 } else if (l11 != 0) {
359 return 768 - Long.numberOfLeadingZeros(l11);
360 } else if (l10 != 0) {
361 return 704 - Long.numberOfLeadingZeros(l10);
362 } else if (l9 != 0) {
363 return 640 - Long.numberOfLeadingZeros(l9);
364 } else if (l8 != 0) {
365 return 576 - Long.numberOfLeadingZeros(l8);
366 } else if (l7 != 0) {
367 return 512 - Long.numberOfLeadingZeros(l7);
368 } else if (l6 != 0) {
369 return 448 - Long.numberOfLeadingZeros(l6);
370 } else if (l5 != 0) {
371 return 384 - Long.numberOfLeadingZeros(l5);
372 } else if (l4 != 0) {
373 return 320 - Long.numberOfLeadingZeros(l4);
375 return 256 - Long.numberOfLeadingZeros(l3);
377 return 192 - Long.numberOfLeadingZeros(l2);
379 return 128 - Long.numberOfLeadingZeros(l1);
381 return 64 - Long.numberOfLeadingZeros(l0);
388 public void clear() {
389 l0 = l1 = l2 = l3 = l4 = l5 = l6 = l7
390 = l8 = l9= l10 = l11 = l12 = l13 = l14
397 public int nextSetBit (int fromIdx){
398 if ((fromIdx & INDEX_MASK) == 0) {
400 int i0 = fromIdx & 0x3f;
401 switch (fromIdx >> 6){
403 if ((i=Long.numberOfTrailingZeros(l0 & (0xffffffffffffffffL << i0))) <64) return i;
404 if ((i=Long.numberOfTrailingZeros(l1)) <64) return i + 64;
405 if ((i=Long.numberOfTrailingZeros(l2)) <64) return i + 128;
406 if ((i=Long.numberOfTrailingZeros(l3)) <64) return i + 192;
407 if ((i=Long.numberOfTrailingZeros(l4)) <64) return i + 256;
408 if ((i=Long.numberOfTrailingZeros(l5)) <64) return i + 320;
409 if ((i=Long.numberOfTrailingZeros(l6)) <64) return i + 384;
410 if ((i=Long.numberOfTrailingZeros(l7)) <64) return i + 448;
411 if ((i=Long.numberOfTrailingZeros(l8)) <64) return i + 512;
412 if ((i=Long.numberOfTrailingZeros(l9)) <64) return i + 576;
413 if ((i=Long.numberOfTrailingZeros(l10)) <64) return i + 640;
414 if ((i=Long.numberOfTrailingZeros(l11)) <64) return i + 704;
415 if ((i=Long.numberOfTrailingZeros(l12)) <64) return i + 768;
416 if ((i=Long.numberOfTrailingZeros(l13)) <64) return i + 832;
417 if ((i=Long.numberOfTrailingZeros(l14)) <64) return i + 896;
418 if ((i=Long.numberOfTrailingZeros(l15)) <64) return i + 960;
421 if ((i=Long.numberOfTrailingZeros(l1 & (0xffffffffffffffffL << i0))) <64) return i + 64;
422 if ((i=Long.numberOfTrailingZeros(l2)) <64) return i + 128;
423 if ((i=Long.numberOfTrailingZeros(l3)) <64) return i + 192;
424 if ((i=Long.numberOfTrailingZeros(l4)) <64) return i + 256;
425 if ((i=Long.numberOfTrailingZeros(l5)) <64) return i + 320;
426 if ((i=Long.numberOfTrailingZeros(l6)) <64) return i + 384;
427 if ((i=Long.numberOfTrailingZeros(l7)) <64) return i + 448;
428 if ((i=Long.numberOfTrailingZeros(l8)) <64) return i + 512;
429 if ((i=Long.numberOfTrailingZeros(l9)) <64) return i + 576;
430 if ((i=Long.numberOfTrailingZeros(l10)) <64) return i + 640;
431 if ((i=Long.numberOfTrailingZeros(l11)) <64) return i + 704;
432 if ((i=Long.numberOfTrailingZeros(l12)) <64) return i + 768;
433 if ((i=Long.numberOfTrailingZeros(l13)) <64) return i + 832;
434 if ((i=Long.numberOfTrailingZeros(l14)) <64) return i + 896;
435 if ((i=Long.numberOfTrailingZeros(l15)) <64) return i + 960;
438 if ((i=Long.numberOfTrailingZeros(l2 & (0xffffffffffffffffL << i0))) <64) return i + 128;
439 if ((i=Long.numberOfTrailingZeros(l3)) <64) return i + 192;
440 if ((i=Long.numberOfTrailingZeros(l4)) <64) return i + 256;
441 if ((i=Long.numberOfTrailingZeros(l5)) <64) return i + 320;
442 if ((i=Long.numberOfTrailingZeros(l6)) <64) return i + 384;
443 if ((i=Long.numberOfTrailingZeros(l7)) <64) return i + 448;
444 if ((i=Long.numberOfTrailingZeros(l8)) <64) return i + 512;
445 if ((i=Long.numberOfTrailingZeros(l9)) <64) return i + 576;
446 if ((i=Long.numberOfTrailingZeros(l10)) <64) return i + 640;
447 if ((i=Long.numberOfTrailingZeros(l11)) <64) return i + 704;
448 if ((i=Long.numberOfTrailingZeros(l12)) <64) return i + 768;
449 if ((i=Long.numberOfTrailingZeros(l13)) <64) return i + 832;
450 if ((i=Long.numberOfTrailingZeros(l14)) <64) return i + 896;
451 if ((i=Long.numberOfTrailingZeros(l15)) <64) return i + 960;
454 if ((i=Long.numberOfTrailingZeros(l3 & (0xffffffffffffffffL << i0))) <64) return i + 192;
455 if ((i=Long.numberOfTrailingZeros(l4)) <64) return i + 256;
456 if ((i=Long.numberOfTrailingZeros(l5)) <64) return i + 320;
457 if ((i=Long.numberOfTrailingZeros(l6)) <64) return i + 384;
458 if ((i=Long.numberOfTrailingZeros(l7)) <64) return i + 448;
459 if ((i=Long.numberOfTrailingZeros(l8)) <64) return i + 512;
460 if ((i=Long.numberOfTrailingZeros(l9)) <64) return i + 576;
461 if ((i=Long.numberOfTrailingZeros(l10)) <64) return i + 640;
462 if ((i=Long.numberOfTrailingZeros(l11)) <64) return i + 704;
463 if ((i=Long.numberOfTrailingZeros(l12)) <64) return i + 768;
464 if ((i=Long.numberOfTrailingZeros(l13)) <64) return i + 832;
465 if ((i=Long.numberOfTrailingZeros(l14)) <64) return i + 896;
466 if ((i=Long.numberOfTrailingZeros(l15)) <64) return i + 960;
469 if ((i=Long.numberOfTrailingZeros(l4 & (0xffffffffffffffffL << i0))) <64) return i + 256;
470 if ((i=Long.numberOfTrailingZeros(l5)) <64) return i + 320;
471 if ((i=Long.numberOfTrailingZeros(l6)) <64) return i + 384;
472 if ((i=Long.numberOfTrailingZeros(l7)) <64) return i + 448;
473 if ((i=Long.numberOfTrailingZeros(l8)) <64) return i + 512;
474 if ((i=Long.numberOfTrailingZeros(l9)) <64) return i + 576;
475 if ((i=Long.numberOfTrailingZeros(l10)) <64) return i + 640;
476 if ((i=Long.numberOfTrailingZeros(l11)) <64) return i + 704;
477 if ((i=Long.numberOfTrailingZeros(l12)) <64) return i + 768;
478 if ((i=Long.numberOfTrailingZeros(l13)) <64) return i + 832;
479 if ((i=Long.numberOfTrailingZeros(l14)) <64) return i + 896;
480 if ((i=Long.numberOfTrailingZeros(l15)) <64) return i + 960;
483 if ((i=Long.numberOfTrailingZeros(l5 & (0xffffffffffffffffL << i0))) <64) return i + 320;
484 if ((i=Long.numberOfTrailingZeros(l6)) <64) return i + 384;
485 if ((i=Long.numberOfTrailingZeros(l7)) <64) return i + 448;
486 if ((i=Long.numberOfTrailingZeros(l8)) <64) return i + 512;
487 if ((i=Long.numberOfTrailingZeros(l9)) <64) return i + 576;
488 if ((i=Long.numberOfTrailingZeros(l10)) <64) return i + 640;
489 if ((i=Long.numberOfTrailingZeros(l11)) <64) return i + 704;
490 if ((i=Long.numberOfTrailingZeros(l12)) <64) return i + 768;
491 if ((i=Long.numberOfTrailingZeros(l13)) <64) return i + 832;
492 if ((i=Long.numberOfTrailingZeros(l14)) <64) return i + 896;
493 if ((i=Long.numberOfTrailingZeros(l15)) <64) return i + 960;
496 if ((i=Long.numberOfTrailingZeros(l6 & (0xffffffffffffffffL << i0))) <64) return i + 384;
497 if ((i=Long.numberOfTrailingZeros(l7)) <64) return i + 448;
498 if ((i=Long.numberOfTrailingZeros(l8)) <64) return i + 512;
499 if ((i=Long.numberOfTrailingZeros(l9)) <64) return i + 576;
500 if ((i=Long.numberOfTrailingZeros(l10)) <64) return i + 640;
501 if ((i=Long.numberOfTrailingZeros(l11)) <64) return i + 704;
502 if ((i=Long.numberOfTrailingZeros(l12)) <64) return i + 768;
503 if ((i=Long.numberOfTrailingZeros(l13)) <64) return i + 832;
504 if ((i=Long.numberOfTrailingZeros(l14)) <64) return i + 896;
505 if ((i=Long.numberOfTrailingZeros(l15)) <64) return i + 960;
508 if ((i=Long.numberOfTrailingZeros(l7 & (0xffffffffffffffffL << i0))) <64) return i + 448;
509 if ((i=Long.numberOfTrailingZeros(l8)) <64) return i + 512;
510 if ((i=Long.numberOfTrailingZeros(l9)) <64) return i + 576;
511 if ((i=Long.numberOfTrailingZeros(l10)) <64) return i + 640;
512 if ((i=Long.numberOfTrailingZeros(l11)) <64) return i + 704;
513 if ((i=Long.numberOfTrailingZeros(l12)) <64) return i + 768;
514 if ((i=Long.numberOfTrailingZeros(l13)) <64) return i + 832;
515 if ((i=Long.numberOfTrailingZeros(l14)) <64) return i + 896;
516 if ((i=Long.numberOfTrailingZeros(l15)) <64) return i + 960;
519 if ((i=Long.numberOfTrailingZeros(l8 & (0xffffffffffffffffL << i0))) <64) return i + 512;
520 if ((i=Long.numberOfTrailingZeros(l9)) <64) return i + 576;
521 if ((i=Long.numberOfTrailingZeros(l10)) <64) return i + 640;
522 if ((i=Long.numberOfTrailingZeros(l11)) <64) return i + 704;
523 if ((i=Long.numberOfTrailingZeros(l12)) <64) return i + 768;
524 if ((i=Long.numberOfTrailingZeros(l13)) <64) return i + 832;
525 if ((i=Long.numberOfTrailingZeros(l14)) <64) return i + 896;
526 if ((i=Long.numberOfTrailingZeros(l15)) <64) return i + 960;
529 if ((i=Long.numberOfTrailingZeros(l9 & (0xffffffffffffffffL << i0))) <64) return i + 576;
530 if ((i=Long.numberOfTrailingZeros(l10)) <64) return i + 640;
531 if ((i=Long.numberOfTrailingZeros(l11)) <64) return i + 704;
532 if ((i=Long.numberOfTrailingZeros(l12)) <64) return i + 768;
533 if ((i=Long.numberOfTrailingZeros(l13)) <64) return i + 832;
534 if ((i=Long.numberOfTrailingZeros(l14)) <64) return i + 896;
535 if ((i=Long.numberOfTrailingZeros(l15)) <64) return i + 960;
538 if ((i=Long.numberOfTrailingZeros(l10 & (0xffffffffffffffffL << i0))) <64) return i + 640;
539 if ((i=Long.numberOfTrailingZeros(l11)) <64) return i + 704;
540 if ((i=Long.numberOfTrailingZeros(l12)) <64) return i + 768;
541 if ((i=Long.numberOfTrailingZeros(l13)) <64) return i + 832;
542 if ((i=Long.numberOfTrailingZeros(l14)) <64) return i + 896;
543 if ((i=Long.numberOfTrailingZeros(l15)) <64) return i + 960;
546 if ((i=Long.numberOfTrailingZeros(l11 & (0xffffffffffffffffL << i0))) <64) return i + 704;
547 if ((i=Long.numberOfTrailingZeros(l12)) <64) return i + 768;
548 if ((i=Long.numberOfTrailingZeros(l13)) <64) return i + 832;
549 if ((i=Long.numberOfTrailingZeros(l14)) <64) return i + 896;
550 if ((i=Long.numberOfTrailingZeros(l15)) <64) return i + 960;
553 if ((i=Long.numberOfTrailingZeros(l12 & (0xffffffffffffffffL << i0))) <64) return i + 768;
554 if ((i=Long.numberOfTrailingZeros(l13)) <64) return i + 832;
555 if ((i=Long.numberOfTrailingZeros(l14)) <64) return i + 896;
556 if ((i=Long.numberOfTrailingZeros(l15)) <64) return i + 960;
559 if ((i=Long.numberOfTrailingZeros(l13 & (0xffffffffffffffffL << i0))) <64) return i + 832;
560 if ((i=Long.numberOfTrailingZeros(l14)) <64) return i + 896;
561 if ((i=Long.numberOfTrailingZeros(l15)) <64) return i + 960;
564 if ((i=Long.numberOfTrailingZeros(l14 & (0xffffffffffffffffL << i0))) <64) return i + 896;
565 if ((i=Long.numberOfTrailingZeros(l15)) <64) return i + 960;
568 if ((i=Long.numberOfTrailingZeros(l15 & (0xffffffffffffffffL << i0))) <64) return i + 960;
578 public int nextClearBit (int fromIdx){
579 if ((fromIdx & INDEX_MASK) == 0) {
581 int i0 = fromIdx & 0x3f;
582 switch (fromIdx >> 6){
584 if ((i=Long.numberOfTrailingZeros(~l0 & (0xffffffffffffffffL << i0))) <64) return i;
585 if ((i=Long.numberOfTrailingZeros(~l1)) <64) return i + 64;
586 if ((i=Long.numberOfTrailingZeros(~l2)) <64) return i + 128;
587 if ((i=Long.numberOfTrailingZeros(~l3)) <64) return i + 192;
588 if ((i=Long.numberOfTrailingZeros(~l4)) <64) return i + 256;
589 if ((i=Long.numberOfTrailingZeros(~l5)) <64) return i + 320;
590 if ((i=Long.numberOfTrailingZeros(~l6)) <64) return i + 384;
591 if ((i=Long.numberOfTrailingZeros(~l7)) <64) return i + 448;
592 if ((i=Long.numberOfTrailingZeros(~l8)) <64) return i + 512;
593 if ((i=Long.numberOfTrailingZeros(~l9)) <64) return i + 576;
594 if ((i=Long.numberOfTrailingZeros(~l10)) <64) return i + 640;
595 if ((i=Long.numberOfTrailingZeros(~l11)) <64) return i + 704;
596 if ((i=Long.numberOfTrailingZeros(~l12)) <64) return i + 768;
597 if ((i=Long.numberOfTrailingZeros(~l13)) <64) return i + 832;
598 if ((i=Long.numberOfTrailingZeros(~l14)) <64) return i + 896;
599 if ((i=Long.numberOfTrailingZeros(~l15)) <64) return i + 960;
602 if ((i=Long.numberOfTrailingZeros(~l1 & (0xffffffffffffffffL << i0))) <64) return i + 64;
603 if ((i=Long.numberOfTrailingZeros(~l2)) <64) return i + 128;
604 if ((i=Long.numberOfTrailingZeros(~l3)) <64) return i + 192;
605 if ((i=Long.numberOfTrailingZeros(~l4)) <64) return i + 256;
606 if ((i=Long.numberOfTrailingZeros(~l5)) <64) return i + 320;
607 if ((i=Long.numberOfTrailingZeros(~l6)) <64) return i + 384;
608 if ((i=Long.numberOfTrailingZeros(~l7)) <64) return i + 448;
609 if ((i=Long.numberOfTrailingZeros(~l8)) <64) return i + 512;
610 if ((i=Long.numberOfTrailingZeros(~l9)) <64) return i + 576;
611 if ((i=Long.numberOfTrailingZeros(~l10)) <64) return i + 640;
612 if ((i=Long.numberOfTrailingZeros(~l11)) <64) return i + 704;
613 if ((i=Long.numberOfTrailingZeros(~l12)) <64) return i + 768;
614 if ((i=Long.numberOfTrailingZeros(~l13)) <64) return i + 832;
615 if ((i=Long.numberOfTrailingZeros(~l14)) <64) return i + 896;
616 if ((i=Long.numberOfTrailingZeros(~l15)) <64) return i + 960;
619 if ((i=Long.numberOfTrailingZeros(~l2 & (0xffffffffffffffffL << i0))) <64) return i + 128;
620 if ((i=Long.numberOfTrailingZeros(~l3)) <64) return i + 192;
621 if ((i=Long.numberOfTrailingZeros(~l4)) <64) return i + 256;
622 if ((i=Long.numberOfTrailingZeros(~l5)) <64) return i + 320;
623 if ((i=Long.numberOfTrailingZeros(~l6)) <64) return i + 384;
624 if ((i=Long.numberOfTrailingZeros(~l7)) <64) return i + 448;
625 if ((i=Long.numberOfTrailingZeros(~l8)) <64) return i + 512;
626 if ((i=Long.numberOfTrailingZeros(~l9)) <64) return i + 576;
627 if ((i=Long.numberOfTrailingZeros(~l10)) <64) return i + 640;
628 if ((i=Long.numberOfTrailingZeros(~l11)) <64) return i + 704;
629 if ((i=Long.numberOfTrailingZeros(~l12)) <64) return i + 768;
630 if ((i=Long.numberOfTrailingZeros(~l13)) <64) return i + 832;
631 if ((i=Long.numberOfTrailingZeros(~l14)) <64) return i + 896;
632 if ((i=Long.numberOfTrailingZeros(~l15)) <64) return i + 960;
635 if ((i=Long.numberOfTrailingZeros(~l3 & (0xffffffffffffffffL << i0))) <64) return i + 192;
636 if ((i=Long.numberOfTrailingZeros(~l4)) <64) return i + 256;
637 if ((i=Long.numberOfTrailingZeros(~l5)) <64) return i + 320;
638 if ((i=Long.numberOfTrailingZeros(~l6)) <64) return i + 384;
639 if ((i=Long.numberOfTrailingZeros(~l7)) <64) return i + 448;
640 if ((i=Long.numberOfTrailingZeros(~l8)) <64) return i + 512;
641 if ((i=Long.numberOfTrailingZeros(~l9)) <64) return i + 576;
642 if ((i=Long.numberOfTrailingZeros(~l10)) <64) return i + 640;
643 if ((i=Long.numberOfTrailingZeros(~l11)) <64) return i + 704;
644 if ((i=Long.numberOfTrailingZeros(~l12)) <64) return i + 768;
645 if ((i=Long.numberOfTrailingZeros(~l13)) <64) return i + 832;
646 if ((i=Long.numberOfTrailingZeros(~l14)) <64) return i + 896;
647 if ((i=Long.numberOfTrailingZeros(~l15)) <64) return i + 960;
650 if ((i=Long.numberOfTrailingZeros(~l4 & (0xffffffffffffffffL << i0))) <64) return i + 256;
651 if ((i=Long.numberOfTrailingZeros(~l5)) <64) return i + 320;
652 if ((i=Long.numberOfTrailingZeros(~l6)) <64) return i + 384;
653 if ((i=Long.numberOfTrailingZeros(~l7)) <64) return i + 448;
654 if ((i=Long.numberOfTrailingZeros(~l8)) <64) return i + 512;
655 if ((i=Long.numberOfTrailingZeros(~l9)) <64) return i + 576;
656 if ((i=Long.numberOfTrailingZeros(~l10)) <64) return i + 640;
657 if ((i=Long.numberOfTrailingZeros(~l11)) <64) return i + 704;
658 if ((i=Long.numberOfTrailingZeros(~l12)) <64) return i + 768;
659 if ((i=Long.numberOfTrailingZeros(~l13)) <64) return i + 832;
660 if ((i=Long.numberOfTrailingZeros(~l14)) <64) return i + 896;
661 if ((i=Long.numberOfTrailingZeros(~l15)) <64) return i + 960;
664 if ((i=Long.numberOfTrailingZeros(~l5 & (0xffffffffffffffffL << i0))) <64) return i + 320;
665 if ((i=Long.numberOfTrailingZeros(~l6)) <64) return i + 384;
666 if ((i=Long.numberOfTrailingZeros(~l7)) <64) return i + 448;
667 if ((i=Long.numberOfTrailingZeros(~l8)) <64) return i + 512;
668 if ((i=Long.numberOfTrailingZeros(~l9)) <64) return i + 576;
669 if ((i=Long.numberOfTrailingZeros(~l10)) <64) return i + 640;
670 if ((i=Long.numberOfTrailingZeros(~l11)) <64) return i + 704;
671 if ((i=Long.numberOfTrailingZeros(~l12)) <64) return i + 768;
672 if ((i=Long.numberOfTrailingZeros(~l13)) <64) return i + 832;
673 if ((i=Long.numberOfTrailingZeros(~l14)) <64) return i + 896;
674 if ((i=Long.numberOfTrailingZeros(~l15)) <64) return i + 960;
677 if ((i=Long.numberOfTrailingZeros(~l6 & (0xffffffffffffffffL << i0))) <64) return i + 384;
678 if ((i=Long.numberOfTrailingZeros(~l7)) <64) return i + 448;
679 if ((i=Long.numberOfTrailingZeros(~l8)) <64) return i + 512;
680 if ((i=Long.numberOfTrailingZeros(~l9)) <64) return i + 576;
681 if ((i=Long.numberOfTrailingZeros(~l10)) <64) return i + 640;
682 if ((i=Long.numberOfTrailingZeros(~l11)) <64) return i + 704;
683 if ((i=Long.numberOfTrailingZeros(~l12)) <64) return i + 768;
684 if ((i=Long.numberOfTrailingZeros(~l13)) <64) return i + 832;
685 if ((i=Long.numberOfTrailingZeros(~l14)) <64) return i + 896;
686 if ((i=Long.numberOfTrailingZeros(~l15)) <64) return i + 960;
689 if ((i=Long.numberOfTrailingZeros(~l7 & (0xffffffffffffffffL << i0))) <64) return i + 448;
690 if ((i=Long.numberOfTrailingZeros(~l8)) <64) return i + 512;
691 if ((i=Long.numberOfTrailingZeros(~l9)) <64) return i + 576;
692 if ((i=Long.numberOfTrailingZeros(~l10)) <64) return i + 640;
693 if ((i=Long.numberOfTrailingZeros(~l11)) <64) return i + 704;
694 if ((i=Long.numberOfTrailingZeros(~l12)) <64) return i + 768;
695 if ((i=Long.numberOfTrailingZeros(~l13)) <64) return i + 832;
696 if ((i=Long.numberOfTrailingZeros(~l14)) <64) return i + 896;
697 if ((i=Long.numberOfTrailingZeros(~l15)) <64) return i + 960;
700 if ((i=Long.numberOfTrailingZeros(~l8 & (0xffffffffffffffffL << i0))) <64) return i + 512;
701 if ((i=Long.numberOfTrailingZeros(~l9)) <64) return i + 576;
702 if ((i=Long.numberOfTrailingZeros(~l10)) <64) return i + 640;
703 if ((i=Long.numberOfTrailingZeros(~l11)) <64) return i + 704;
704 if ((i=Long.numberOfTrailingZeros(~l12)) <64) return i + 768;
705 if ((i=Long.numberOfTrailingZeros(~l13)) <64) return i + 832;
706 if ((i=Long.numberOfTrailingZeros(~l14)) <64) return i + 896;
707 if ((i=Long.numberOfTrailingZeros(~l15)) <64) return i + 960;
710 if ((i=Long.numberOfTrailingZeros(~l9 & (0xffffffffffffffffL << i0))) <64) return i + 576;
711 if ((i=Long.numberOfTrailingZeros(~l10)) <64) return i + 640;
712 if ((i=Long.numberOfTrailingZeros(~l11)) <64) return i + 704;
713 if ((i=Long.numberOfTrailingZeros(~l12)) <64) return i + 768;
714 if ((i=Long.numberOfTrailingZeros(~l13)) <64) return i + 832;
715 if ((i=Long.numberOfTrailingZeros(~l14)) <64) return i + 896;
716 if ((i=Long.numberOfTrailingZeros(~l15)) <64) return i + 960;
719 if ((i=Long.numberOfTrailingZeros(~l10 & (0xffffffffffffffffL << i0))) <64) return i + 640;
720 if ((i=Long.numberOfTrailingZeros(~l11)) <64) return i + 704;
721 if ((i=Long.numberOfTrailingZeros(~l12)) <64) return i + 768;
722 if ((i=Long.numberOfTrailingZeros(~l13)) <64) return i + 832;
723 if ((i=Long.numberOfTrailingZeros(~l14)) <64) return i + 896;
724 if ((i=Long.numberOfTrailingZeros(~l15)) <64) return i + 960;
727 if ((i=Long.numberOfTrailingZeros(~l11 & (0xffffffffffffffffL << i0))) <64) return i + 704;
728 if ((i=Long.numberOfTrailingZeros(~l12)) <64) return i + 768;
729 if ((i=Long.numberOfTrailingZeros(~l13)) <64) return i + 832;
730 if ((i=Long.numberOfTrailingZeros(~l14)) <64) return i + 896;
731 if ((i=Long.numberOfTrailingZeros(~l15)) <64) return i + 960;
734 if ((i=Long.numberOfTrailingZeros(~l12 & (0xffffffffffffffffL << i0))) <64) return i + 768;
735 if ((i=Long.numberOfTrailingZeros(~l13)) <64) return i + 832;
736 if ((i=Long.numberOfTrailingZeros(~l14)) <64) return i + 896;
737 if ((i=Long.numberOfTrailingZeros(~l15)) <64) return i + 960;
740 if ((i=Long.numberOfTrailingZeros(~l13 & (0xffffffffffffffffL << i0))) <64) return i + 832;
741 if ((i=Long.numberOfTrailingZeros(~l14)) <64) return i + 896;
742 if ((i=Long.numberOfTrailingZeros(~l15)) <64) return i + 960;
745 if ((i=Long.numberOfTrailingZeros(~l14 & (0xffffffffffffffffL << i0))) <64) return i + 896;
746 if ((i=Long.numberOfTrailingZeros(~l15)) <64) return i + 960;
749 if ((i=Long.numberOfTrailingZeros(~l15 & (0xffffffffffffffffL << i0))) <64) return i + 960;
756 //throw new IndexOutOfBoundsException("BitSet256 index out of range: " + fromIdx);
761 public void and (BitSet1024 other){
779 cardinality = computeCardinality();
782 public void andNot (BitSet1024 other){
800 cardinality = computeCardinality();
803 public void or (BitSet1024 other){
821 cardinality = computeCardinality();
825 public boolean equals (Object o){
826 if (o instanceof BitSet1024){
827 BitSet1024 other = (BitSet1024)o;
828 if (l0 != other.l0) return false;
829 if (l1 != other.l1) return false;
830 if (l2 != other.l2) return false;
831 if (l3 != other.l3) return false;
832 if (l4 != other.l4) return false;
833 if (l5 != other.l5) return false;
834 if (l6 != other.l6) return false;
835 if (l7 != other.l7) return false;
836 if (l8 != other.l8) return false;
837 if (l9 != other.l9) return false;
838 if (l10 != other.l10) return false;
839 if (l11 != other.l11) return false;
840 if (l12 != other.l12) return false;
841 if (l13 != other.l13) return false;
842 if (l14 != other.l14) return false;
843 if (l15 != other.l15) return false;
847 // <2do> we could compare to a normal java.util.BitSet here
853 * answer the same hashCodes as java.util.BitSet
856 public int hashCode() {
873 return (int) ((hc >>32) ^ hc);
878 public void hash (HashData hd){