- 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;
+ }