Line data Source code
1 : #pragma once
2 :
3 : #include "definition.hpp"
4 : #include "attack.hpp"
5 : #include "bitboard.hpp"
6 : #include "bitboardTools.hpp"
7 :
8 : template<Piece T, Color C>
9 : FORCE_FINLINE void evalMob(const Position &p, BitBoard pieceBBiterator, EvalScore &score, const BitBoard safe, const BitBoard occupancy, uint16_t & mobility) {
10 41492254 : BB::applyOn(pieceBBiterator, [&](const Square & k){
11 11254634 : const uint16_t mob = BB::countBit(BBTools::pfCoverage[T - 1](k, occupancy, C) & ~p.allPieces[C] & safe);
12 11254634 : mobility += mob;
13 12516043 : score += EvalConfig::MOB[T - 2][mob] * ColorSignHelper<C>();
14 : });
15 : }
16 :
17 : template<Color C>
18 : FORCE_FINLINE void evalMobQ(const Position &p, BitBoard pieceBBiterator, EvalScore &score, const BitBoard safe, const BitBoard occupancy, uint16_t & mobility) {
19 13249650 : BB::applyOn(pieceBBiterator, [&](const Square & k){
20 3460994 : uint16_t mob = BB::countBit(BBTools::coverage<P_wb>(k, occupancy, C) & ~p.allPieces[C] & safe);
21 3460994 : mobility += mob;
22 3909630 : score += EvalConfig::MOB[3][mob] * ColorSignHelper<C>();
23 3460994 : mob = BB::countBit(BBTools::coverage<P_wr>(k, occupancy, C) & ~p.allPieces[C] & safe);
24 3460994 : mobility += mob;
25 3909630 : score += EvalConfig::MOB[4][mob] * ColorSignHelper<C>();
26 : });
27 : }
28 :
29 : template<Color C>
30 : FORCE_FINLINE void evalMobK(const Position &p, BitBoard pieceBBiterator, EvalScore &score, const BitBoard safe, const BitBoard occupancy, uint16_t & mobility) {
31 18982986 : BB::applyOn(pieceBBiterator, [&](const Square & k){
32 6327662 : const uint16_t mob = BB::countBit(BBTools::coverage<P_wk>(k, occupancy, C) & ~p.allPieces[C] & safe);
33 6327662 : mobility += mob;
34 7124630 : score += EvalConfig::MOB[5][mob] * ColorSignHelper<C>();
35 : });
36 : }
|