From 91364c6a7ca50d1fee2c4bb8ed34fed66449a499 Mon Sep 17 00:00:00 2001 From: majorro Date: Mon, 13 Jan 2025 23:28:26 +0300 Subject: [PATCH] stackalloc readtables --- src/SharpCompress/Compressors/Rar/UnpackV1/Unpack.cs | 6 +++--- src/SharpCompress/Compressors/Rar/UnpackV1/Unpack20.cs | 8 +++----- .../Compressors/Rar/UnpackV1/UnpackUtility.cs | 5 ++--- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/SharpCompress/Compressors/Rar/UnpackV1/Unpack.cs b/src/SharpCompress/Compressors/Rar/UnpackV1/Unpack.cs index 6cadcede..1af0965c 100644 --- a/src/SharpCompress/Compressors/Rar/UnpackV1/Unpack.cs +++ b/src/SharpCompress/Compressors/Rar/UnpackV1/Unpack.cs @@ -866,9 +866,9 @@ internal sealed partial class Unpack : BitInput, IRarUnpack, IDisposable private bool ReadTables() { - var bitLength = new byte[PackDef.BC]; + Span bitLength = stackalloc byte[PackDef.BC]; + Span table = stackalloc byte[PackDef.HUFF_TABLE_SIZE]; - var table = new byte[PackDef.HUFF_TABLE_SIZE]; if (inAddr > readTop - 25) { if (!unpReadBuf()) @@ -996,7 +996,7 @@ internal sealed partial class Unpack : BitInput, IRarUnpack, IDisposable // memcpy(unpOldTable,table,sizeof(unpOldTable)); - Buffer.BlockCopy(table, 0, unpOldTable, 0, unpOldTable.Length); + table.CopyTo(unpOldTable); return (true); } diff --git a/src/SharpCompress/Compressors/Rar/UnpackV1/Unpack20.cs b/src/SharpCompress/Compressors/Rar/UnpackV1/Unpack20.cs index 3a5d008d..33900961 100644 --- a/src/SharpCompress/Compressors/Rar/UnpackV1/Unpack20.cs +++ b/src/SharpCompress/Compressors/Rar/UnpackV1/Unpack20.cs @@ -391,11 +391,9 @@ internal partial class Unpack private bool ReadTables20() { - var BitLength = new byte[PackDef.BC20]; - var Table = new byte[PackDef.MC20 * 4]; - int TableSize, - N, - I; + Span BitLength = stackalloc byte[PackDef.BC20]; + Span Table = stackalloc byte[PackDef.MC20 * 4]; + int TableSize, N, I; if (inAddr > readTop - 25) { if (!unpReadBuf()) diff --git a/src/SharpCompress/Compressors/Rar/UnpackV1/UnpackUtility.cs b/src/SharpCompress/Compressors/Rar/UnpackV1/UnpackUtility.cs index b501337b..c388cdcb 100644 --- a/src/SharpCompress/Compressors/Rar/UnpackV1/UnpackUtility.cs +++ b/src/SharpCompress/Compressors/Rar/UnpackV1/UnpackUtility.cs @@ -181,13 +181,12 @@ internal static class UnpackUtility return (dec.DecodeNum[N]); } - internal static void makeDecodeTables(byte[] lenTab, int offset, Decode.Decode dec, int size) + internal static void makeDecodeTables(Span lenTab, int offset, Decode.Decode dec, int size) { Span lenCount = stackalloc int[16]; Span tmpPos = stackalloc int[16]; int i; - long M, - N; + long M, N; new Span(dec.DecodeNum).Clear(); // memset(Dec->DecodeNum,0,Size*sizeof(*Dec->DecodeNum));