return false; return false; return false; return false; return false; { } { #endif } { } osl:: { } { } if (pieces.any()) { pieces &= ~ppieces; if (pieces.any()) } } const osl::Piece osl:: { } } } } } { return false; } return false; } { return; } { } { } { } } } { } oldPiece, num, oldPtypeO, newPtypeO, pin_or_open_backup, king_mobility_backup, promoted_backup, effected_mask_backup, effected_changed_mask_backup,king8infos_backup,mobilityTable); } } void osl::NumEffectState:: { Piece oldPiece; CArray pin_or_open_backup; KingMobility king_mobility_backup; PieceMask promoted_backup; CArray effected_mask_backup; CArray effected_changed_mask_backup; CArray king8infos_backup; mobility::MobilityTable mobilityTable; } else{ capturePtypeO, newPtypeO, num0, num1, num1Index,num1Mask, pin_or_open_backup, king_mobility_backup, promoted_backup, effected_mask_backup, effected_changed_mask_backup,king8infos_backup,mobilityTable); } clearPawn(turn(),from); } void osl::NumEffectState:: { Piece oldPiece; CArray pin_or_open_backup; KingMobility king_mobility_backup; CArray effected_mask_backup; CArray effected_changed_mask_backup; CArray king8infos_backup; mobility::MobilityTable mobilityTable; if(turn()==BLACK){ } else{ pin_or_open_backup, king_mobility_backup, effected_mask_backup, effected_changed_mask_backup,king8infos_backup,mobilityTable); } } template void osl::NumEffectState:: { } { Direction lastD=UL; } else else { } } void osl::NumEffectState:: { effects.effectedNumTable[num].clear(); } template void osl::NumEffectState:: { mobility_backup = effects.mobilityTable; pin_or_open_backup = pin_or_open; king_mobility_backup = king_mobility; effected_mask_backup = effects.effected_mask; effected_changed_mask_backup = effects.effected_changed_mask; #endif setPieceOf(num,newPiece); effects.clearChangedEffects(); effects.clearEffectedChanged(); effects.template doBlockAt(*this,to,num); setBoard(to,newPiece); { Direction lastD=UL; recalcPinOpen(to,lastD,P); } { Direction lastD=UL; recalcPinOpen(to,lastD,alt(P)); } if(hasEffectAt(BLACK,to)) effects.effected_mask[BLACK].set(num); else effects.effected_mask[BLACK].reset(num); effects.effected_mask[WHITE].set(num); else effects.effected_mask[WHITE].reset(num); effects.effected_changed_mask[BLACK].set(num); effects.effected_changed_mask[WHITE].set(num); { BoardMask changed=changedEffects(BLACK)|changedEffects(WHITE); changed.set(to); if(changed.anyInRange(Board_Mask_Table3x3.mask(kingSquare())) || pin_or_open[BLACK]!=pin_or_open_backup[BLACK]) makeKing8Info(); if(changed.anyInRange(Board_Mask_Table3x3.mask(kingSquare())) || pin_or_open[WHITE]!=pin_or_open_backup[WHITE]) makeKing8Info(); } } template void osl::NumEffectState:: { standMask(P).xorMask(numIndex,numMask); pieces_onboard[P].xorMask(numIndex,numMask); setBoard(to,Piece::EMPTY()); setPieceOf(num,oldPiece); effects.effectedNumTable[num].clear(); effects.invalidateChangedEffects(); pin_or_open = pin_or_open_backup; king_mobility = king_mobility_backup; effects.effected_mask = effected_mask_backup; effects.effected_changed_mask = effected_changed_mask_backup; effects.mobilityTable = mobility_backup; king8infos = king8infos_backup; } template void osl::NumEffectState:: { mobility_backup = effects.mobilityTable; pin_or_open_backup = pin_or_open; king_mobility_backup = king_mobility; effected_mask_backup = effects.effected_mask; effected_changed_mask_backup = effects.effected_changed_mask; king8infos_backup = king8infos; oldPiece=pieceAt(from); Piece newPiece=oldPiece.promoteWithMask(promoteMask); newPiece+=(to-from); oldPtypeO=oldPiece.ptypeO(); new_ptypeo=newPiece.ptypeO(); effects.clearChangedEffects(); effects.clearEffectedChanged(); setBoard(from,Piece::EMPTY()); setBoard(to,newPiece); if (oldPtypeO == newPtypeO(P,KING)) makePinOpen(P); else { Direction lastD=UL; recalcPinOpen(from,lastD,P); recalcPinOpen(to,lastD,P); } { Direction lastD=UL; recalcPinOpen(from,lastD,alt(P)); recalcPinOpen(to,lastD,alt(P)); } promoted_backup = promoted; if (promoteMask) if(hasEffectAt(BLACK,to)) else if(hasEffectAt(WHITE,to)) else { BoardMask changed=changedEffects(BLACK)|changedEffects(WHITE); changed.set(from); changed.set(to); if(changed.anyInRange(Board_Mask_Table3x3.mask(kingSquare())) || pin_or_open[BLACK]!=pin_or_open_backup[BLACK]) makeKing8Info(); if(changed.anyInRange(Board_Mask_Table3x3.mask(kingSquare())) || pin_or_open[WHITE]!=pin_or_open_backup[WHITE]) makeKing8Info(); } } template void osl::NumEffectState:: { standMask(P).xorMask(num1Index,num1Mask); pieces_onboard[alt(P)].xorMask(num1Index,num1Mask); setBoard(from,oldPiece); effects.invalidateChangedEffects(); pin_or_open = pin_or_open_backup; king_mobility = king_mobility_backup; promoted = promoted_backup; effects.effected_mask = effected_mask_backup; effects.effected_changed_mask = effected_changed_mask_backup; effects.mobilityTable = mobility_backup; king8infos = king8infos_backup; } { { return false; } { if (showError) { { } } } } } return false; } #ifdef ALLOW_KING_ABSENCE #endif } #endif if (showError) return false; } } } } } #endif { for (int i=0; i&, KingMobility&, PieceMask&, CArray&, CArray&, CArray&, MobilityTable&); template void NumEffectState:: template void NumEffectState:: PtypeO&, PtypeO&, PtypeO&, int&, int&, int&, mask_t&, CArray&, KingMobility&, PieceMask&, CArray&, CArray&, CArray&, MobilityTable&); template void NumEffectState:: template void NumEffectState:: int&, mask_t&, CArray&, KingMobility&, CArray&, CArray&, CArray&, MobilityTable&); template void NumEffectState:: template void NumEffectState:: PtypeO, int, int, int, mask_t, const CArray&, const KingMobility&, const PieceMask&, const CArray&, const CArray&, const CArray&, const MobilityTable&); template void NumEffectState:: template void NumEffectState:: const CArray&, const KingMobility&, const CArray&, template Piece #endif }