Skip to content

Commit b9e4810

Browse files
Refactor DefaultShuffleX to use constants.
1 parent 9e7cf16 commit b9e4810

File tree

6 files changed

+103
-100
lines changed

6 files changed

+103
-100
lines changed

src/ImageSharp/Common/Helpers/Shuffle/IComponentShuffle.cs

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -46,23 +46,10 @@ internal interface IShuffle4 : IComponentShuffle
4646

4747
internal readonly struct DefaultShuffle4 : IShuffle4
4848
{
49-
private readonly byte p3;
50-
private readonly byte p2;
51-
private readonly byte p1;
52-
private readonly byte p0;
53-
54-
public DefaultShuffle4(byte p3, byte p2, byte p1, byte p0)
49+
public DefaultShuffle4(byte control)
5550
{
56-
DebugGuard.MustBeBetweenOrEqualTo<byte>(p3, 0, 3, nameof(p3));
57-
DebugGuard.MustBeBetweenOrEqualTo<byte>(p2, 0, 3, nameof(p2));
58-
DebugGuard.MustBeBetweenOrEqualTo<byte>(p1, 0, 3, nameof(p1));
59-
DebugGuard.MustBeBetweenOrEqualTo<byte>(p0, 0, 3, nameof(p0));
60-
61-
this.p3 = p3;
62-
this.p2 = p2;
63-
this.p1 = p1;
64-
this.p0 = p0;
65-
this.Control = Shuffle.MmShuffle(p3, p2, p1, p0);
51+
DebugGuard.MustBeBetweenOrEqualTo<byte>(control, 0, 3, nameof(control));
52+
this.Control = control;
6653
}
6754

6855
public byte Control { get; }
@@ -77,10 +64,7 @@ public void RunFallbackShuffle(ReadOnlySpan<byte> source, Span<byte> dest)
7764
ref byte sBase = ref MemoryMarshal.GetReference(source);
7865
ref byte dBase = ref MemoryMarshal.GetReference(dest);
7966

80-
int p3 = this.p3;
81-
int p2 = this.p2;
82-
int p1 = this.p1;
83-
int p0 = this.p0;
67+
Shuffle.InverseMmShuffle(this.Control, out int p3, out int p2, out int p1, out int p0);
8468

8569
for (int i = 0; i < source.Length; i += 4)
8670
{

src/ImageSharp/Common/Helpers/Shuffle/IPad3Shuffle4.cs

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,10 @@ internal interface IPad3Shuffle4 : IComponentShuffle
1414

1515
internal readonly struct DefaultPad3Shuffle4 : IPad3Shuffle4
1616
{
17-
private readonly byte p3;
18-
private readonly byte p2;
19-
private readonly byte p1;
20-
private readonly byte p0;
21-
22-
public DefaultPad3Shuffle4(byte p3, byte p2, byte p1, byte p0)
17+
public DefaultPad3Shuffle4(byte control)
2318
{
24-
DebugGuard.MustBeBetweenOrEqualTo<byte>(p3, 0, 3, nameof(p3));
25-
DebugGuard.MustBeBetweenOrEqualTo<byte>(p2, 0, 3, nameof(p2));
26-
DebugGuard.MustBeBetweenOrEqualTo<byte>(p1, 0, 3, nameof(p1));
27-
DebugGuard.MustBeBetweenOrEqualTo<byte>(p0, 0, 3, nameof(p0));
28-
29-
this.p3 = p3;
30-
this.p2 = p2;
31-
this.p1 = p1;
32-
this.p0 = p0;
33-
this.Control = Shuffle.MmShuffle(p3, p2, p1, p0);
19+
DebugGuard.MustBeBetweenOrEqualTo<byte>(control, 0, 3, nameof(control));
20+
this.Control = control;
3421
}
3522

3623
public byte Control { get; }
@@ -45,10 +32,7 @@ public void RunFallbackShuffle(ReadOnlySpan<byte> source, Span<byte> dest)
4532
ref byte sBase = ref MemoryMarshal.GetReference(source);
4633
ref byte dBase = ref MemoryMarshal.GetReference(dest);
4734

48-
int p3 = this.p3;
49-
int p2 = this.p2;
50-
int p1 = this.p1;
51-
int p0 = this.p0;
35+
Shuffle.InverseMmShuffle(this.Control, out int p3, out int p2, out int p1, out int p0);
5236

5337
Span<byte> temp = stackalloc byte[4];
5438
ref byte t = ref MemoryMarshal.GetReference(temp);

src/ImageSharp/Common/Helpers/Shuffle/IShuffle3.cs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,10 @@ internal interface IShuffle3 : IComponentShuffle
1414

1515
internal readonly struct DefaultShuffle3 : IShuffle3
1616
{
17-
private readonly byte p2;
18-
private readonly byte p1;
19-
private readonly byte p0;
20-
21-
public DefaultShuffle3(byte p2, byte p1, byte p0)
17+
public DefaultShuffle3(byte control)
2218
{
23-
DebugGuard.MustBeBetweenOrEqualTo<byte>(p2, 0, 2, nameof(p2));
24-
DebugGuard.MustBeBetweenOrEqualTo<byte>(p1, 0, 2, nameof(p1));
25-
DebugGuard.MustBeBetweenOrEqualTo<byte>(p0, 0, 2, nameof(p0));
26-
27-
this.p2 = p2;
28-
this.p1 = p1;
29-
this.p0 = p0;
30-
this.Control = Shuffle.MmShuffle(3, p2, p1, p0);
19+
DebugGuard.MustBeBetweenOrEqualTo<byte>(control, 0, 3, nameof(control));
20+
this.Control = control;
3121
}
3222

3323
public byte Control { get; }
@@ -42,9 +32,7 @@ public void RunFallbackShuffle(ReadOnlySpan<byte> source, Span<byte> dest)
4232
ref byte sBase = ref MemoryMarshal.GetReference(source);
4333
ref byte dBase = ref MemoryMarshal.GetReference(dest);
4434

45-
int p2 = this.p2;
46-
int p1 = this.p1;
47-
int p0 = this.p0;
35+
Shuffle.InverseMmShuffle(this.Control, out _, out int p2, out int p1, out int p0);
4836

4937
for (int i = 0; i < source.Length; i += 3)
5038
{

src/ImageSharp/Common/Helpers/Shuffle/IShuffle4Slice3.cs

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,10 @@ internal interface IShuffle4Slice3 : IComponentShuffle
1414

1515
internal readonly struct DefaultShuffle4Slice3 : IShuffle4Slice3
1616
{
17-
private readonly byte p2;
18-
private readonly byte p1;
19-
private readonly byte p0;
20-
21-
public DefaultShuffle4Slice3(byte p3, byte p2, byte p1, byte p0)
17+
public DefaultShuffle4Slice3(byte control)
2218
{
23-
DebugGuard.MustBeBetweenOrEqualTo<byte>(p3, 0, 3, nameof(p3));
24-
DebugGuard.MustBeBetweenOrEqualTo<byte>(p2, 0, 3, nameof(p2));
25-
DebugGuard.MustBeBetweenOrEqualTo<byte>(p1, 0, 3, nameof(p1));
26-
DebugGuard.MustBeBetweenOrEqualTo<byte>(p0, 0, 3, nameof(p0));
27-
28-
this.p2 = p2;
29-
this.p1 = p1;
30-
this.p0 = p0;
31-
this.Control = Shuffle.MmShuffle(p3, p2, p1, p0);
19+
DebugGuard.MustBeBetweenOrEqualTo<byte>(control, 0, 3, nameof(control));
20+
this.Control = control;
3221
}
3322

3423
public byte Control { get; }
@@ -43,9 +32,7 @@ public void RunFallbackShuffle(ReadOnlySpan<byte> source, Span<byte> dest)
4332
ref byte sBase = ref MemoryMarshal.GetReference(source);
4433
ref byte dBase = ref MemoryMarshal.GetReference(dest);
4534

46-
int p2 = this.p2;
47-
int p1 = this.p1;
48-
int p0 = this.p0;
35+
Shuffle.InverseMmShuffle(this.Control, out _, out int p2, out int p1, out int p0);
4936

5037
for (int i = 0, j = 0; i < dest.Length; i += 3, j += 4)
5138
{

0 commit comments

Comments
 (0)