rendered paste bodypublic class UpdateMask
{
public void Clear()
{
m_updateValues = new SortedDictionary<int, uint>();
m_updateMask = new uint[m_blocks];
}
public void SetCount(int valuesCount)
{
m_updateValues = new SortedDictionary<int, uint>();
m_count = valuesCount;
m_blocks = (valuesCount + 31)/32;
Console.WriteLine("blocks: {0}",m_blocks);
m_updateMask = new uint[m_blocks];
}
public void Write(RealmPacketOut packet)
{
packet.WriteByte((byte)m_blocks);
Console.WriteLine("BitMask len: {0}",m_count);
for (int i = 0; i < m_blocks; i++)
{
packet.Write(m_updateMask[i]);
}
foreach (uint value in m_updateValues.Values)
{
packet.WriteBE(value);
}
}
public void SetBit(int index)
{
m_updateMask[index/32] |= (uint)(1 << index%32);
}
public void SetBit(int index, uint value)
{
SetBit(index);
m_updateValues.Add(index,value);
}
public void SetBit(int index, ulong value)
{
SetBit(index);
SetBit(index+1);
m_updateValues.Add(index, BitConverter.ToUInt32(BitConverter.GetBytes(value), 0));
m_updateValues.Add(index + 1, BitConverter.ToUInt32(BitConverter.GetBytes(value), 4));
}
public bool GetBit(int index)
{
return (m_updateMask[index/32] & (1 << index%32)) == 0;
}
private int m_count;
private int m_blocks;
private uint[] m_updateMask;
private SortedDictionary<int, uint> m_updateValues;
}