"Fossies" - the Fresh Open Source Software Archive

Member "stockfish-11-linux/src/pawns.h" (18 Jan 2020, 2366 Bytes) of package /linux/privat/stockfish-11-linux.zip:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. See also the last Fossies "Diffs" side-by-side code changes report for "pawns.h": 9-linux_vs_10-linux.

    1 /*
    2   Stockfish, a UCI chess playing engine derived from Glaurung 2.1
    3   Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
    4   Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad
    5   Copyright (C) 2015-2020 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad
    6 
    7   Stockfish is free software: you can redistribute it and/or modify
    8   it under the terms of the GNU General Public License as published by
    9   the Free Software Foundation, either version 3 of the License, or
   10   (at your option) any later version.
   11 
   12   Stockfish is distributed in the hope that it will be useful,
   13   but WITHOUT ANY WARRANTY; without even the implied warranty of
   14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   15   GNU General Public License for more details.
   16 
   17   You should have received a copy of the GNU General Public License
   18   along with this program.  If not, see <http://www.gnu.org/licenses/>.
   19 */
   20 
   21 #ifndef PAWNS_H_INCLUDED
   22 #define PAWNS_H_INCLUDED
   23 
   24 #include "misc.h"
   25 #include "position.h"
   26 #include "types.h"
   27 
   28 namespace Pawns {
   29 
   30 /// Pawns::Entry contains various information about a pawn structure. A lookup
   31 /// to the pawn hash table (performed by calling the probe function) returns a
   32 /// pointer to an Entry object.
   33 
   34 struct Entry {
   35 
   36   Score pawn_score(Color c) const { return scores[c]; }
   37   Bitboard pawn_attacks(Color c) const { return pawnAttacks[c]; }
   38   Bitboard passed_pawns(Color c) const { return passedPawns[c]; }
   39   Bitboard pawn_attacks_span(Color c) const { return pawnAttacksSpan[c]; }
   40   int passed_count() const { return popcount(passedPawns[WHITE] | passedPawns[BLACK]); }
   41 
   42   template<Color Us>
   43   Score king_safety(const Position& pos) {
   44     return  kingSquares[Us] == pos.square<KING>(Us) && castlingRights[Us] == pos.castling_rights(Us)
   45           ? kingSafety[Us] : (kingSafety[Us] = do_king_safety<Us>(pos));
   46   }
   47 
   48   template<Color Us>
   49   Score do_king_safety(const Position& pos);
   50 
   51   template<Color Us>
   52   Score evaluate_shelter(const Position& pos, Square ksq);
   53 
   54   Key key;
   55   Score scores[COLOR_NB];
   56   Bitboard passedPawns[COLOR_NB];
   57   Bitboard pawnAttacks[COLOR_NB];
   58   Bitboard pawnAttacksSpan[COLOR_NB];
   59   Square kingSquares[COLOR_NB];
   60   Score kingSafety[COLOR_NB];
   61   int castlingRights[COLOR_NB];
   62 };
   63 
   64 typedef HashTable<Entry, 131072> Table;
   65 
   66 Entry* probe(const Position& pos);
   67 
   68 } // namespace Pawns
   69 
   70 #endif // #ifndef PAWNS_H_INCLUDED