Implement MergedStream.Position properly

This commit is contained in:
Matthias Mailänder
2016-01-13 12:48:27 +01:00
parent dc62dcd56d
commit d578ea4094

View File

@@ -18,6 +18,7 @@ namespace OpenRA.Primitives
public Stream Stream2 { get; set; }
long VirtualLength { get; set; }
long position;
public MergedStream(Stream stream1, Stream stream2)
{
@@ -35,8 +36,6 @@ namespace OpenRA.Primitives
public override long Seek(long offset, SeekOrigin origin)
{
var position = Position;
switch (origin)
{
case SeekOrigin.Begin:
@@ -52,9 +51,9 @@ namespace OpenRA.Primitives
}
if (position >= Stream1.Length)
Position = Stream1.Length + Stream2.Seek(offset - Stream1.Length, SeekOrigin.Begin);
position = Stream1.Length + Stream2.Seek(offset - Stream1.Length, SeekOrigin.Begin);
else
Position = Stream1.Seek(offset, SeekOrigin.Begin);
position = Stream1.Seek(offset, SeekOrigin.Begin);
return position;
}
@@ -68,7 +67,7 @@ namespace OpenRA.Primitives
{
int bytesRead;
if (Position >= Stream1.Length)
if (position >= Stream1.Length)
bytesRead = Stream2.Read(buffer, offset, count);
else if (count > Stream1.Length)
{
@@ -78,14 +77,14 @@ namespace OpenRA.Primitives
else
bytesRead = Stream1.Read(buffer, offset, count);
Position += bytesRead;
position += bytesRead;
return bytesRead;
}
public override void Write(byte[] buffer, int offset, int count)
{
if (Position >= Stream1.Length)
if (position >= Stream1.Length)
Stream2.Write(buffer, offset - (int)Stream1.Length, count);
else
Stream1.Write(buffer, offset, count);
@@ -111,6 +110,10 @@ namespace OpenRA.Primitives
get { return VirtualLength; }
}
public override long Position { get; set; }
public override long Position
{
get { return position; }
set { Seek(value, SeekOrigin.Begin); }
}
}
}