introduce bitloops
This commit is contained in:
@@ -221,8 +221,8 @@ public record SwedishGenerator(Rng rng) {
|
||||
int clueCount() { return Long.bitCount(bo[0]) + Long.bitCount(bo[1]); }
|
||||
|
||||
void forEachSlot(SlotVisitor visitor) {
|
||||
for (var lo = bo[0]; lo != 0; lo &= lo - 1) processSlot(this, visitor, Long.numberOfTrailingZeros(lo));
|
||||
for (var hi = bo[1]; hi != 0; hi &= hi - 1) processSlot(this, visitor, 64 + Long.numberOfTrailingZeros(hi));
|
||||
for (var lo = bo[0]; lo != 0L; lo &= lo - 1) processSlot(this, visitor, Long.numberOfTrailingZeros(lo));
|
||||
for (var hi = bo[1]; hi != 0L; hi &= hi - 1) processSlot(this, visitor, 64 + Long.numberOfTrailingZeros(hi));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -384,9 +384,10 @@ public record SwedishGenerator(Rng rng) {
|
||||
return slots;
|
||||
}
|
||||
static boolean hasRoomForClue(Grid grid, long packed) {
|
||||
for (int n = (int) (packed >>> 56), k = 0; k < n && k < MAX_WORD_LENGTH; ) {
|
||||
if (grid.isClue((int) ((packed >>> (k * 7)) & 0x7F))) break;
|
||||
if (++k >= MIN_LEN) return true;
|
||||
for (int n = (int) (packed >>> 56) * 7, k = 0; k < n && k < MAX_WORD_LENGTH7; ) {
|
||||
if (grid.isClue((int) ((packed >>> k) & 0x7F))) break;
|
||||
k += 7;
|
||||
if (k >= MIN_LEN7) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user