BitMapper
struct BitMapper
namespace System.Diagnostics
{
internal ref struct BitMapper
{
private int _maxIndex;
private Span<ulong> _bitMap;
public int MaxIndex => _maxIndex;
public BitMapper(Span<ulong> bitMap)
{
_bitMap = bitMap;
_bitMap.Clear();
_maxIndex = bitMap.Length * 8 * 8;
}
private static void GetIndexAndMask(int index, out int bitIndex, out ulong mask)
{
bitIndex = index >> 6;
int num = index & 63;
mask = (ulong)(1 << num);
}
public bool SetBit(int index)
{
GetIndexAndMask(index, out int bitIndex, out ulong mask);
ulong num = _bitMap[bitIndex];
_bitMap[bitIndex] = (num | mask);
return true;
}
public bool IsSet(int index)
{
GetIndexAndMask(index, out int bitIndex, out ulong mask);
return (_bitMap[bitIndex] & mask) != 0;
}
}
}