diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1bd64c1..973b787 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -37,7 +37,7 @@ jobs: - name: setup dotnet uses: actions/setup-dotnet@v5 with: - dotnet-version: 8 + dotnet-version: 10 - name: restore run: dotnet restore diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c773c07..acc6e55 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -33,7 +33,7 @@ jobs: - name: setup dotnet uses: actions/setup-dotnet@v5 with: - dotnet-version: 8 + dotnet-version: 10 - name: restore run: dotnet restore diff --git a/Kavod.Vba.Compression.sln b/Kavod.Vba.Compression.sln deleted file mode 100644 index 16ae967..0000000 --- a/Kavod.Vba.Compression.sln +++ /dev/null @@ -1,31 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28010.2026 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kavod.Vba.Compression", "src\Kavod.Vba.Compression\Kavod.Vba.Compression.csproj", "{E1DA4414-FAFE-4BE6-A380-BFE7AE1B98FF}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kavod.Vba.Compression.Tests", "src\Kavod.Vba.Compression.Tests\Kavod.Vba.Compression.Tests.csproj", "{59AADB4B-0D8D-4A62-8369-6B38C6B835A4}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E1DA4414-FAFE-4BE6-A380-BFE7AE1B98FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E1DA4414-FAFE-4BE6-A380-BFE7AE1B98FF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1DA4414-FAFE-4BE6-A380-BFE7AE1B98FF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E1DA4414-FAFE-4BE6-A380-BFE7AE1B98FF}.Release|Any CPU.Build.0 = Release|Any CPU - {59AADB4B-0D8D-4A62-8369-6B38C6B835A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {59AADB4B-0D8D-4A62-8369-6B38C6B835A4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {59AADB4B-0D8D-4A62-8369-6B38C6B835A4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {59AADB4B-0D8D-4A62-8369-6B38C6B835A4}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {B654E8D8-8DF4-4111-995C-F224E49CDA0C} - EndGlobalSection -EndGlobal diff --git a/Kavod.Vba.Compression.sln.DotSettings b/Kavod.Vba.Compression.sln.DotSettings deleted file mode 100644 index 80f0b37..0000000 --- a/Kavod.Vba.Compression.sln.DotSettings +++ /dev/null @@ -1,4 +0,0 @@ - - WARNING - Required - True \ No newline at end of file diff --git a/Kavod.Vba.Compression.slnx b/Kavod.Vba.Compression.slnx new file mode 100644 index 0000000..8d2513c --- /dev/null +++ b/Kavod.Vba.Compression.slnx @@ -0,0 +1,4 @@ + + + + diff --git a/src/Directory.Build.props b/src/Directory.Build.props index c4a638c..e9087c2 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,9 +1,9 @@ - 2.0.0 - netstandard2.0;net8.0 - 12.0 + 3.0.0 + net10.0 + 14.0 diff --git a/src/Kavod.Vba.Compression.Tests/Kavod.Vba.Compression.Tests.csproj b/src/Kavod.Vba.Compression.Tests/Kavod.Vba.Compression.Tests.csproj index 609db92..fc105da 100644 --- a/src/Kavod.Vba.Compression.Tests/Kavod.Vba.Compression.Tests.csproj +++ b/src/Kavod.Vba.Compression.Tests/Kavod.Vba.Compression.Tests.csproj @@ -1,8 +1,7 @@ - net48;net8.0 - net8.0 + net10.0 false diff --git a/src/Kavod.Vba.Compression/CompressedChunk.cs b/src/Kavod.Vba.Compression/CompressedChunk.cs index 8e33591..cfe2ae2 100644 --- a/src/Kavod.Vba.Compression/CompressedChunk.cs +++ b/src/Kavod.Vba.Compression/CompressedChunk.cs @@ -16,10 +16,7 @@ internal class CompressedChunk { internal CompressedChunk(DecompressedChunk decompressedChunk) { - if (decompressedChunk == null) - { - throw new ArgumentNullException(nameof(decompressedChunk)); - } + ArgumentNullException.ThrowIfNull(decompressedChunk); ChunkData = new CompressedChunkData(decompressedChunk); if (ChunkData.Size >= Globals.MaxBytesPerChunk) @@ -31,10 +28,7 @@ internal CompressedChunk(DecompressedChunk decompressedChunk) internal CompressedChunk(BinaryReader dataReader) { - if (dataReader == null) - { - throw new ArgumentNullException(nameof(dataReader)); - } + ArgumentNullException.ThrowIfNull(dataReader); Header = new CompressedChunkHeader(dataReader); if (Header.IsCompressed) diff --git a/src/Kavod.Vba.Compression/CompressedChunkData.cs b/src/Kavod.Vba.Compression/CompressedChunkData.cs index f738093..e80a0dc 100644 --- a/src/Kavod.Vba.Compression/CompressedChunkData.cs +++ b/src/Kavod.Vba.Compression/CompressedChunkData.cs @@ -18,10 +18,7 @@ internal class CompressedChunkData : IChunkData internal CompressedChunkData(DecompressedChunk chunk) { - if (chunk == null) - { - throw new ArgumentNullException(nameof(chunk)); - } + ArgumentNullException.ThrowIfNull(chunk); var tokens = Tokenizer.TokenizeUncompressedData(chunk.Data); _tokensequences.AddRange(tokens.ToTokenSequences()); @@ -31,15 +28,13 @@ internal CompressedChunkData(BinaryReader dataReader, UInt16 compressedChunkData { var data = dataReader.ReadBytes(compressedChunkDataSize); - using (var reader = new BinaryReader(new MemoryStream(data))) + using var reader = new BinaryReader(new MemoryStream(data)); + var position = 0; + while (reader.BaseStream.Position < reader.BaseStream.Length) { - var position = 0; - while (reader.BaseStream.Position < reader.BaseStream.Length) - { - var sequence = TokenSequence.GetFromCompressedData(reader, position); - _tokensequences.Add(sequence); - position += (int)sequence.Tokens.Sum(t => t.Length); - } + var sequence = TokenSequence.GetFromCompressedData(reader, position); + _tokensequences.Add(sequence); + position += (int)sequence.Tokens.Sum(t => t.Length); } } diff --git a/src/Kavod.Vba.Compression/CompressedContainer.cs b/src/Kavod.Vba.Compression/CompressedContainer.cs index ed7edbc..28ac74f 100644 --- a/src/Kavod.Vba.Compression/CompressedContainer.cs +++ b/src/Kavod.Vba.Compression/CompressedContainer.cs @@ -18,7 +18,7 @@ internal class CompressedContainer { private const byte SignatureByteSig = 0x1; - private readonly List _compressedChunks = new List(); + private readonly List _compressedChunks = []; internal CompressedContainer(byte[] compressedData) { @@ -47,21 +47,17 @@ internal CompressedContainer(DecompressedBuffer buffer) internal byte[] SerializeData() { - using (var writer = new BinaryWriter(new MemoryStream())) - { - writer.Write(SignatureByteSig); - - foreach (var chunk in CompressedChunks) - { - writer.Write(chunk.SerializeData()); - } + using var writer = new BinaryWriter(new MemoryStream()); + writer.Write(SignatureByteSig); - using (var reader = new BinaryReader(writer.BaseStream)) - { - reader.BaseStream.Position = 0; - return reader.ReadBytes((int) reader.BaseStream.Length); - } + foreach (var chunk in CompressedChunks) + { + writer.Write(chunk.SerializeData()); } + + using var reader = new BinaryReader(writer.BaseStream); + reader.BaseStream.Position = 0; + return reader.ReadBytes((int)reader.BaseStream.Length); } } -} \ No newline at end of file +} diff --git a/src/Kavod.Vba.Compression/DecompressedBuffer.cs b/src/Kavod.Vba.Compression/DecompressedBuffer.cs index 426b999..685213d 100644 --- a/src/Kavod.Vba.Compression/DecompressedBuffer.cs +++ b/src/Kavod.Vba.Compression/DecompressedBuffer.cs @@ -12,13 +12,11 @@ internal class DecompressedBuffer { internal DecompressedBuffer(byte[] uncompressedData) { - using (var reader = new BinaryReader(new MemoryStream(uncompressedData))) + using var reader = new BinaryReader(new MemoryStream(uncompressedData)); + while (reader.BaseStream.Position < reader.BaseStream.Length) { - while (reader.BaseStream.Position < reader.BaseStream.Length) - { - var chunk = new DecompressedChunk(reader); - DecompressedChunks.Add(chunk); - } + var chunk = new DecompressedChunk(reader); + DecompressedChunks.Add(chunk); } } @@ -36,20 +34,16 @@ internal byte[] Data { get { - using (var writer = new BinaryWriter(new MemoryStream())) + using var writer = new BinaryWriter(new MemoryStream()); + foreach (var chunk in DecompressedChunks) { - foreach (var chunk in DecompressedChunks) - { - writer.Write(chunk.Data); - } + writer.Write(chunk.Data); + } - using (var reader = new BinaryReader(writer.BaseStream)) - { - reader.BaseStream.Position = 0; + using var reader = new BinaryReader(writer.BaseStream); + reader.BaseStream.Position = 0; - return reader.ReadBytes((int) reader.BaseStream.Length); - } - } + return reader.ReadBytes((int)reader.BaseStream.Length); } } } diff --git a/src/Kavod.Vba.Compression/DecompressedChunk.cs b/src/Kavod.Vba.Compression/DecompressedChunk.cs index 4585683..d2f6870 100644 --- a/src/Kavod.Vba.Compression/DecompressedChunk.cs +++ b/src/Kavod.Vba.Compression/DecompressedChunk.cs @@ -16,20 +16,18 @@ internal DecompressedChunk(CompressedChunk compressedChunk) if (compressedChunk.Header.IsCompressed) { // Loop through all the data, get TokenSequences and decompress them. - using (var writer = new BinaryWriter(new MemoryStream())) + using var writer = new BinaryWriter(new MemoryStream()); + var tokens = ((CompressedChunkData)compressedChunk.ChunkData).TokenSequences; + foreach (var sequence in tokens) { - var tokens = ((CompressedChunkData)compressedChunk.ChunkData).TokenSequences; - foreach (var sequence in tokens) - { - sequence.Tokens.DecompressTokenSequence(writer); - } + sequence.Tokens.DecompressTokenSequence(writer); + } - var stream = (MemoryStream)writer.BaseStream; - var decompressedData = stream.GetBuffer(); - Array.Resize(ref decompressedData, (int)stream.Length); + var stream = (MemoryStream)writer.BaseStream; + var decompressedData = stream.GetBuffer(); + Array.Resize(ref decompressedData, (int)stream.Length); - Data = decompressedData; - } + Data = decompressedData; } else { diff --git a/src/Kavod.Vba.Compression/LiteralToken.cs b/src/Kavod.Vba.Compression/LiteralToken.cs index 2cbf717..8dbf076 100644 --- a/src/Kavod.Vba.Compression/LiteralToken.cs +++ b/src/Kavod.Vba.Compression/LiteralToken.cs @@ -20,7 +20,7 @@ internal LiteralToken(BinaryReader dataReader) internal LiteralToken(byte data) { - _data = new [] { data }; + _data = [data]; } public void DecompressToken(BinaryWriter writer) diff --git a/src/Kavod.Vba.Compression/README.md b/src/Kavod.Vba.Compression/README.md index 493ffe0..6b71d93 100644 --- a/src/Kavod.Vba.Compression/README.md +++ b/src/Kavod.Vba.Compression/README.md @@ -19,7 +19,7 @@ var compressedBytes = VbaCompression.Compress(contentBytes); ### Requirements -Library works with .NET Framework 4.6.2 and 4.8, and .NET 8 runtimes. +Library targets the .NET 10 runtime. ### Legal diff --git a/src/Kavod.Vba.Compression/Tokenizer.cs b/src/Kavod.Vba.Compression/Tokenizer.cs index 1f1a628..4a195b9 100644 --- a/src/Kavod.Vba.Compression/Tokenizer.cs +++ b/src/Kavod.Vba.Compression/Tokenizer.cs @@ -108,7 +108,7 @@ private static IEnumerable AllPossibleCopyTokens(byte[] uncompressedD } } - private static IEnumerable NormalizeCopyTokens(IEnumerable copyTokens) + private static List NormalizeCopyTokens(IEnumerable copyTokens) { var remainingTokens = RemoveRedundantTokens(copyTokens).ToList(); @@ -162,10 +162,7 @@ private static IEnumerable RemoveOverlappingTokens(IEnumerable GetOverlappingNodes(Node node) { - if (node == null) - { - throw new ArgumentNullException(nameof(node)); - } + ArgumentNullException.ThrowIfNull(node); var firstNode = node; @@ -208,10 +202,7 @@ private static IEnumerable GetOverlappingNodes(Node node) private static Node GetNextNonOverlappingNode(Node node) { - if (node == null) - { - throw new ArgumentNullException(nameof(node)); - } + ArgumentNullException.ThrowIfNull(node); var firstNode = node; @@ -322,10 +313,7 @@ private class Node : IEnumerable { public Node(CopyToken value, Node nextNode) { - if (value == null) - { - throw new ArgumentNullException(nameof(value)); - } + ArgumentNullException.ThrowIfNull(value); Value = value; NextNode = nextNode;