From 98b96fe0a9610f81549273d922b93f67d13ab242 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Mon, 30 May 2022 20:29:52 +0200 Subject: [PATCH] Use nint --- src/ImageSharp/Common/Helpers/Numerics.cs | 6 +++++ .../Tiff/Compression/BitWriterUtils.cs | 22 +++++++++---------- .../ModifiedHuffmanTiffCompression.cs | 10 ++++----- .../Decompressors/T4TiffCompression.cs | 10 ++++----- .../Decompressors/T6TiffCompression.cs | 12 +++++----- 5 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/ImageSharp/Common/Helpers/Numerics.cs b/src/ImageSharp/Common/Helpers/Numerics.cs index bfbaa1b31c..301bef297f 100644 --- a/src/ImageSharp/Common/Helpers/Numerics.cs +++ b/src/ImageSharp/Common/Helpers/Numerics.cs @@ -75,6 +75,12 @@ namespace SixLabors.ImageSharp [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int Modulo8(int x) => x & 7; + /// + /// Calculates % 8 + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static nint Modulo8(nint x) => x & 7; + /// /// Fast (x mod m) calculator, with the restriction that /// should be power of 2. diff --git a/src/ImageSharp/Formats/Tiff/Compression/BitWriterUtils.cs b/src/ImageSharp/Formats/Tiff/Compression/BitWriterUtils.cs index 2a9efa59bb..37e2a6efcb 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/BitWriterUtils.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/BitWriterUtils.cs @@ -9,16 +9,16 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression { internal static class BitWriterUtils { - public static void WriteBits(Span buffer, int pos, int count, byte value) + public static void WriteBits(Span buffer, nint pos, nint count, byte value) { - int bitPos = Numerics.Modulo8(pos); - int bufferPos = pos / 8; - int startIdx = bufferPos + bitPos; - int endIdx = startIdx + count; + nint bitPos = Numerics.Modulo8(pos); + nint bufferPos = pos / 8; + nint startIdx = bufferPos + bitPos; + nint endIdx = startIdx + count; if (value == 1) { - for (int i = startIdx; i < endIdx; i++) + for (nint i = startIdx; i < endIdx; i++) { WriteBit(buffer, bufferPos, bitPos); @@ -32,7 +32,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression } else { - for (int i = startIdx; i < endIdx; i++) + for (nint i = startIdx; i < endIdx; i++) { WriteZeroBit(buffer, bufferPos, bitPos); @@ -47,17 +47,17 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression } [MethodImpl(InliningOptions.ShortMethod)] - public static void WriteBit(Span buffer, int bufferPos, int bitPos) + public static void WriteBit(Span buffer, nint bufferPos, nint bitPos) { ref byte b = ref Unsafe.Add(ref MemoryMarshal.GetReference(buffer), bufferPos); - b |= (byte)(1 << (7 - bitPos)); + b |= (byte)(1 << (int)(7 - bitPos)); } [MethodImpl(InliningOptions.ShortMethod)] - public static void WriteZeroBit(Span buffer, int bufferPos, int bitPos) + public static void WriteZeroBit(Span buffer, nint bufferPos, nint bitPos) { ref byte b = ref Unsafe.Add(ref MemoryMarshal.GetReference(buffer), bufferPos); - b = (byte)(b & ~(1 << (7 - bitPos))); + b = (byte)(b & ~(1 << (int)(7 - bitPos))); } } } diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/ModifiedHuffmanTiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/ModifiedHuffmanTiffCompression.cs index 4ec989742c..54c94525c5 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/ModifiedHuffmanTiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/ModifiedHuffmanTiffCompression.cs @@ -45,8 +45,8 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors var bitReader = new ModifiedHuffmanBitReader(stream, this.FillOrder, byteCount); buffer.Clear(); - int bitsWritten = 0; - uint pixelsWritten = 0; + nint bitsWritten = 0; + nuint pixelsWritten = 0; nint rowsWritten = 0; while (bitReader.HasMoreData) { @@ -67,13 +67,13 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors pixelsWritten += bitReader.RunLength; } - if (pixelsWritten == this.Width) + if (pixelsWritten == (ulong)this.Width) { rowsWritten++; pixelsWritten = 0; // Write padding bits, if necessary. - int pad = 8 - Numerics.Modulo8(bitsWritten); + nint pad = 8 - Numerics.Modulo8(bitsWritten); if (pad != 8) { BitWriterUtils.WriteBits(buffer, bitsWritten, pad, 0); @@ -88,7 +88,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors bitReader.StartNewRow(); } - if (pixelsWritten > this.Width) + if (pixelsWritten > (ulong)this.Width) { TiffThrowHelper.ThrowImageFormatException("ccitt compression parsing error, decoded more pixels then image width"); } diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4TiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4TiffCompression.cs index 254cb2ab02..7b59e71173 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4TiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4TiffCompression.cs @@ -64,8 +64,8 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors var bitReader = new T4BitReader(stream, this.FillOrder, byteCount, eolPadding); buffer.Clear(); - int bitsWritten = 0; - uint pixelsWritten = 0; + nint bitsWritten = 0; + nuint pixelsWritten = 0; nint rowsWritten = 0; while (bitReader.HasMoreData) { @@ -82,7 +82,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors if (bitReader.IsEndOfScanLine) { // Write padding bytes, if necessary. - int pad = 8 - Numerics.Modulo8(bitsWritten); + nint pad = 8 - Numerics.Modulo8(bitsWritten); if (pad != 8) { BitWriterUtils.WriteBits(buffer, bitsWritten, pad, 0); @@ -100,14 +100,14 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors } // Edge case for when we are at the last byte, but there are still some unwritten pixels left. - if (pixelsWritten > 0 && pixelsWritten < this.width) + if (pixelsWritten > 0 && pixelsWritten < (ulong)this.width) { bitReader.ReadNextRun(); this.WritePixelRun(buffer, bitReader, bitsWritten); } } - private void WritePixelRun(Span buffer, T4BitReader bitReader, int bitsWritten) + private void WritePixelRun(Span buffer, T4BitReader bitReader, nint bitsWritten) { if (bitReader.IsWhiteRun) { diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T6TiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T6TiffCompression.cs index 495fba0370..890eecbffd 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T6TiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T6TiffCompression.cs @@ -60,7 +60,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors var bitReader = new T6BitReader(stream, this.FillOrder, byteCount); var referenceScanLine = new CcittReferenceScanline(this.isWhiteZero, this.width); - int bitsWritten = 0; + nint bitsWritten = 0; for (int y = 0; y < height; y++) { scanLine.Clear(); @@ -73,10 +73,10 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors } } - private int WriteScanLine(Span buffer, Span scanLine, int bitsWritten) + private nint WriteScanLine(Span buffer, Span scanLine, nint bitsWritten) { - int bitPos = Numerics.Modulo8(bitsWritten); - int bufferPos = bitsWritten / 8; + nint bitPos = Numerics.Modulo8(bitsWritten); + nint bufferPos = bitsWritten / 8; for (nint i = 0; i < scanLine.Length; i++) { if (Unsafe.Add(ref MemoryMarshal.GetReference(scanLine), i) != this.white) @@ -95,10 +95,10 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors } // Write padding bytes, if necessary. - int remainder = bitsWritten % 8; + nint remainder = Numerics.Modulo8(bitsWritten); if (remainder != 0) { - int padding = 8 - remainder; + nint padding = 8 - remainder; BitWriterUtils.WriteBits(buffer, bitsWritten, padding, 0); bitsWritten += padding; }