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); } }