Subversion Repositories Games.Chess Giants

Rev

Rev 169 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 169 Rev 185
Line 4... Line 4...
4
  Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad
4
  Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad
5
  Copyright (C) 2015-2018 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad
5
  Copyright (C) 2015-2019 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad
6
 
6
 
7
  Stockfish is free software: you can redistribute it and/or modify
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
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
9
  the Free Software Foundation, either version 3 of the License, or
10
  (at your option) any later version.
10
  (at your option) any later version.
Line 27... Line 27...
27
#include "types.h"
27
#include "types.h"
28
 
28
 
29
namespace {
29
namespace {
30
 
30
 
31
  // There are 24 possible pawn squares: the first 4 files and ranks from 2 to 7
31
  // There are 24 possible pawn squares: the first 4 files and ranks from 2 to 7
32
  const unsigned MAX_INDEX = 2*24*64*64; // stm * psq * wksq * bksq = 196608
32
  constexpr unsigned MAX_INDEX = 2*24*64*64; // stm * psq * wksq * bksq = 196608
33
 
33
 
34
  // Each uint32_t stores results of 32 positions, one per bit
34
  // Each uint32_t stores results of 32 positions, one per bit
35
  uint32_t KPKBitbase[MAX_INDEX / 32];
35
  uint32_t KPKBitbase[MAX_INDEX / 32];
36
 
36
 
37
  // A KPK bitbase index is an integer in [0, IndexMax] range
37
  // A KPK bitbase index is an integer in [0, IndexMax] range
Line 150... Line 150...
150
    // Black to move: If one move leads to a position classified as DRAW, the result
150
    // Black to move: If one move leads to a position classified as DRAW, the result
151
    // of the current position is DRAW. If all moves lead to positions classified
151
    // of the current position is DRAW. If all moves lead to positions classified
152
    // as WIN, the position is classified as WIN, otherwise the current position is
152
    // as WIN, the position is classified as WIN, otherwise the current position is
153
    // classified as UNKNOWN.
153
    // classified as UNKNOWN.
154
 
154
 
155
    const Color  Them = (Us == WHITE ? BLACK : WHITE);
155
    constexpr Color  Them = (Us == WHITE ? BLACK : WHITE);
156
    const Result Good = (Us == WHITE ? WIN   : DRAW);
156
    constexpr Result Good = (Us == WHITE ? WIN   : DRAW);
157
    const Result Bad  = (Us == WHITE ? DRAW  : WIN);
157
    constexpr Result Bad  = (Us == WHITE ? DRAW  : WIN);
158
 
158
 
159
    Result r = INVALID;
159
    Result r = INVALID;
160
    Bitboard b = PseudoAttacks[KING][ksq[Us]];
160
    Bitboard b = PseudoAttacks[KING][ksq[Us]];
161
 
161
 
162
    while (b)
162
    while (b)