Skip to content

Commit 98b96fe

Browse files
committed
Use nint
1 parent 9624661 commit 98b96fe

File tree

5 files changed

+33
-27
lines changed

5 files changed

+33
-27
lines changed

src/ImageSharp/Common/Helpers/Numerics.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ public static int LeastCommonMultiple(int a, int b)
7575
[MethodImpl(MethodImplOptions.AggressiveInlining)]
7676
public static int Modulo8(int x) => x & 7;
7777

78+
/// <summary>
79+
/// Calculates <paramref name="x"/> % 8
80+
/// </summary>
81+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
82+
public static nint Modulo8(nint x) => x & 7;
83+
7884
/// <summary>
7985
/// Fast (x mod m) calculator, with the restriction that
8086
/// <paramref name="m"/> should be power of 2.

src/ImageSharp/Formats/Tiff/Compression/BitWriterUtils.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression
99
{
1010
internal static class BitWriterUtils
1111
{
12-
public static void WriteBits(Span<byte> buffer, int pos, int count, byte value)
12+
public static void WriteBits(Span<byte> buffer, nint pos, nint count, byte value)
1313
{
14-
int bitPos = Numerics.Modulo8(pos);
15-
int bufferPos = pos / 8;
16-
int startIdx = bufferPos + bitPos;
17-
int endIdx = startIdx + count;
14+
nint bitPos = Numerics.Modulo8(pos);
15+
nint bufferPos = pos / 8;
16+
nint startIdx = bufferPos + bitPos;
17+
nint endIdx = startIdx + count;
1818

1919
if (value == 1)
2020
{
21-
for (int i = startIdx; i < endIdx; i++)
21+
for (nint i = startIdx; i < endIdx; i++)
2222
{
2323
WriteBit(buffer, bufferPos, bitPos);
2424

@@ -32,7 +32,7 @@ public static void WriteBits(Span<byte> buffer, int pos, int count, byte value)
3232
}
3333
else
3434
{
35-
for (int i = startIdx; i < endIdx; i++)
35+
for (nint i = startIdx; i < endIdx; i++)
3636
{
3737
WriteZeroBit(buffer, bufferPos, bitPos);
3838

@@ -47,17 +47,17 @@ public static void WriteBits(Span<byte> buffer, int pos, int count, byte value)
4747
}
4848

4949
[MethodImpl(InliningOptions.ShortMethod)]
50-
public static void WriteBit(Span<byte> buffer, int bufferPos, int bitPos)
50+
public static void WriteBit(Span<byte> buffer, nint bufferPos, nint bitPos)
5151
{
5252
ref byte b = ref Unsafe.Add(ref MemoryMarshal.GetReference(buffer), bufferPos);
53-
b |= (byte)(1 << (7 - bitPos));
53+
b |= (byte)(1 << (int)(7 - bitPos));
5454
}
5555

5656
[MethodImpl(InliningOptions.ShortMethod)]
57-
public static void WriteZeroBit(Span<byte> buffer, int bufferPos, int bitPos)
57+
public static void WriteZeroBit(Span<byte> buffer, nint bufferPos, nint bitPos)
5858
{
5959
ref byte b = ref Unsafe.Add(ref MemoryMarshal.GetReference(buffer), bufferPos);
60-
b = (byte)(b & ~(1 << (7 - bitPos)));
60+
b = (byte)(b & ~(1 << (int)(7 - bitPos)));
6161
}
6262
}
6363
}

src/ImageSharp/Formats/Tiff/Compression/Decompressors/ModifiedHuffmanTiffCompression.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ protected override void Decompress(BufferedReadStream stream, int byteCount, int
4545
var bitReader = new ModifiedHuffmanBitReader(stream, this.FillOrder, byteCount);
4646

4747
buffer.Clear();
48-
int bitsWritten = 0;
49-
uint pixelsWritten = 0;
48+
nint bitsWritten = 0;
49+
nuint pixelsWritten = 0;
5050
nint rowsWritten = 0;
5151
while (bitReader.HasMoreData)
5252
{
@@ -67,13 +67,13 @@ protected override void Decompress(BufferedReadStream stream, int byteCount, int
6767
pixelsWritten += bitReader.RunLength;
6868
}
6969

70-
if (pixelsWritten == this.Width)
70+
if (pixelsWritten == (ulong)this.Width)
7171
{
7272
rowsWritten++;
7373
pixelsWritten = 0;
7474

7575
// Write padding bits, if necessary.
76-
int pad = 8 - Numerics.Modulo8(bitsWritten);
76+
nint pad = 8 - Numerics.Modulo8(bitsWritten);
7777
if (pad != 8)
7878
{
7979
BitWriterUtils.WriteBits(buffer, bitsWritten, pad, 0);
@@ -88,7 +88,7 @@ protected override void Decompress(BufferedReadStream stream, int byteCount, int
8888
bitReader.StartNewRow();
8989
}
9090

91-
if (pixelsWritten > this.Width)
91+
if (pixelsWritten > (ulong)this.Width)
9292
{
9393
TiffThrowHelper.ThrowImageFormatException("ccitt compression parsing error, decoded more pixels then image width");
9494
}

src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4TiffCompression.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ protected override void Decompress(BufferedReadStream stream, int byteCount, int
6464
var bitReader = new T4BitReader(stream, this.FillOrder, byteCount, eolPadding);
6565

6666
buffer.Clear();
67-
int bitsWritten = 0;
68-
uint pixelsWritten = 0;
67+
nint bitsWritten = 0;
68+
nuint pixelsWritten = 0;
6969
nint rowsWritten = 0;
7070
while (bitReader.HasMoreData)
7171
{
@@ -82,7 +82,7 @@ protected override void Decompress(BufferedReadStream stream, int byteCount, int
8282
if (bitReader.IsEndOfScanLine)
8383
{
8484
// Write padding bytes, if necessary.
85-
int pad = 8 - Numerics.Modulo8(bitsWritten);
85+
nint pad = 8 - Numerics.Modulo8(bitsWritten);
8686
if (pad != 8)
8787
{
8888
BitWriterUtils.WriteBits(buffer, bitsWritten, pad, 0);
@@ -100,14 +100,14 @@ protected override void Decompress(BufferedReadStream stream, int byteCount, int
100100
}
101101

102102
// Edge case for when we are at the last byte, but there are still some unwritten pixels left.
103-
if (pixelsWritten > 0 && pixelsWritten < this.width)
103+
if (pixelsWritten > 0 && pixelsWritten < (ulong)this.width)
104104
{
105105
bitReader.ReadNextRun();
106106
this.WritePixelRun(buffer, bitReader, bitsWritten);
107107
}
108108
}
109109

110-
private void WritePixelRun(Span<byte> buffer, T4BitReader bitReader, int bitsWritten)
110+
private void WritePixelRun(Span<byte> buffer, T4BitReader bitReader, nint bitsWritten)
111111
{
112112
if (bitReader.IsWhiteRun)
113113
{

src/ImageSharp/Formats/Tiff/Compression/Decompressors/T6TiffCompression.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ protected override void Decompress(BufferedReadStream stream, int byteCount, int
6060
var bitReader = new T6BitReader(stream, this.FillOrder, byteCount);
6161

6262
var referenceScanLine = new CcittReferenceScanline(this.isWhiteZero, this.width);
63-
int bitsWritten = 0;
63+
nint bitsWritten = 0;
6464
for (int y = 0; y < height; y++)
6565
{
6666
scanLine.Clear();
@@ -73,10 +73,10 @@ protected override void Decompress(BufferedReadStream stream, int byteCount, int
7373
}
7474
}
7575

76-
private int WriteScanLine(Span<byte> buffer, Span<byte> scanLine, int bitsWritten)
76+
private nint WriteScanLine(Span<byte> buffer, Span<byte> scanLine, nint bitsWritten)
7777
{
78-
int bitPos = Numerics.Modulo8(bitsWritten);
79-
int bufferPos = bitsWritten / 8;
78+
nint bitPos = Numerics.Modulo8(bitsWritten);
79+
nint bufferPos = bitsWritten / 8;
8080
for (nint i = 0; i < scanLine.Length; i++)
8181
{
8282
if (Unsafe.Add(ref MemoryMarshal.GetReference(scanLine), i) != this.white)
@@ -95,10 +95,10 @@ private int WriteScanLine(Span<byte> buffer, Span<byte> scanLine, int bitsWritte
9595
}
9696

9797
// Write padding bytes, if necessary.
98-
int remainder = bitsWritten % 8;
98+
nint remainder = Numerics.Modulo8(bitsWritten);
9999
if (remainder != 0)
100100
{
101-
int padding = 8 - remainder;
101+
nint padding = 8 - remainder;
102102
BitWriterUtils.WriteBits(buffer, bitsWritten, padding, 0);
103103
bitsWritten += padding;
104104
}

0 commit comments

Comments
 (0)