mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-21 17:28:00 +02:00
Substream fixes
This commit is contained in:
parent
0576e74d58
commit
9c473dc269
1 changed files with 32 additions and 3 deletions
|
@ -8,16 +8,18 @@ namespace System.IO
|
||||||
Stream mChildStream ~ { if (mOwnsStream) delete _; };
|
Stream mChildStream ~ { if (mOwnsStream) delete _; };
|
||||||
int64 mOffset;
|
int64 mOffset;
|
||||||
int64 mLength;
|
int64 mLength;
|
||||||
|
int64 mPosition;
|
||||||
|
|
||||||
public override int64 Position
|
public override int64 Position
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return mChildStream.Position + mOffset;
|
return mPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
|
mPosition = value;
|
||||||
mChildStream.Position = value + mOffset;
|
mChildStream.Position = value + mOffset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,6 +52,7 @@ namespace System.IO
|
||||||
public this(Stream childStream, int64 offset, int64 length, bool ownsStream = false)
|
public this(Stream childStream, int64 offset, int64 length, bool ownsStream = false)
|
||||||
{
|
{
|
||||||
mChildStream = childStream;
|
mChildStream = childStream;
|
||||||
|
mChildStream.Position = offset;
|
||||||
mOffset = offset;
|
mOffset = offset;
|
||||||
mLength = length;
|
mLength = length;
|
||||||
mOwnsStream = ownsStream;
|
mOwnsStream = ownsStream;
|
||||||
|
@ -57,12 +60,38 @@ namespace System.IO
|
||||||
|
|
||||||
public override Result<int> TryRead(Span<uint8> data)
|
public override Result<int> TryRead(Span<uint8> data)
|
||||||
{
|
{
|
||||||
return mChildStream.TryRead(data);
|
var tryData = data;
|
||||||
|
if (mPosition + data.Length > mLength)
|
||||||
|
{
|
||||||
|
tryData.Length = mLength - mPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (mChildStream.TryRead(tryData))
|
||||||
|
{
|
||||||
|
case .Ok(let len):
|
||||||
|
mPosition += len;
|
||||||
|
return .Ok(len);
|
||||||
|
case .Err(let err):
|
||||||
|
return .Err(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Result<int> TryWrite(Span<uint8> data)
|
public override Result<int> TryWrite(Span<uint8> data)
|
||||||
{
|
{
|
||||||
return mChildStream.TryWrite(data);
|
var tryData = data;
|
||||||
|
if (mPosition + data.Length > mLength)
|
||||||
|
{
|
||||||
|
tryData.Length = mLength - mPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (mChildStream.TryWrite(tryData))
|
||||||
|
{
|
||||||
|
case .Ok(let len):
|
||||||
|
mPosition += len;
|
||||||
|
return .Ok(len);
|
||||||
|
case .Err(let err):
|
||||||
|
return .Err(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Close()
|
public override void Close()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue