Slow code only
Posted: Thu Jan 24, 2019 4:44 pm
This code works for iterating over squares in C#. Just use foreach.
Code: Select all
fieldIterator.Reset(pos.Board.Pawns);
foreach(var field in fieldIterator)
{
}
public class FieldIterator : IEnumerator<IField>
{
ulong iniBits;
UInt64 bits;
ulong bit;
IBoardSquares board;
public IField Current
{
get
{
return board[bit];
}
}
object IEnumerator.Current
{
get
{
return bit;
}
}
BitBoardIndex bbIndex = BitBoardIndex.Instance;
public FieldIterator( IBoardSquares board)
{
this.board = board;
}
public FieldIterator(UInt64 target, IBoardSquares board)
{
iniBits = target;
bits = iniBits;
this.board = board;
}
public void Reset(UInt64 target)
{
iniBits = target;
bits = iniBits;
}
public void Dispose()
{
}
public bool MoveNext()
{
bit = bits & (~bits + 1);
bits &= bits - 1;
return bit != 0;
}
public void Reset()
{
bits = iniBits;
}
public FieldIterator GetEnumerator()
{
return this;
}
}