+ void update(Piece pc, Square to, Value v) {
+
+ if (abs(int(v)) >= 324)
+ return;
+
+ table[pc][to] -= table[pc][to] * abs(int(v)) / (CM ? 936 : 324);
+ table[pc][to] += int(v) * 32;
+ }
+
+private:
+ T table[PIECE_NB][SQUARE_NB];
+};
+
+typedef Stats<Move> MoveStats;
+typedef Stats<Value, false> HistoryStats;
+typedef Stats<Value, true> 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.
+
+class MovePicker {