/// <summary> /// Read the given property value. /// </summary> /// <param name="reader">Stream to read from.</param> /// <param name="property">Property to read.</param> /// <param name="valueSize">The size in bytes of the value.</param> protected override void ReadProperty(BinaryReader reader, int property, int valueSize) { ByteAlignedReadWriteHelper.ReadPaddingUntilAligned(reader, true); switch ((PropertyId)property) { case PropertyId.ValuesHandle: this.ValuesHandle = BlockHandle.Read(reader); break; case PropertyId.ValueCount: this.ValueCount = reader.ReadInt64(); break; case PropertyId.FileId: this.FileId = reader.ReadUInt32(); ByteAlignedReadWriteHelper.ReadPaddingUntilAligned(reader, true); break; default: base.ReadProperty(reader, property, valueSize); ByteAlignedReadWriteHelper.ReadPaddingUntilAligned(reader, true); break; } ByteAlignedReadWriteHelper.ReadPaddingUntilAligned(reader, true); }
/// <summary> /// Serialize the <see cref="ValueCheckpointFileProperties"/> into the given stream. /// </summary> /// <param name="writer">The stream to write to.</param> /// <remarks> /// The data is written is 8 bytes aligned. /// Name Type Size /// /// ValuesHandle.PID int 4 /// SerializedSize VarInt 1 /// RESERVED 3 /// KeyHandle bytes 16 /// /// ValueCount.PID int 4 /// SerializedSize VarInt 1 /// RESERVED 3 /// ValueCount long 8 /// /// FileId.PID int 4 /// Size VarInt 1 /// RESERVED 3 /// FileId bytes 4 /// RESERVED 4 /// /// RESERVED: Fixed padding that is usable to add fields in future. /// PADDING: Due to dynamic size, cannot be used for adding fields. /// </remarks> public override void Write(BinaryWriter writer) { ByteAlignedReadWriteHelper.AssertIfNotAligned(writer.BaseStream); // 'ValuesHandle' - BlockHandle writer.Write((int)PropertyId.ValuesHandle); VarInt.Write(writer, (int)BlockHandle.SerializedSize); ByteAlignedReadWriteHelper.WritePaddingUntilAligned(writer); this.ValuesHandle.Write(writer); // 'ValueCount' - long writer.Write((int)PropertyId.ValueCount); VarInt.Write(writer, (int)sizeof(long)); ByteAlignedReadWriteHelper.WritePaddingUntilAligned(writer); writer.Write((long)this.ValueCount); // 'FileId' - int writer.Write((int)PropertyId.FileId); VarInt.Write(writer, (int)sizeof(int)); ByteAlignedReadWriteHelper.WritePaddingUntilAligned(writer); writer.Write((int)this.FileId); ByteAlignedReadWriteHelper.WritePaddingUntilAligned(writer); ByteAlignedReadWriteHelper.AssertIfNotAligned(writer.BaseStream); }