public override List<byte> SerializeToByteList()
{
// Storage Index Extended GUID
this.StorageIndexExtendedGUID = this.StorageIndexExtendedGUID ?? new ExGuid();
List<byte> storageIndexExtendedGUIDBytes = this.StorageIndexExtendedGUID.SerializeToByteList();
// Expect Storage Index Extended GUID
List<byte> expectedStorageIndexExtendedGUIDBytes = this.ExpectedStorageIndexExtendedGUID.SerializeToByteList();
// Put Changes Request
this.PutChangesRequestStart = new StreamObjectHeaderStart32bit(StreamObjectTypeHeaderStart.PutChangesRequest, 1 + storageIndexExtendedGUIDBytes.Count + expectedStorageIndexExtendedGUIDBytes.Count);
List<byte> putChangesRequestBytes = this.PutChangesRequestStart.SerializeToByteList();
// reserved
BitWriter bitWriter = new BitWriter(1);
bitWriter.AppendInit32(this.ImplyNullExpectedIfNoMapping, 1);
bitWriter.AppendInit32(this.Partial, 1);
bitWriter.AppendInit32(this.PartialLast, 1);
bitWriter.AppendInit32(this.FavorCoherencyFailureOverNotFound, 1);
bitWriter.AppendInit32(this.AbortRemainingPutChangesOnFailure, 1);
bitWriter.AppendInit32(this.MultiRequestPutHint, 1);
bitWriter.AppendInit32(this.ReturnCompleteKnowledgeIfPossible, 1);
bitWriter.AppendInit32(this.LastWriterWinsOnNextChange, 1);
List<byte> reservedBytes = new List<byte>(bitWriter.Bytes);
List<byte> byteList = new List<byte>();
// sub-request start
byteList.AddRange(base.SerializeToByteList());
// put change request
byteList.AddRange(putChangesRequestBytes);
// Storage Index Extended GUID
byteList.AddRange(storageIndexExtendedGUIDBytes);
// Expected Storage Index Extended GUID
byteList.AddRange(expectedStorageIndexExtendedGUIDBytes);
// reserved
byteList.AddRange(reservedBytes);
if (this.IsAdditionalFlagsUsed)
{
this.AdditionalFlagsStart = new StreamObjectHeaderStart32bit(StreamObjectTypeHeaderStart.AdditionalFlags, 2);
byteList.AddRange(this.AdditionalFlagsStart.SerializeToByteList());
BitWriter additionalFlagsWriter = new BitWriter(2);
additionalFlagsWriter.AppendInit32(this.ReturnAppliedStorageIndexIdEntries, 1);
additionalFlagsWriter.AppendInit32(this.ReturnDataElementsAdded, 1);
additionalFlagsWriter.AppendInit32(this.CheckForIdReuse, 1);
additionalFlagsWriter.AppendInit32(this.CoherencyCheckOnlyAppliedIndexEntries, 1);
additionalFlagsWriter.AppendInit32(this.FullFileReplacePut, 1);
additionalFlagsWriter.AppendInit32(this.Reserve, 11);
byteList.AddRange(additionalFlagsWriter.Bytes);
}
if (this.IsLockIdUsed)
{
this.LockIdStart = new StreamObjectHeaderStart32bit(StreamObjectTypeHeaderStart.PutChangesLockId, 16);
byteList.AddRange(this.LockIdStart.SerializeToByteList());
byteList.AddRange(this.LockID.ToByteArray());
}
if (this.OptionalClientKnowledge != null)
{
byteList.AddRange(this.OptionalClientKnowledge.SerializeToByteList());
}
// sub-request end
byteList.AddRange(this.ToBytesEnd());
return byteList;
}
}