public static ICollection <DeltaOperation> Merge( IEnumerable <DeltaOperation> lastRevision, IEnumerable <DeltaOperation> priorRevision) { var result = new LinkedList <DeltaOperation>(); using (var merger = new DeltaSimulator(lastRevision)) { foreach (DeltaOperation operation in priorRevision) { switch (operation.Command) { case DeltaCommand.WriteLog: result.AddLast(operation); break; case DeltaCommand.WriteSuccessor: merger.Seek(operation.Offset); merger.Read(operation.Length, delegate(byte[] data, int offset, int count) { result.AddLast(DeltaOperation.WriteLog(data, offset, count)); return(count); }, delegate(int offset, int count) { result.AddLast(DeltaOperation.WriteSuccessor(offset, count)); return(count); }); break; } } } return(result); }
public static DeltaOperation WriteLog(byte[] data, int offset, int length) { var result = new DeltaOperation(); result.command = DeltaCommand.WriteLog; result.length = length; result.data = new ArraySegment<byte>(data, offset, length); return result; }
public static DeltaOperation WriteSuccessor(int offset, int length) { var result = new DeltaOperation(); result.command = DeltaCommand.WriteSuccessor; result.offset = offset; result.length = length; return result; }
public static DeltaOperation WriteSuccessor(int offset, int length) { var result = new DeltaOperation(); result.command = DeltaCommand.WriteSuccessor; result.offset = offset; result.length = length; return(result); }
public static DeltaOperation WriteLog(byte[] data, int offset, int length) { var result = new DeltaOperation(); result.command = DeltaCommand.WriteLog; result.length = length; result.data = new ArraySegment <byte>(data, offset, length); return(result); }
public override void Read(BufferReader reader, RecordHeader header) { base.Read(reader, header); for (; ; ) { DeltaOperation operation = new DeltaOperation(); operation.Read(reader); if (operation.Command == DeltaCommand.Stop) break; operations.AddLast(operation); } }
public override void Read(BufferReader reader, RecordHeader header) { base.Read(reader, header); for (; ;) { DeltaOperation operation = new DeltaOperation(); operation.Read(reader); if (operation.Command == DeltaCommand.Stop) { break; } operations.AddLast(operation); } }