@Override public void nextHashInTier() { if (dbh.getHash() < dbh.numHashes() - 1) dbh.next(); else if (numPieces[BLACK] == 0) { numPieces[BLACK] = numPieces[WHITE]; numPieces[WHITE] = 0; dbh.setNums(boardSize - getTier(), 0, getTier()); if (turn != 0) throw new RuntimeException("Tier finished"); else turn++; } else { dbh.setNums(boardSize - getTier(), ++numPieces[WHITE], --numPieces[BLACK]); } isChildrenValid = false; }
@Override public boolean hasNextHashInTier() { long currentHash = dbh.getHash(); return (currentHash != numHashesForTier(getTier()) - 1); }
private long getHash() { return offsetTable[getTier()][turn][numPieces[WHITE]] + dbh.getHash(); }