mirror of
https://github.com/MobileTooling/UnifiedFlashingPlatform.git
synced 2026-07-27 12:48:47 -07:00
Further Cleanup
This commit is contained in:
+53
-55
@@ -44,8 +44,8 @@ namespace UnifiedFlashingPlatform
|
||||
_seekBackBuffer = new byte[seekBackBufferSize];
|
||||
}
|
||||
|
||||
public override bool CanRead { get { return true; } }
|
||||
public override bool CanSeek { get { return true; } }
|
||||
public override bool CanRead => true;
|
||||
public override bool CanSeek => true;
|
||||
|
||||
public override int Read(byte[] buffer, int offset, int count)
|
||||
{
|
||||
@@ -66,9 +66,9 @@ namespace UnifiedFlashingPlatform
|
||||
{
|
||||
_underlyingPosition += bytesReadFromUnderlying;
|
||||
|
||||
var copyToBufferCount = Math.Min(bytesReadFromUnderlying, _seekBackBuffer.Length);
|
||||
var copyToBufferOffset = Math.Min(_seekBackBufferCount, _seekBackBuffer.Length - copyToBufferCount);
|
||||
var bufferBytesToMove = Math.Min(_seekBackBufferCount - 1, copyToBufferOffset);
|
||||
int copyToBufferCount = Math.Min(bytesReadFromUnderlying, _seekBackBuffer.Length);
|
||||
int copyToBufferOffset = Math.Min(_seekBackBufferCount, _seekBackBuffer.Length - copyToBufferCount);
|
||||
int bufferBytesToMove = Math.Min(_seekBackBufferCount - 1, copyToBufferOffset);
|
||||
|
||||
if (bufferBytesToMove > 0)
|
||||
{
|
||||
@@ -90,28 +90,17 @@ namespace UnifiedFlashingPlatform
|
||||
return SeekFromEnd((int)Math.Max(0, -offset));
|
||||
}
|
||||
|
||||
var relativeOffset = origin == SeekOrigin.Current
|
||||
long relativeOffset = origin == SeekOrigin.Current
|
||||
? offset
|
||||
: offset - Position;
|
||||
|
||||
if (relativeOffset == 0)
|
||||
{
|
||||
return Position;
|
||||
}
|
||||
else if (relativeOffset > 0)
|
||||
{
|
||||
return SeekForward(relativeOffset);
|
||||
}
|
||||
else
|
||||
{
|
||||
return SeekBackwards(-relativeOffset);
|
||||
}
|
||||
return relativeOffset == 0 ? Position : relativeOffset > 0 ? SeekForward(relativeOffset) : SeekBackwards(-relativeOffset);
|
||||
}
|
||||
|
||||
private long SeekForward(long origOffset)
|
||||
{
|
||||
long offset = origOffset;
|
||||
var seekBackBufferLength = _seekBackBuffer.Length;
|
||||
int seekBackBufferLength = _seekBackBuffer.Length;
|
||||
|
||||
int backwardSoughtBytes = _seekBackBufferCount - _seekBackBufferIndex;
|
||||
int seekForwardInBackBuffer = (int)Math.Min(offset, backwardSoughtBytes);
|
||||
@@ -123,37 +112,34 @@ namespace UnifiedFlashingPlatform
|
||||
// first completely fill seekBackBuffer to remove special cases from while loop below
|
||||
if (_seekBackBufferCount < seekBackBufferLength)
|
||||
{
|
||||
var maxRead = seekBackBufferLength - _seekBackBufferCount;
|
||||
int maxRead = seekBackBufferLength - _seekBackBufferCount;
|
||||
if (offset < maxRead)
|
||||
{
|
||||
maxRead = (int)offset;
|
||||
}
|
||||
|
||||
var bytesRead = _underlyingStream.Read(_seekBackBuffer, _seekBackBufferCount, maxRead);
|
||||
int bytesRead = _underlyingStream.Read(_seekBackBuffer, _seekBackBufferCount, maxRead);
|
||||
_underlyingPosition += bytesRead;
|
||||
_seekBackBufferCount += bytesRead;
|
||||
_seekBackBufferIndex = _seekBackBufferCount;
|
||||
if (bytesRead < maxRead)
|
||||
{
|
||||
if (_seekBackBufferCount < offset)
|
||||
{
|
||||
throw new NotSupportedException("Reached end of stream seeking forward " + origOffset + " bytes");
|
||||
}
|
||||
|
||||
return Position;
|
||||
return _seekBackBufferCount < offset
|
||||
? throw new NotSupportedException("Reached end of stream seeking forward " + origOffset + " bytes")
|
||||
: Position;
|
||||
}
|
||||
offset -= bytesRead;
|
||||
}
|
||||
|
||||
// now alternate between filling tempBuffer and seekBackBuffer
|
||||
bool fillTempBuffer = true;
|
||||
var tempBuffer = new byte[seekBackBufferLength];
|
||||
byte[] tempBuffer = new byte[seekBackBufferLength];
|
||||
while (offset > 0)
|
||||
{
|
||||
var maxRead = offset < seekBackBufferLength ? (int)offset : seekBackBufferLength;
|
||||
var bytesRead = _underlyingStream.Read(fillTempBuffer ? tempBuffer : _seekBackBuffer, 0, maxRead);
|
||||
int maxRead = offset < seekBackBufferLength ? (int)offset : seekBackBufferLength;
|
||||
int bytesRead = _underlyingStream.Read(fillTempBuffer ? tempBuffer : _seekBackBuffer, 0, maxRead);
|
||||
_underlyingPosition += bytesRead;
|
||||
var bytesReadDiff = maxRead - bytesRead;
|
||||
int bytesReadDiff = maxRead - bytesRead;
|
||||
offset -= bytesRead;
|
||||
if (bytesReadDiff > 0 /* reached end-of-stream */ || offset == 0)
|
||||
{
|
||||
@@ -187,7 +173,7 @@ namespace UnifiedFlashingPlatform
|
||||
|
||||
private long SeekBackwards(long offset)
|
||||
{
|
||||
var intOffset = (int)offset;
|
||||
int intOffset = (int)offset;
|
||||
if (offset > int.MaxValue || intOffset > _seekBackBufferIndex)
|
||||
{
|
||||
throw new NotSupportedException("Cannot currently seek backwards more than " + _seekBackBufferIndex + " bytes");
|
||||
@@ -199,8 +185,8 @@ namespace UnifiedFlashingPlatform
|
||||
|
||||
private long SeekFromEnd(long offset)
|
||||
{
|
||||
var intOffset = (int)offset;
|
||||
var seekBackBufferLength = _seekBackBuffer.Length;
|
||||
int intOffset = (int)offset;
|
||||
int seekBackBufferLength = _seekBackBuffer.Length;
|
||||
if (offset > int.MaxValue || intOffset > seekBackBufferLength)
|
||||
{
|
||||
throw new NotSupportedException("Cannot seek backwards from end more than " + seekBackBufferLength + " bytes");
|
||||
@@ -209,19 +195,16 @@ namespace UnifiedFlashingPlatform
|
||||
// first completely fill seekBackBuffer to remove special cases from while loop below
|
||||
if (_seekBackBufferCount < seekBackBufferLength)
|
||||
{
|
||||
var maxRead = seekBackBufferLength - _seekBackBufferCount;
|
||||
var bytesRead = _underlyingStream.Read(_seekBackBuffer, _seekBackBufferCount, maxRead);
|
||||
int maxRead = seekBackBufferLength - _seekBackBufferCount;
|
||||
int bytesRead = _underlyingStream.Read(_seekBackBuffer, _seekBackBufferCount, maxRead);
|
||||
_underlyingPosition += bytesRead;
|
||||
_seekBackBufferCount += bytesRead;
|
||||
_seekBackBufferIndex = Math.Max(0, _seekBackBufferCount - intOffset);
|
||||
if (bytesRead < maxRead)
|
||||
{
|
||||
if (_seekBackBufferCount < intOffset)
|
||||
{
|
||||
throw new NotSupportedException("Could not seek backwards from end " + intOffset + " bytes");
|
||||
}
|
||||
|
||||
return Position;
|
||||
return _seekBackBufferCount < intOffset
|
||||
? throw new NotSupportedException("Could not seek backwards from end " + intOffset + " bytes")
|
||||
: Position;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -231,12 +214,12 @@ namespace UnifiedFlashingPlatform
|
||||
|
||||
// now alternate between filling tempBuffer and seekBackBuffer
|
||||
bool fillTempBuffer = true;
|
||||
var tempBuffer = new byte[seekBackBufferLength];
|
||||
byte[] tempBuffer = new byte[seekBackBufferLength];
|
||||
while (true)
|
||||
{
|
||||
var bytesRead = _underlyingStream.Read(fillTempBuffer ? tempBuffer : _seekBackBuffer, 0, seekBackBufferLength);
|
||||
int bytesRead = _underlyingStream.Read(fillTempBuffer ? tempBuffer : _seekBackBuffer, 0, seekBackBufferLength);
|
||||
_underlyingPosition += bytesRead;
|
||||
var bytesReadDiff = seekBackBufferLength - bytesRead;
|
||||
int bytesReadDiff = seekBackBufferLength - bytesRead;
|
||||
if (bytesReadDiff > 0) // reached end-of-stream
|
||||
{
|
||||
if (fillTempBuffer)
|
||||
@@ -265,18 +248,33 @@ namespace UnifiedFlashingPlatform
|
||||
|
||||
public override long Position
|
||||
{
|
||||
get { return _underlyingPosition - (_seekBackBufferCount - _seekBackBufferIndex); }
|
||||
set { Seek(value, SeekOrigin.Begin); }
|
||||
get => _underlyingPosition - (_seekBackBufferCount - _seekBackBufferIndex);
|
||||
set => Seek(value, SeekOrigin.Begin);
|
||||
}
|
||||
|
||||
public override bool CanTimeout { get { return _underlyingStream.CanTimeout; } }
|
||||
public override bool CanWrite { get { return _underlyingStream.CanWrite; } }
|
||||
public override long Length { get { return _underlyingStream.Length; } }
|
||||
public override void SetLength(long value) { _underlyingStream.SetLength(value); }
|
||||
public override void Write(byte[] buffer, int offset, int count) { _underlyingStream.Write(buffer, offset, count); }
|
||||
public override void Flush() { _underlyingStream.Flush(); }
|
||||
public override void Close() { _underlyingStream.Close(); }
|
||||
public new void Dispose() { _underlyingStream.Dispose(); }
|
||||
public override bool CanTimeout => _underlyingStream.CanTimeout;
|
||||
public override bool CanWrite => _underlyingStream.CanWrite;
|
||||
public override long Length => _underlyingStream.Length;
|
||||
public override void SetLength(long value)
|
||||
{
|
||||
_underlyingStream.SetLength(value);
|
||||
}
|
||||
public override void Write(byte[] buffer, int offset, int count)
|
||||
{
|
||||
_underlyingStream.Write(buffer, offset, count);
|
||||
}
|
||||
public override void Flush()
|
||||
{
|
||||
_underlyingStream.Flush();
|
||||
}
|
||||
public override void Close()
|
||||
{
|
||||
_underlyingStream.Close();
|
||||
}
|
||||
public new void Dispose()
|
||||
{
|
||||
_underlyingStream.Dispose();
|
||||
}
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing)
|
||||
|
||||
Reference in New Issue
Block a user