Author: Gerd Isenberg
Date: 07:32:44 10/30/01
Go up one level in this thread
Sample C++ code:
void CNode::MovePiece(unsigned int from, unsigned int to, unsigned int piece)
{
// occupied bitboard updates
m_Inc.m_OccuBBA1H8 ^= sBits[from].sA1H8 ^ sBits[to].sA1H8;
m_Inc.m_OccuBBH1A8 ^= sBits[from].sH1A8 ^ sBits[to].sH1A8;
m_Inc.m_OccuBB90 ^= sBits[from].sBt90 ^ sBits[to].sBt90;
m_Inc.m_PieceBB[ALLPIECES] ^= sBits[from].sBBit ^ sBits[to].sBBit;
// piece bitboard updates
m_Inc.m_PieceBB[piece>>1] ^= sBits[from].sBBit ^ sBits[to].sBBit;
m_Inc.m_ColorPieceBB[ColorOfPiece(piece)] ^= sBits[from].sBBit ^
sBits[to].sBBit;
// hash update
m_Inc.m_Pos.m_Hashval ^= sHashvtbl[piece][from] ^ sHashvtbl[piece][to];
}
...
__forceinline BitBoard FileAttacks(unsigned int sq) const
{
return sFileAtta[sq][(*(((BYTE*)&(m_Inc.m_OccuBB90))+File(sq)) >> 1) & 0x3f];
}
__forceinline BitBoard RankAttacks(unsigned int sq) const
{
return sRankAtta[sq][(*(((BYTE*)&(m_Inc.m_PieceBB[ALLPIECES]))+Rank(sq)) >> 1)
& 0x3f];
}
__forceinline BitBoard A1H8Attacks(unsigned int sq) const
{
return sA1H8Atta[sq][(*(((BYTE*)&(m_Inc.m_OccuBBA1H8))+((sq-Rank(sq)) & 7)) >>
1) & 0x3f]; // (file-rank) & 7
}
__forceinline BitBoard H1A8Attacks(unsigned int sq) const
{
return sH1A8Atta[sq][(*(((BYTE*)&(m_Inc.m_OccuBBH1A8))+(((~sq)-Rank(sq)) & 7))
>> 1) & 0x3f];// (mirrorfile-rank) & 7
}
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.