All pastes #375966 Raw Edit

Anonymous

public text v1 · immutable
#375966 ·published 2007-02-28 19:18 UTC
rendered paste body
public 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;
    }