Refrormatted using CSharpier

This commit is contained in:
Twan van Dongen 2024-01-27 18:59:56 +01:00
parent fe13d29549
commit c057ffb153
4 changed files with 100 additions and 35 deletions

View file

@ -82,7 +82,12 @@ internal abstract class ZipFilePart : FilePart
}
case ZipCompressionMethod.Shrink:
{
return new ShrinkStream(stream, CompressionMode.Decompress, Header.CompressedSize, Header.UncompressedSize);
return new ShrinkStream(
stream,
CompressionMode.Decompress,
Header.CompressedSize,
Header.UncompressedSize
);
}
case ZipCompressionMethod.Deflate:
{

View file

@ -4,7 +4,6 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SharpCompress.Compressors.Shrink
{
internal class BitStream
@ -14,26 +13,26 @@ namespace SharpCompress.Compressors.Shrink
private int _byteIdx;
private int _bitIdx;
private int _bitsLeft;
private ulong _bitBuffer;
private ulong _bitBuffer;
private static uint[] _maskBits = new uint[17]
{
0U,
1U,
3U,
7U,
15U,
31U,
63U,
(uint) sbyte.MaxValue,
(uint) byte.MaxValue,
511U,
1023U,
2047U,
4095U,
8191U,
16383U,
(uint) short.MaxValue,
(uint) ushort.MaxValue
0U,
1U,
3U,
7U,
15U,
31U,
63U,
(uint)sbyte.MaxValue,
(uint)byte.MaxValue,
511U,
1023U,
2047U,
4095U,
8191U,
16383U,
(uint)short.MaxValue,
(uint)ushort.MaxValue
};
public BitStream(byte[] src, int srcLen)

View file

@ -69,9 +69,16 @@ namespace SharpCompress.Compressors.Shrink
queue.nextIdx = 0;
}
private static bool ReadCode(BitStream stream, ref int codeSize, CodeTabEntry[] codeTab, ref CodeQueue queue, out int nextCode)
private static bool ReadCode(
BitStream stream,
ref int codeSize,
CodeTabEntry[] codeTab,
ref CodeQueue queue,
out int nextCode
)
{
int code, controlCode;
int code,
controlCode;
code = (int)stream.NextBits(codeSize);
if (!stream.Advance(codeSize))
@ -130,8 +137,17 @@ namespace SharpCompress.Compressors.Shrink
Buffer.BlockCopy(dst, prevPos, dst, dstPos, len);
}
private static UnshrnkStatus OutputCode(int code, byte[] dst, int dstPos, int dstCap, int prevCode,
CodeTabEntry[] codeTab, ref CodeQueue queue, out byte firstByte, out int len)
private static UnshrnkStatus OutputCode(
int code,
byte[] dst,
int dstPos,
int dstCap,
int prevCode,
CodeTabEntry[] codeTab,
ref CodeQueue queue,
out byte firstByte,
out int len
)
{
int prefixCode;
@ -174,7 +190,7 @@ namespace SharpCompress.Compressors.Shrink
// Output a string of unknown length.
//assert(codeTab[code].len == UNKNOWN_LEN);
prefixCode = codeTab[code].prefixCode;
// assert(prefixCode > CONTROL_CODE);
// assert(prefixCode > CONTROL_CODE);
if (prefixCode == queue.codes[queue.nextIdx])
{
@ -215,13 +231,24 @@ namespace SharpCompress.Compressors.Shrink
return UnshrnkStatus.Ok;
}
public static UnshrnkStatus Unshrink(byte[] src, int srcLen, out int srcUsed, byte[] dst, int dstCap, out int dstUsed)
public static UnshrnkStatus Unshrink(
byte[] src,
int srcLen,
out int srcUsed,
byte[] dst,
int dstCap,
out int dstUsed
)
{
CodeTabEntry[] codeTab = new CodeTabEntry[HASHTAB_SIZE];
CodeQueue queue = new CodeQueue();
var stream = new BitStream(src, srcLen);
int codeSize, dstPos, len;
int currCode, prevCode, newCode;
int codeSize,
dstPos,
len;
int currCode,
prevCode,
newCode;
byte firstByte;
CodeTabInit(codeTab);
@ -296,7 +323,17 @@ namespace SharpCompress.Compressors.Shrink
}
// Output the string represented by the current code.
UnshrnkStatus status = OutputCode(currCode, dst, dstPos, dstCap, prevCode, codeTab, ref queue, out firstByte, out len);
UnshrnkStatus status = OutputCode(
currCode,
dst,
dstPos,
dstCap,
prevCode,
codeTab,
ref queue,
out firstByte,
out len
);
if (status != UnshrnkStatus.Ok)
{
srcUsed = stream.BytesRead;
@ -308,7 +345,7 @@ namespace SharpCompress.Compressors.Shrink
var c = currCode;
for (int i = 0; i < len; i++)
{
// assert(codeTab[c].len == len - i);
// assert(codeTab[c].len == len - i);
//assert(codeTab[c].extByte == dst[dstPos + len - i - 1]);
c = codeTab[c].prefixCode;
}
@ -376,11 +413,13 @@ namespace SharpCompress.Compressors.Shrink
q.codes[codeQueueSize] = INVALID_CODE; // End-of-queue marker.
q.nextIdx = 0;
}
private static ushort CodeQueueNext(ref CodeQueue q)
{
//assert(q.nextIdx < q.codes.Length);
return q.codes[q.nextIdx];
}
private static ushort CodeQueueRemoveNext(ref CodeQueue q)
{
ushort code = CodeQueueNext(ref q);

View file

@ -17,7 +17,12 @@ internal class ShrinkStream : Stream
private byte[] _byteOut;
private long _outBytesCount;
public ShrinkStream(Stream stream, CompressionMode compressionMode, long compressedSize, long uncompressedSize)
public ShrinkStream(
Stream stream,
CompressionMode compressionMode,
long compressedSize,
long uncompressedSize
)
{
inStream = stream;
_compressionMode = compressionMode;
@ -36,9 +41,14 @@ internal class ShrinkStream : Stream
public override long Length => _uncompressedSize;
public override long Position { get => _outBytesCount; set => throw new NotImplementedException(); }
public override long Position
{
get => _outBytesCount;
set => throw new NotImplementedException();
}
public override void Flush() => throw new NotImplementedException();
public override int Read(byte[] buffer, int offset, int count)
{
if (inStream.Position == (long)_compressedSize)
@ -50,7 +60,14 @@ internal class ShrinkStream : Stream
int srcUsed = 0;
int dstUsed = 0;
HwUnshrink.Unshrink(src, (int)_compressedSize, out srcUsed, _byteOut, (int)_uncompressedSize, out dstUsed);
HwUnshrink.Unshrink(
src,
(int)_compressedSize,
out srcUsed,
_byteOut,
(int)_uncompressedSize,
out dstUsed
);
_outBytesCount = _byteOut.Length;
for (int index = 0; index < _outBytesCount; ++index)
@ -61,7 +78,12 @@ internal class ShrinkStream : Stream
_outBytesCount = 0;
return (int)tmp;
}
public override long Seek(long offset, SeekOrigin origin) => throw new NotImplementedException();
public override long Seek(long offset, SeekOrigin origin) =>
throw new NotImplementedException();
public override void SetLength(long value) => throw new NotImplementedException();
public override void Write(byte[] buffer, int offset, int count) => throw new NotImplementedException();
public override void Write(byte[] buffer, int offset, int count) =>
throw new NotImplementedException();
}