-/// A template struct, used to generate MoveStats and CounterMoveHistoryStats:
-/// MoveStats store the move that refute a previous one.
-/// CounterMoveHistoryStats is like HistoryStats, but with two consecutive moves.
-/// Entries are stored using only the moving piece and destination square, hence
-/// two moves with different origin but same destination and piece will be
-/// considered identical.
-template<typename T>
-struct Stats {
- const T* operator[](Piece pc) const { return table[pc]; }
- T* operator[](Piece pc) { return table[pc]; }
- void clear() { std::memset(table, 0, sizeof(table)); }
- void fill(const int& v) { std::fill(&table[0][0], &table[PIECE_NB-1][SQUARE_NB-1]+1, v); };
- void update(Piece pc, Square to, Move m) { table[pc][to] = m; }
- void update(Piece pc, Square to, int v) {
+/// In stats table, D=0 means that the template parameter is not used
+enum StatsParams { NOT_USED = 0 };
+enum StatsType { NoCaptures, Captures };