+ const int denom = 936;
+
+ assert(abs(int(v)) <= denom); // Needed for stability.
+
+ table[pc][to] -= table[pc][to] * abs(int(v)) / denom;
+ table[pc][to] += int(v) * 32;
+ }
+
+private:
+ T table[PIECE_NB][SQUARE_NB];
+};
+
+typedef Stats<Move> MoveStats;
+typedef Stats<Value> CounterMoveStats;
+typedef Stats<CounterMoveStats> CounterMoveHistoryStats;
+
+
+/// MovePicker class is used to pick one pseudo legal move at a time from the
+/// current position. The most important method is next_move(), which returns a
+/// new pseudo legal move each time it is called, until there are no moves left,
+/// when MOVE_NONE is returned. In order to improve the efficiency of the alpha
+/// beta algorithm, MovePicker attempts to return the moves which are most likely
+/// to get a cut-off first.
+namespace Search { struct Stack; }
+
+class MovePicker {