Skip to content

Commit 02ef334

Browse files
Merge pull request #3 from Open-NET-Libraries/fix/use-slice-with-memorypool
Use .Slice when getting a buffer from a memory pool.
2 parents be39e78 + e92efc9 commit 02ef334

File tree

3 files changed

+9
-5
lines changed

3 files changed

+9
-5
lines changed

source/Extensions.Subsets.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ static IEnumerable<Memory<T>> SubsetsCore(IReadOnlyList<T> source, int count, Me
8484
public static IEnumerable<ReadOnlyMemory<T>> SubsetsBuffered<T>(this IReadOnlyList<T> source, int count)
8585
{
8686
using var lease = MemoryPool<T>.Shared.Rent(count);
87-
Memory<T> buffer = lease.Memory;
87+
Memory<T> buffer = lease.Memory.Slice(0, count);
8888
ReadOnlyMemory<T> readBuffer = buffer;
8989
foreach (Memory<T> _ in Subsets(source, count, buffer))
9090
yield return readBuffer;
@@ -99,7 +99,7 @@ public static IEnumerable<ReadOnlyMemory<T>> SubsetsBuffered<T>(this IReadOnlyLi
9999
public static IEnumerable<T[]> Subsets<T>(this IReadOnlyList<T> source, int count)
100100
{
101101
using var lease = MemoryPool<T>.Shared.Rent(count);
102-
Memory<T> buffer = lease.Memory;
102+
Memory<T> buffer = lease.Memory.Slice(0, count);
103103
foreach (Memory<T> _ in Subsets(source, count, buffer))
104104
{
105105
var a = new T[count];
@@ -192,7 +192,7 @@ static IEnumerable<Memory<T>> SubsetsCore(ReadOnlyMemory<T> source, int count, M
192192
public static IEnumerable<ReadOnlyMemory<T>> SubsetsBuffered<T>(this ReadOnlyMemory<T> source, int count)
193193
{
194194
using var lease = MemoryPool<T>.Shared.Rent(count);
195-
Memory<T> buffer = lease.Memory;
195+
Memory<T> buffer = lease.Memory.Slice(0, count);
196196
ReadOnlyMemory<T> readBuffer = buffer;
197197
foreach (Memory<T> _ in Subsets(source, count, buffer))
198198
yield return readBuffer;
@@ -202,7 +202,7 @@ public static IEnumerable<ReadOnlyMemory<T>> SubsetsBuffered<T>(this ReadOnlyMem
202202
public static IEnumerable<T[]> Subsets<T>(this ReadOnlyMemory<T> source, int count)
203203
{
204204
using var lease = MemoryPool<T>.Shared.Rent(count);
205-
Memory<T> buffer = lease.Memory;
205+
Memory<T> buffer = lease.Memory.Slice(0, count);
206206
foreach (Memory<T> _ in Subsets(source, count, buffer))
207207
{
208208
var a = new T[count];

source/Open.Collections.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<PackageProjectUrl>https://github.com/Open-NET-Libraries/Open.Collections/</PackageProjectUrl>
1919
<RepositoryUrl>https://github.com/Open-NET-Libraries/Open.Collections/</RepositoryUrl>
2020
<RepositoryType>git</RepositoryType>
21-
<Version>3.1.4</Version>
21+
<Version>3.1.5</Version>
2222
<PackageReleaseNotes></PackageReleaseNotes>
2323
<PackageLicenseExpression>MIT</PackageLicenseExpression>
2424
<PublishRepositoryUrl>true</PublishRepositoryUrl>

testing/Open.Collections.Tests/SubsetTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Buffers;
23
using System.Collections.Immutable;
34
using System.Linq;
@@ -24,6 +25,9 @@ public void TestSubset1_2()
2425
int[][] actual = Set1.Subsets(2).ToArray();
2526
Assert.Equal(expected, actual);
2627

28+
ReadOnlyMemory<int> mem = Set1.ToArray();
29+
Assert.Equal(expected, mem.Subsets(2).ToArray());
30+
2731
int[][] progressive = Set1.SubsetsProgressive(2).ToArray();
2832
Assert.Equal(expected, progressive);
2933
}

0 commit comments

Comments
 (0)