Beispiel #1
0
        private void WriteValues(StreamHandler Writer, UpdateFields values, ObjectTypeId type)
        {
            uint     nValueUpdates = UpdateFields.GetCount(type, values.Last().Key);
            byte     nBlocks       = (byte)((nValueUpdates + 31) / 32);
            BitArray mask          = new BitArray(nBlocks * 32);

            foreach (int key in values.Keys)
            {
                mask[key] = true;
            }

            // Write block count
            Writer.WriteByte(nBlocks);

            // Write all blocks
            int index = 0;

            for (byte i = 0; i < nBlocks; ++i)
            {
                uint block = 0;
                uint bit   = 1;

                for (int j = 0; j < 32; ++j)
                {
                    if (mask[index])
                    {
                        block |= bit;
                    }

                    ++index;
                    bit <<= 1;
                }

                Writer.WriteUInt32(block);
            }

            // Write all values
            foreach (uint value in values.Values)
            {
                Writer.WriteUInt32(value);
            }
        }