X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmovepick.h;h=d49ea3b6a2a995ba0d2a9947265a5f766386293e;hb=2408243cf41ad7dfbd678c4d08756b17c342defc;hp=fe9e5a7c08ab31f1b58882354054515e49688dd9;hpb=148490f04cbd21afd9b01431ee7c947ac0bf78a8;p=stockfish
diff --git a/src/movepick.h b/src/movepick.h
index fe9e5a7c..d49ea3b6 100644
--- a/src/movepick.h
+++ b/src/movepick.h
@@ -17,11 +17,11 @@
along with this program. If not, see .
*/
-#if !defined MOVEPICK_H_INCLUDED
+#ifndef MOVEPICK_H_INCLUDED
#define MOVEPICK_H_INCLUDED
#include // For std::max
-#include // For memset
+#include // For std::memset
#include "movegen.h"
#include "position.h"
@@ -35,17 +35,25 @@
/// and is used for reduction and move ordering decisions. Gains records the move's
/// best evaluation gain from one ply to the next and is used for pruning decisions.
/// Countermoves store the move that refute a previous one. Entries are stored
-/// according only to moving piece and destination square, hence two moves with
+/// using only the moving piece and destination square, hence two moves with
/// different origin but same destination and piece will be considered identical.
template
struct Stats {
static const Value Max = Value(2000);
- const T* operator[](Piece p) const { return &table[p][0]; }
- void clear() { memset(table, 0, sizeof(table)); }
+ const T* operator[](Piece p) const { return table[p]; }
+ void clear() { std::memset(table, 0, sizeof(table)); }
+
+ void update(Piece p, Square to, Move m) {
+
+ if (m == table[p][to].first)
+ return;
+
+ table[p][to].second = table[p][to].first;
+ table[p][to].first = m;
+ }
- void update(Piece p, Square to, Move m) { table[p][to] = m; }
void update(Piece p, Square to, Value v) {
if (Gain)
@@ -61,7 +69,7 @@ private:
typedef Stats< true, Value> GainsStats;
typedef Stats HistoryStats;
-typedef Stats CountermovesStats;
+typedef Stats > CountermovesStats;
/// MovePicker class is used to pick one pseudo legal move at a time from the
@@ -78,8 +86,7 @@ class MovePicker {
public:
MovePicker(const Position&, Move, Depth, const HistoryStats&, Square);
MovePicker(const Position&, Move, const HistoryStats&, PieceType);
- MovePicker(const Position&, Move, Depth, const HistoryStats&,
- const CountermovesStats&, Search::Stack*, Value);
+ MovePicker(const Position&, Move, Depth, const HistoryStats&, Move*, Search::Stack*);
template Move next_move();
@@ -90,13 +97,14 @@ private:
const Position& pos;
const HistoryStats& history;
Search::Stack* ss;
+ Move* countermoves;
Depth depth;
Move ttMove;
- MoveStack killers[3];
+ ExtMove killers[4];
Square recaptureSquare;
- int captureThreshold, phase;
- MoveStack *cur, *end, *endQuiets, *endBadCaptures;
- MoveStack moves[MAX_MOVES];
+ int captureThreshold, stage;
+ ExtMove *cur, *end, *endQuiets, *endBadCaptures;
+ ExtMove moves[MAX_MOVES];
};
-#endif // !defined(MOVEPICK_H_INCLUDED)
+#endif // #ifndef MOVEPICK_H_INCLUDED