00001 /* disproofPieces.cc 00002 */ 00003 #include "osl/checkmate/disproofPieces.h" 00004 #include "osl/checkmate/checkMoveList.h" 00005 #include "osl/checkmate/checkHashRecord.h" 00006 00007 const osl::PieceStand osl::checkmate:: 00008 DisproofPieces::attack(const CheckMoveList& moves, const SimpleState& state, 00009 const PieceStand max) 00010 { 00011 PieceStand result = PieceStand(); 00012 for (CheckMoveList::const_iterator p=moves.begin(); 00013 p!=moves.end(); ++p) 00014 { 00015 assert(p->record || p->flags.isSet(MoveFlags::NoPromote)); 00016 if (p->record) 00017 { 00018 if (! p->record->proofDisproof().isCheckmateFail()) 00019 { 00020 // ͤξ 00021 assert((p->record->proofDisproof() == ProofDisproof::NoEscape()) 00022 || p->flags.isSet(MoveFlags::NoPromote)); 00023 continue; 00024 } 00025 check_assert(p->record->hasDisproofPieces() 00026 || (p->record->dump(2),0)); 00027 result = result.max(p->record->disproofPieces()); 00028 } 00029 } 00030 ProofPiecesUtil::addMonopolizedPieces(state, alt(state.getTurn()), max, 00031 result); 00032 return result; 00033 } 00034 00035 /* ------------------------------------------------------------------------- */ 00036 // ;;; Local Variables: 00037 // ;;; mode:c++ 00038 // ;;; c-basic-offset:2 00039 // ;;; End: