escape_.cc
Go to the documentation of this file.
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/state/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   // explicit template instantiation
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>(osl::state::NumEffectState const&, osl::Piece, osl::Piece, osl::move_action::Store&);
00045     template void Escape<move_action::Store>::generateMoves<WHITE,true>(osl::state::NumEffectState const&, osl::Piece, osl::Piece, osl::move_action::Store&);
00046     template void Escape<move_action::Store>::generateKingEscape<BLACK, false>(osl::state::NumEffectState const&, osl::move_action::Store&);
00047     template void Escape<move_action::Store>::generateKingEscape<WHITE, false>(osl::state::NumEffectState const&, osl::move_action::Store&);
00048     template void Escape<move_action::Store>::generateKingEscape<BLACK, true>(osl::state::NumEffectState const&, osl::move_action::Store&);
00049     template void Escape<move_action::Store>::generateKingEscape<WHITE, true>(osl::state::NumEffectState const&, osl::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   } // namespace move_generator
00055 } // namespace osl
00056 // ;;; Local Variables:
00057 // ;;; mode:c++
00058 // ;;; c-basic-offset:2
00059 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines