first pass of sync generator

This commit is contained in:
Adam Hathcock
2026-07-28 11:26:51 +01:00
parent 0037141ac4
commit ea44ec098b
17 changed files with 38 additions and 147 deletions

View File

@@ -7,6 +7,7 @@ namespace SharpCompress.Compressors.Filters;
internal abstract partial class Filter
{
[Zomp.SyncMethodGenerator.CreateSyncVersion]
public override async Task<int> ReadAsync(
byte[] buffer,
int offset,
@@ -200,6 +201,7 @@ internal abstract partial class Filter
}
#endif
[Zomp.SyncMethodGenerator.CreateSyncVersion]
public override async Task WriteAsync(
byte[] buffer,
int offset,

View File

@@ -50,99 +50,9 @@ internal abstract partial class Filter : Stream
set => throw new NotSupportedException();
}
public override int Read(byte[] buffer, int offset, int count)
{
var size = 0;
if (_transformed > 0)
{
var copySize = _transformed;
if (copySize > count)
{
copySize = count;
}
Buffer.BlockCopy(_tail, 0, buffer, offset, copySize);
_transformed -= copySize;
_read -= copySize;
offset += copySize;
count -= copySize;
size += copySize;
Buffer.BlockCopy(_tail, copySize, _tail, 0, _read);
}
if (count == 0)
{
return size;
}
var inSize = _read;
if (inSize > count)
{
inSize = count;
}
Buffer.BlockCopy(_tail, 0, buffer, offset, inSize);
_read -= inSize;
Buffer.BlockCopy(_tail, inSize, _tail, 0, _read);
while (!_endReached && inSize < count)
{
var baseRead = _baseStream.Read(buffer, offset + inSize, count - inSize);
inSize += baseRead;
if (baseRead == 0)
{
_endReached = true;
}
}
while (!_endReached && _read < _tail.Length)
{
var baseRead = _baseStream.Read(_tail, _read, _tail.Length - _read);
_read += baseRead;
if (baseRead == 0)
{
_endReached = true;
}
}
if (inSize > _tail.Length)
{
_transformed = Transform(buffer, offset, inSize);
offset += _transformed;
count -= _transformed;
size += _transformed;
inSize -= _transformed;
_transformed = 0;
}
if (count == 0)
{
return size;
}
Buffer.BlockCopy(buffer, offset, _window, 0, inSize);
Buffer.BlockCopy(_tail, 0, _window, inSize, _read);
if (inSize + _read > _tail.Length)
{
_transformed = Transform(_window, 0, inSize + _read);
}
else
{
_transformed = inSize + _read;
}
Buffer.BlockCopy(_window, 0, buffer, offset, inSize);
Buffer.BlockCopy(_window, inSize, _tail, 0, _read);
size += inSize;
_transformed -= inSize;
return size;
}
public override long Seek(long offset, SeekOrigin origin) => throw new NotSupportedException();
public override void SetLength(long value) => throw new NotSupportedException();
public override void Write(byte[] buffer, int offset, int count)
{
Transform(buffer, offset, count);
_baseStream.Write(buffer, offset, count);
}
protected abstract int Transform(byte[] buffer, int offset, int count);
}

View File

@@ -8,6 +8,7 @@ namespace SharpCompress.Compressors.Xz.Filters;
public partial class ArmFilter
{
[Zomp.SyncMethodGenerator.CreateSyncVersion]
public override async Task<int> ReadAsync(
byte[] buffer,
int offset,

View File

@@ -6,7 +6,6 @@
using System.IO;
using SharpCompress.Common;
using SharpCompress.Compressors.Filters;
namespace SharpCompress.Compressors.Xz.Filters;
@@ -45,13 +44,5 @@ public partial class ArmFilter : BlockFilter
public override void ValidateFilter() { }
public override int Read(byte[] buffer, int offset, int count)
{
var bytesRead = BaseStream.Read(buffer, offset, count);
BranchExecFilter.ARMConverter(buffer, _ip);
_ip += (uint)bytesRead;
return bytesRead;
}
public override void SetBaseStream(Stream stream) => BaseStream = stream;
}

View File

@@ -8,6 +8,7 @@ namespace SharpCompress.Compressors.Xz.Filters;
public partial class ArmThumbFilter
{
[Zomp.SyncMethodGenerator.CreateSyncVersion]
public override async Task<int> ReadAsync(
byte[] buffer,
int offset,

View File

@@ -6,7 +6,6 @@
using System.IO;
using SharpCompress.Common;
using SharpCompress.Compressors.Filters;
namespace SharpCompress.Compressors.Xz.Filters;
@@ -45,13 +44,5 @@ public partial class ArmThumbFilter : BlockFilter
public override void ValidateFilter() { }
public override int Read(byte[] buffer, int offset, int count)
{
var bytesRead = BaseStream.Read(buffer, offset, count);
BranchExecFilter.ARMTConverter(buffer, _ip);
_ip += (uint)bytesRead;
return bytesRead;
}
public override void SetBaseStream(Stream stream) => BaseStream = stream;
}

View File

@@ -8,6 +8,7 @@ namespace SharpCompress.Compressors.Xz.Filters;
public partial class IA64Filter
{
[Zomp.SyncMethodGenerator.CreateSyncVersion]
public override async Task<int> ReadAsync(
byte[] buffer,
int offset,

View File

@@ -6,7 +6,6 @@
using System.IO;
using SharpCompress.Common;
using SharpCompress.Compressors.Filters;
namespace SharpCompress.Compressors.Xz.Filters;
@@ -45,13 +44,5 @@ public partial class IA64Filter : BlockFilter
public override void ValidateFilter() { }
public override int Read(byte[] buffer, int offset, int count)
{
var bytesRead = BaseStream.Read(buffer, offset, count);
BranchExecFilter.IA64Converter(buffer, _ip);
_ip += (uint)bytesRead;
return bytesRead;
}
public override void SetBaseStream(Stream stream) => BaseStream = stream;
}

View File

@@ -7,6 +7,7 @@ namespace SharpCompress.Compressors.Xz.Filters;
public partial class Lzma2Filter
{
[Zomp.SyncMethodGenerator.CreateSyncVersion]
public override Task<int> ReadAsync(
byte[] buffer,
int offset,

View File

@@ -52,8 +52,5 @@ public partial class Lzma2Filter : BlockFilter
public override void SetBaseStream(Stream stream) =>
BaseStream = LzmaStream.Create(new[] { _dictionarySize }, stream);
public override int Read(byte[] buffer, int offset, int count) =>
BaseStream.Read(buffer, offset, count);
public override int ReadByte() => BaseStream.ReadByte();
}

View File

@@ -8,6 +8,7 @@ namespace SharpCompress.Compressors.Xz.Filters;
public partial class PowerPCFilter
{
[Zomp.SyncMethodGenerator.CreateSyncVersion]
public override async Task<int> ReadAsync(
byte[] buffer,
int offset,

View File

@@ -6,7 +6,6 @@
using System.IO;
using SharpCompress.Common;
using SharpCompress.Compressors.Filters;
namespace SharpCompress.Compressors.Xz.Filters;
@@ -45,13 +44,5 @@ public partial class PowerPCFilter : BlockFilter
public override void ValidateFilter() { }
public override int Read(byte[] buffer, int offset, int count)
{
var bytesRead = BaseStream.Read(buffer, offset, count);
BranchExecFilter.PowerPCConverter(buffer, _ip);
_ip += (uint)bytesRead;
return bytesRead;
}
public override void SetBaseStream(Stream stream) => BaseStream = stream;
}

View File

@@ -8,6 +8,7 @@ namespace SharpCompress.Compressors.Xz.Filters;
public partial class SparcFilter
{
[Zomp.SyncMethodGenerator.CreateSyncVersion]
public override async Task<int> ReadAsync(
byte[] buffer,
int offset,

View File

@@ -6,7 +6,6 @@
using System.IO;
using SharpCompress.Common;
using SharpCompress.Compressors.Filters;
namespace SharpCompress.Compressors.Xz.Filters;
@@ -45,13 +44,5 @@ public partial class SparcFilter : BlockFilter
public override void ValidateFilter() { }
public override int Read(byte[] buffer, int offset, int count)
{
var bytesRead = BaseStream.Read(buffer, offset, count);
BranchExecFilter.SPARCConverter(buffer, _ip);
_ip += (uint)bytesRead;
return bytesRead;
}
public override void SetBaseStream(Stream stream) => BaseStream = stream;
}

View File

@@ -8,6 +8,7 @@ namespace SharpCompress.Compressors.Xz.Filters;
public partial class X86Filter
{
[Zomp.SyncMethodGenerator.CreateSyncVersion]
public override async Task<int> ReadAsync(
byte[] buffer,
int offset,

View File

@@ -6,7 +6,6 @@
using System.IO;
using SharpCompress.Common;
using SharpCompress.Compressors.Filters;
namespace SharpCompress.Compressors.Xz.Filters;
@@ -47,13 +46,5 @@ public partial class X86Filter : BlockFilter
public override void ValidateFilter() { }
public override int Read(byte[] buffer, int offset, int count)
{
var bytesRead = BaseStream.Read(buffer, offset, count);
BranchExecFilter.X86Converter(buffer, _ip, ref _state);
_ip += (uint)bytesRead;
return bytesRead;
}
public override void SetBaseStream(Stream stream) => BaseStream = stream;
}