mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-21 09:27:59 +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 _; };
|
||||
int64 mOffset;
|
||||
int64 mLength;
|
||||
int64 mPosition;
|
||||
|
||||
public override int64 Position
|
||||
{
|
||||
get
|
||||
{
|
||||
return mChildStream.Position + mOffset;
|
||||
return mPosition;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
mPosition = value;
|
||||
mChildStream.Position = value + mOffset;
|
||||
}
|
||||
}
|
||||
|
@ -50,6 +52,7 @@ namespace System.IO
|
|||
public this(Stream childStream, int64 offset, int64 length, bool ownsStream = false)
|
||||
{
|
||||
mChildStream = childStream;
|
||||
mChildStream.Position = offset;
|
||||
mOffset = offset;
|
||||
mLength = length;
|
||||
mOwnsStream = ownsStream;
|
||||
|
@ -57,12 +60,38 @@ namespace System.IO
|
|||
|
||||
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)
|
||||
{
|
||||
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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue