00001 #include "osl/move_generator/escape_.h"
00002 #include "osl/move_generator/escape_.tcc"
00003 #include "osl/move_generator/pieceOnBoard.tcc"
00004 #ifdef NDEBUG
00005 # include "osl/move_generator/capture_.tcc"
00006 #endif
00007 #include "osl/numEffectState.h"
00008
00009 void osl::GenerateEscapeKing::generate(const NumEffectState& state, MoveVector& out)
00010 {
00011 const size_t first = out.size();
00012 {
00013 typedef move_action::Store store_t;
00014 store_t store(out);
00015 const Piece king =state.kingPiece(state.turn());
00016 move_generator::GenerateEscapeOfTurn::generate(state, king, store);
00017 }
00018 MoveVector unpromote_moves;
00019 const size_t last = out.size();
00020 for (size_t i=first; i<last; ++i)
00021 {
00022 if(out[i].hasIgnoredUnpromote())
00023 unpromote_moves.push_back(out[i].unpromote());
00024 }
00025 out.push_back(unpromote_moves.begin(), unpromote_moves.end());
00026 }
00027
00028 void osl::GenerateEscapeKing::generateCheap(const NumEffectState& state, MoveVector& out)
00029 {
00030 if (state.turn() == BLACK)
00031 move_generator::GenerateEscape<BLACK>::generateCheapKingEscape(state, out);
00032 else
00033 move_generator::GenerateEscape<WHITE>::generateCheapKingEscape(state, out);
00034 }
00035
00036 namespace osl
00037 {
00038
00039 namespace move_generator
00040 {
00041 template class Escape<move_action::Store>;
00042 template void Escape<move_action::Store>::generate<BLACK,true,false>(const NumEffectState& state,Piece piece,move_action::Store& action);
00043 template void Escape<move_action::Store>::generate<WHITE,true,false>(const NumEffectState& state,Piece piece,move_action::Store& action);
00044 template void Escape<move_action::Store>::generateMoves<BLACK,true>(NumEffectState const&, Piece, Piece, move_action::Store&);
00045 template void Escape<move_action::Store>::generateMoves<WHITE,true>(NumEffectState const&, Piece, Piece, move_action::Store&);
00046 template void Escape<move_action::Store>::generateKingEscape<BLACK, false>(NumEffectState const&, move_action::Store&);
00047 template void Escape<move_action::Store>::generateKingEscape<WHITE, false>(NumEffectState const&, move_action::Store&);
00048 template void Escape<move_action::Store>::generateKingEscape<BLACK, true>(NumEffectState const&, move_action::Store&);
00049 template void Escape<move_action::Store>::generateKingEscape<WHITE, true>(NumEffectState const&, move_action::Store&);
00050 template void Escape<move_action::Store>::generateBlockingKing<BLACK,false>(const NumEffectState&,Piece,Square,move_action::Store&);
00051 template void Escape<move_action::Store>::generateBlockingKing<WHITE,false>(const NumEffectState&,Piece,Square,move_action::Store&);
00052 template void Escape<move_action::Store>::generateBlocking<BLACK,true>(const NumEffectState&,Piece,Square,Square,move_action::Store&);
00053 template void Escape<move_action::Store>::generateBlocking<WHITE,true>(const NumEffectState&,Piece,Square,Square,move_action::Store&);
00054 }
00055 }
00056
00057
00058
00059