diff --git a/src/eval-simple.h-move-to-temp-migration-bitboard__eval-simple.h b/src/eval-simple.h-move-to-temp-migration-bitboard__eval-simple.h new file mode 100644 index 0000000..3ca92ab --- /dev/null +++ b/src/eval-simple.h-move-to-temp-migration-bitboard__eval-simple.h @@ -0,0 +1,47 @@ +/* eval-simple.h - simple position evaluation. + * + * Copyright (C) 2021 Bruno Raoult ("br") + * Licensed under the GNU General Public License v3.0 or later. + * Some rights reserved. See COPYING. + * + * You should have received a copy of the GNU General Public License along with this + * program. If not, see . + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#ifndef EVAL_SIMPLE_H +#define EVAL_SIMPLE_H + + +#include "chessdefs.h" + +/* no queen on board */ +#define simple_no_queen(p, c) \ + ( !(p)->bb[c][BB_QUEEN] ) + +#define simple_one_queen(p, c) \ + ( popcount64((p)->bb[c][BB_QUEEN]) == 1 ) + +#define simple_no_rook(p, c) \ + (!(p)->bb[c][BB_ROOK]) + +#define simple_one_minor_piece(p, c) \ + (popcount64((p)->bb[c][BB_KNIGHT] | (p)->bb[c][BB_BISHOP]) == 1) + +#define simple_is_endgame(p) \ + ( (simple_no_queen(p, WHITE) || \ + (simple_one_queen(p, WHITE) && \ + simple_no_rook(p, WHITE) && \ + simple_one_minor_piece(p, WHITE))) \ + && \ + (simple_no_queen(p, BLACK) || \ + (simple_one_queen(p, BLACK) && \ + simple_no_rook(p, BLACK) && \ + simple_one_minor_piece(p, BLACK))) ) + +void eval_simple_init(void); +eval_t eval_simple(pos_t *pos); + +#endif /* EVAL_SIMPLE_H */