18 #include <boost/foreach.hpp>
30 State(
const SimpleState& initial_state)
31 : state(initial_state), counter(state.state())
33 move_history.reserve(1024);
57 stack->move_history.push(m);
61 stack->state.makeMove(m);
62 stack->eval_stack.push_back(eval);
69 if (!
state().isValidMove(m,
false))
73 if (PawnDropCheckmate_t::isMember(
state(), m))
76 stack->state.makeMove(m);
77 const bool unsafe_king =
state().inCheck(
alt(
state().turn()));
78 stack->state.unmakeMove();
91 stack->move_history.pop();
93 stack->state.unmakeMove();
94 stack->eval_stack.pop_back();
101 return stack->state.state();
107 return stack->move_history.size();
113 return stack->move_history;
119 return stack->counter.history();
125 return stack->counter;
131 return !
stack->state.empty();
144 return stack->state.initialState();
150 return stack->eval_stack;
162 const HashKey key(
state());
163 BOOST_FOREACH(
Move m, all) {
185 copy.copyFrom(
state());
187 if (! copy.inCheck()) {
189 || EnterKing::canDeclareWin(copy)) {
200 MoveVector& loss)
const
202 MoveVector win, draw;
204 normal_or_win_or_draw.push_back(win.begin(), win.end());
205 normal_or_win_or_draw.push_back(draw.begin(), draw.end());
213 return search::MoveStackRejections::probe<BLACK>
217 return search::MoveStackRejections::probe<WHITE>