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

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

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

Loading…
Cancel
Save