#include <algorithm>
#include <cstring>
-#include <iostream>
+#include <sstream>
#include "bitboard.h"
#include "bitcount.h"
-#include "misc.h"
#include "rkiss.h"
CACHE_LINE_ALIGNMENT
}
}
-/// lsb()/msb() finds the least/most significant bit in a nonzero bitboard.
-/// pop_lsb() finds and clears the least significant bit in a nonzero bitboard.
+/// lsb()/msb() finds the least/most significant bit in a non-zero bitboard.
+/// pop_lsb() finds and clears the least significant bit in a non-zero bitboard.
#ifndef USE_BSFQ
#endif // ifndef USE_BSFQ
-/// Bitboards::print() prints a bitboard in an easily readable format to the
-/// standard output. This is sometimes useful for debugging.
+/// Bitboards::pretty() returns an ASCII representation of a bitboard to be
+/// printed to standard output. This is sometimes useful for debugging.
-void Bitboards::print(Bitboard b) {
+const std::string Bitboards::pretty(Bitboard b) {
- sync_cout;
+ std::ostringstream ss;
for (Rank rank = RANK_8; rank >= RANK_1; --rank)
{
- std::cout << "+---+---+---+---+---+---+---+---+" << '\n';
+ ss << "+---+---+---+---+---+---+---+---+" << '\n';
for (File file = FILE_A; file <= FILE_H; ++file)
- std::cout << "| " << (b & (file | rank) ? "X " : " ");
+ ss << "| " << (b & (file | rank) ? "X " : " ");
- std::cout << "|\n";
+ ss << "|\n";
}
- std::cout << "+---+---+---+---+---+---+---+---+" << sync_endl;
+ ss << "+---+---+---+---+---+---+---+---+";
+ return ss.str();
}
for (Color c = WHITE; c <= BLACK; ++c)
for (PieceType pt = PAWN; pt <= KING; ++pt)
for (Square s = SQ_A1; s <= SQ_H8; ++s)
- for (int k = 0; steps[pt][k]; ++k)
+ for (int i = 0; steps[pt][i]; ++i)
{
- Square to = s + Square(c == WHITE ? steps[pt][k] : -steps[pt][k]);
+ Square to = s + Square(c == WHITE ? steps[pt][i] : -steps[pt][i]);
if (is_ok(to) && square_distance(s, to) < 3)
StepAttacksBB[make_piece(c, pt)][s] |= to;
Bitboard pick_random(RKISS& rk, int booster) {
// Values s1 and s2 are used to rotate the candidate magic of a
- // quantity known to be the optimal to quickly find the magics.
+ // quantity known to be optimal to quickly find the magics.
int s1 = booster & 63, s2 = (booster >> 6) & 63;
Bitboard m = rk.rand<Bitboard>();