14 for (
size_t i = 0; i < weights.
dimension(); ++i)
16 table[i] = weights.
value(i);
22 PieceMask black_mask, PieceMask white_mask)
const
25 while (black_mask.any())
27 const osl::Piece piece = state.pieceOf(black_mask.takeOneBit());
28 value += table[piece.
ptype()];
30 while (white_mask.any())
32 const osl::Piece piece = state.pieceOf(white_mask.takeOneBit());
33 value -= table[piece.
ptype()];
45 for (
int y = 0; y <= 16; ++y)
47 for (
int x = 0; x <= 8; ++x)
49 const int distance = x * 17 + y;
50 table[i][distance][stage] =
59 PieceMask black_mask, PieceMask white_mask)
62 const Square black_king = state.kingSquare<
BLACK>();
63 const Square white_king = state.kingSquare<
WHITE>();
64 while (black_mask.any())
66 const osl::Piece piece = state.pieceOf(black_mask.takeOneBit());
67 value += table[piece.
ptype()][index(black_king, piece)];
69 while (white_mask.any())
71 const osl::Piece piece = state.pieceOf(white_mask.takeOneBit());
72 value -= table[piece.
ptype()][index(white_king, piece)];
87 for (
size_t i = 0; i < ONE_DIM; ++i)
90 table[i][s] = weights.
value(i + ONE_DIM*s);
97 for (
size_t i = 0; i < ONE_DIM; ++i)
100 distance_table[i][s] = weights.
value(i + ONE_DIM*s);
107 for (
size_t i = 0; i < ONE_DIM; ++i)
110 pawn_table[i][s] = weights.
value(i + ONE_DIM*s);
114 template <osl::Player Defense>
119 const Square king = state.kingSquare<Defense>();
121 while (pin_mask.any())
123 const Piece piece = state.pieceOf(pin_mask.takeOneBit());
124 if (!state.hasEffectAt<Defense>(piece.
square()))
130 std::abs(king.
x() - piece.
square().
x()) - 1] +
132 if (pawnAttack<Defense>(state, piece))
137 else if (king.
x() == piece.
square().
x())
139 if (state.hasEffectByPtypeStrict<
LANCE>(
alt(Defense),
144 std::abs(king.
y() - piece.
square().
y()) - 1] +
151 std::abs(king.
y() - piece.
square().
y()) - 1] +
162 std::abs(king.
x() - piece.
square().
x()) - 1] +
164 if (pawnAttack<Defense>(state, piece))
173 std::abs(king.
x() - piece.
square().
x()) - 1] +
175 if (pawnAttack<Defense>(state, piece))
188 return evalOne<BLACK>(state) - evalOne<WHITE>(state);
198 for (
size_t i = 0; i < ONE_DIM; ++i)
201 table[i][s] = weights.
value(i + ONE_DIM*s);
205 template <osl::Player Defense>
210 const Square king = state.kingSquare<Defense>();
211 PieceMask open_mask = state.checkShadow(
alt(Defense));
212 while (open_mask.any())
214 const Piece piece = state.pieceOf(open_mask.takeOneBit());
219 else if (king.
x() == piece.
square().
x())
221 if (state.hasEffectByPtypeStrict<
LANCE>(
alt(Defense),
250 return evalOne<BLACK>(state) - evalOne<WHITE>(state);