}
+/// Position::setStartState() copies the content of the argument
+/// inside startState and makes st point to it. This is needed
+/// when the st pointee could become stale, as example because
+/// the caller is about to going out of scope.
+
+void Position::setStartState(const StateInfo& s) {
+
+ startState = s;
+ st = &startState;
+}
+
+
/// Position::clear() erases the position object to a pristine state, with an
/// empty board, white to move, and no castling rights.
bool square_is_weak(Square s, Color c) const;
// Doing and undoing moves
+ void setStartState(const StateInfo& st);
void do_move(Move m, StateInfo& st);
void undo_move(Move m);
void do_null_move(StateInfo& st);
//// Includes
////
+#include <cassert>
#include <iostream>
#include <sstream>
#include <string>
if (RootPosition.rule_50_counter() == 0)
RootPosition.reset_game_ply();
}
+ // Our StateInfo st is about going out of scope,
+ // so save its content before they disappear.
+ RootPosition.setStartState(st);
}
}
}
if (moveTime)
infinite = true; // HACK
+ assert(RootPosition.is_ok());
+
think(RootPosition, infinite, ponder, RootPosition.side_to_move(), time,
inc, movesToGo, depth, nodes, moveTime, searchMoves);
}