/*
Stockfish, a UCI chess playing engine derived from Glaurung 2.1
Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
- Copyright (C) 2008-2014 Marco Costalba, Joona Kiiski, Tord Romstad
+ Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad
Stockfish is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "bitcount.h"
#include "pawns.h"
#include "position.h"
+#include "thread.h"
namespace {
namespace Pawns {
-/// init() initializes some tables used by evaluation. Instead of hard-coded
-/// tables, when makes sense, we prefer to calculate them with a formula to
-/// reduce independent parameters and to allow easier tuning and better insight.
+/// Pawns::init() initializes some tables needed by evaluation. Instead of using
+/// hard-coded tables, when makes sense, we prefer to calculate them with a formula
+/// to reduce independent parameters and to allow easier tuning and better insight.
void init()
{
}
-/// probe() takes a position as input, computes a Entry object, and returns a
-/// pointer to it. The result is also stored in a hash table, so we don't have
-/// to recompute everything when the same pawn structure occurs again.
+/// Pawns::probe() looks up the current position's pawns configuration in
+/// the pawns hash table. It returns a pointer to the Entry if the position
+/// is found. Otherwise a new Entry is computed and stored there, so we don't
+/// have to recompute all when the same pawns configuration occurs again.
-Entry* probe(const Position& pos, Table& entries) {
+Entry* probe(const Position& pos) {
Key key = pos.pawn_key();
- Entry* e = entries[key];
+ Entry* e = pos.this_thread()->pawnsTable[key];
if (e->key == key)
return e;
Bitboard pawns = pos.pieces(Us, PAWN);
if (pawns)
- while (!(DistanceRingsBB[ksq][minKingPawnDistance[Us]++] & pawns)) {}
+ while (!(DistanceRingBB[ksq][minKingPawnDistance[Us]++] & pawns)) {}
if (relative_rank(Us, ksq) > RANK_4)
return make_score(0, -16 * minKingPawnDistance[Us]);