| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
|
|
| #include "half_ka_v2_hm.h" |
|
|
| #include "../../position.h" |
|
|
| namespace Stockfish::Eval::NNUE::Features { |
|
|
| |
| template<Color Perspective> |
| inline IndexType HalfKAv2_hm::make_index(Square s, Piece pc, Square ksq) { |
| return IndexType((int(s) ^ OrientTBL[Perspective][ksq]) + PieceSquareIndex[Perspective][pc] + KingBuckets[Perspective][ksq]); |
| } |
|
|
| |
| template<Color Perspective> |
| void HalfKAv2_hm::append_active_indices( |
| const Position& pos, |
| IndexList& active |
| ) { |
| Square ksq = pos.square<KING>(Perspective); |
| Bitboard bb = pos.pieces(); |
| while (bb) |
| { |
| Square s = pop_lsb(bb); |
| active.push_back(make_index<Perspective>(s, pos.piece_on(s), ksq)); |
| } |
| } |
|
|
| |
| template void HalfKAv2_hm::append_active_indices<WHITE>(const Position& pos, IndexList& active); |
| template void HalfKAv2_hm::append_active_indices<BLACK>(const Position& pos, IndexList& active); |
|
|
| |
| template<Color Perspective> |
| void HalfKAv2_hm::append_changed_indices( |
| Square ksq, |
| const DirtyPiece& dp, |
| IndexList& removed, |
| IndexList& added |
| ) { |
| for (int i = 0; i < dp.dirty_num; ++i) { |
| if (dp.from[i] != SQ_NONE) |
| removed.push_back(make_index<Perspective>(dp.from[i], dp.piece[i], ksq)); |
| if (dp.to[i] != SQ_NONE) |
| added.push_back(make_index<Perspective>(dp.to[i], dp.piece[i], ksq)); |
| } |
| } |
|
|
| |
| template void HalfKAv2_hm::append_changed_indices<WHITE>(Square ksq, const DirtyPiece& dp, IndexList& removed, IndexList& added); |
| template void HalfKAv2_hm::append_changed_indices<BLACK>(Square ksq, const DirtyPiece& dp, IndexList& removed, IndexList& added); |
|
|
| int HalfKAv2_hm::update_cost(const StateInfo* st) { |
| return st->dirtyPiece.dirty_num; |
| } |
|
|
| int HalfKAv2_hm::refresh_cost(const Position& pos) { |
| return pos.count<ALL_PIECES>(); |
| } |
|
|
| bool HalfKAv2_hm::requires_refresh(const StateInfo* st, Color perspective) { |
| return st->dirtyPiece.piece[0] == make_piece(perspective, KING); |
| } |
|
|
| } |
|
|