#include "position.h"
#include "psqtab.h"
#include "rkiss.h"
-#include "san.h"
#include "tt.h"
#include "ucioption.h"
/// It should be used when setting up a position on board.
/// You can't undo the move.
-void Position::do_setup_move(Move m, StateInfo& newSt) {
+void Position::do_setup_move(Move m) {
+
+ StateInfo newSt;
do_move(m, newSt);
// Update the number of plies played from the starting position
startPosPlyCounter++;
+
+ // Our StateInfo newSt is about going out of scope so copy
+ // its content inside pos before it disappears.
+ detach();
}
/// Position::do_move() makes a move, and saves all information necessary
assert(is_ok());
assert(move_is_ok(m));
+ assert(&newSt != st);
nodes++;
Key key = st->key;
Value npMaterial[2];
};
- if (&newSt != st)
- memcpy(&newSt, st, sizeof(ReducedStateInfo));
+ memcpy(&newSt, st, sizeof(ReducedStateInfo));
newSt.previous = st;
st = &newSt;
bool Position::is_mate() const {
MoveStack moves[MOVES_MAX];
- return is_check() && generate_moves(*this, moves) == moves;
+ return is_check() && generate<MV_LEGAL>(*this, moves) == moves;
}
do_null_move(st1);
// Then generate pseudo-legal moves that could give check
- last = generate<NON_CAPTURE_CHECKS>(*this, mlist);
- last = generate<CAPTURES>(*this, last);
+ last = generate<MV_NON_CAPTURE_CHECK>(*this, mlist);
+ last = generate<MV_CAPTURE>(*this, last);
// Loop through the moves, and see if one of them gives mate
Bitboard pinned = pinned_pieces(sideToMove);