Browse Source

use Math.DivRem

pull/1901/head
Anton Firszov 4 years ago
parent
commit
52f2ce7c17
  1. 4
      src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupExtensions.cs
  2. 12
      src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.cs

4
src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupExtensions.cs

@ -37,7 +37,8 @@ namespace SixLabors.ImageSharp.Memory
Guard.MustBeGreaterThanOrEqualTo(length, 0, nameof(length));
Guard.MustBeLessThan(start, group.TotalLength, nameof(start));
int bufferIdx = (int)(start / group.BufferLength);
int bufferIdx = (int)Math.DivRem(start, group.BufferLength, out long bufferStartLong);
int bufferStart = (int)bufferStartLong;
// if (bufferIdx < 0 || bufferIdx >= group.Count)
if ((uint)bufferIdx >= group.Count)
@ -45,7 +46,6 @@ namespace SixLabors.ImageSharp.Memory
throw new ArgumentOutOfRangeException(nameof(start));
}
int bufferStart = (int)(start % group.BufferLength);
int bufferEnd = bufferStart + length;
Memory<T> memory = group[bufferIdx];

12
src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.cs

@ -289,10 +289,9 @@ namespace SixLabors.ImageSharp.Memory
/// </summary>
public Span<T> GetRemainingSliceOfBuffer(long start)
{
int bufferIdx = (int)(start / this.BufferLength);
int bufferStart = (int)(start % this.BufferLength);
Memory<T> memory = this[bufferIdx];
return memory.Span.Slice(bufferStart);
long bufferIdx = Math.DivRem(start, this.BufferLength, out long bufferStart);
Memory<T> memory = this[(int)bufferIdx];
return memory.Span.Slice((int)bufferStart);
}
public static bool CanSwapContent(MemoryGroup<T> target, MemoryGroup<T> source) =>
@ -314,8 +313,9 @@ namespace SixLabors.ImageSharp.Memory
private void GetMultiBufferPosition(int y, int width, out int bufferIdx, out int bufferStart)
{
long start = y * (long)width;
bufferIdx = (int)(start / this.BufferLength);
bufferStart = (int)(start % this.BufferLength);
long bufferIdxLong = Math.DivRem(start, this.BufferLength, out long bufferStartLong);
bufferIdx = (int)bufferIdxLong;
bufferStart = (int)bufferStartLong;
}
}
}

Loading…
Cancel
Save