public void Read(int length, FromLogCallback fromLog, FromSuccessorCallback fromSuccessor) { while (length > 0 && !eof) { var operation = enumerator.Current; var operationRemaining = operation.Length - operationOffset; var count = Math.Min(length, operationRemaining); int bytesRead; if (operation.Command == DeltaCommand.WriteLog) { bytesRead = fromLog(operation.Data.Array, operation.Data.Offset + operationOffset, count); } else { bytesRead = fromSuccessor(operation.Offset + operationOffset, count); } if (bytesRead == 0) { break; } operationOffset += bytesRead; Offset += bytesRead; if (length >= operationRemaining) { eof = !enumerator.MoveNext(); operationOffset = 0; } length -= bytesRead; } }
public void Read(int length, FromLogCallback fromLog, FromSuccessorCallback fromSuccessor) { while (length > 0 && !eof) { var operation = enumerator.Current; var operationRemaining = operation.Length - operationOffset; var count = Math.Min(length, operationRemaining); int bytesRead; if (operation.Command == DeltaCommand.WriteLog) { bytesRead = fromLog(operation.Data.Array, operation.Data.Offset + operationOffset, count); } else { bytesRead = fromSuccessor(operation.Offset + operationOffset, count); } if (bytesRead == 0) { break; } operationOffset += bytesRead; fileOffset += bytesRead; if (length >= operationRemaining) { eof = !enumerator.MoveNext(); operationOffset = 0; } length -= bytesRead; } }