Skip to content

Commit

Permalink
Add AsValueEnumerable() for Span<> and ReadOnlySpan<> (#337)
Browse files Browse the repository at this point in the history
  • Loading branch information
aalmada committed Feb 28, 2021
1 parent 87b6c24 commit b2ea96c
Show file tree
Hide file tree
Showing 35 changed files with 610 additions and 2,104 deletions.
2 changes: 1 addition & 1 deletion NetFabric.Hyperlinq.Abstractions/FunctionIn.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
{
public delegate TResult FunctionIn<T, out TResult>(in T arg);

public delegate TResult FunctionIn<T1, T2, out TResult>(in T1 arg, T2 arg2);
public delegate TResult FunctionIn<T1, in T2, out TResult>(in T1 arg, T2 arg2);
}
12 changes: 12 additions & 0 deletions NetFabric.Hyperlinq.Abstractions/FunctionWrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,18 @@

namespace NetFabric.Hyperlinq
{
public readonly struct FunctionWrapper<TResult>
: IFunction<TResult>
{
readonly Func<TResult> function;

public FunctionWrapper(Func<TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));

public TResult Invoke()
=> function();
}

public readonly struct FunctionWrapper<T, TResult>
: IFunction<T, TResult>
{
Expand Down
5 changes: 5 additions & 0 deletions NetFabric.Hyperlinq.Abstractions/IFunction.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
namespace NetFabric.Hyperlinq
{
public interface IFunction<out TResult>
{
TResult Invoke();
}

public interface IFunction<in T, out TResult>
{
TResult Invoke(T arg);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<PackageId>NetFabric.Hyperlinq.Abstractions</PackageId>
<Title>NetFabric.Hyperlinq.Abstractions</Title>
<Description>Abstractions for high performance enumeration.</Description>
<Version>1.1.0-beta01</Version>
<Version>1.1.0</Version>
<PackageIcon>Icon.png</PackageIcon>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageTags>netfabric, hyperlinq, abstractions, linq, enumeration, performance</PackageTags>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ public int Hyperlinq_Array()
[BenchmarkCategory("Array")]
[Benchmark]
public int Hyperlinq_Span()
=> array.AsSpan().Count();
=> array.AsSpan().AsValueEnumerable().Count();

[BenchmarkCategory("Array")]
[Benchmark]
Expand Down
2 changes: 1 addition & 1 deletion NetFabric.Hyperlinq.Benchmarks/Benchmarks/SumBenchmarks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public int Hyperlinq_Array()
[BenchmarkCategory("Array")]
[Benchmark]
public int Hyperlinq_Span()
=> array.AsSpan().Sum();
=> array.AsSpan().AsValueEnumerable().Sum();

//[BenchmarkCategory("Array")]
//[Benchmark]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ public void Count_With_ValidData_Must_Succeed(int[] source)
.Count(source);

// Act
var result = ArrayExtensions
.Count((ReadOnlySpan<int>)source.AsSpan());
var result = ((ReadOnlySpan<int>)source.AsSpan()).AsValueEnumerable()
.Count();

// Assert
_ = result.Must()
Expand All @@ -38,8 +38,8 @@ public void Count_Predicate_With_ValidData_Must_Succeed(int[] source, Func<int,
.Count();

// Act
var result = ArrayExtensions
.Where((ReadOnlySpan<int>)source.AsSpan(), predicate)
var result = ((ReadOnlySpan<int>)source.AsSpan()).AsValueEnumerable()
.Where(predicate)
.Count();

// Assert
Expand All @@ -59,8 +59,8 @@ public void Count_PredicateAt_With_ValidData_Must_Succeed(int[] source, Func<int
.Count();

// Act
var result = ArrayExtensions
.Where((ReadOnlySpan<int>)source.AsSpan(), predicate)
var result = ((ReadOnlySpan<int>)source.AsSpan()).AsValueEnumerable()
.Where(predicate)
.Count();

// Assert
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ public void ToArray_MemoryPool_Must_Succeed(int[] source)
.ToArray(source);

// Act
using var result = ArrayExtensions
.ToArray((ReadOnlySpan<int>)source.AsSpan(), pool);
using var result = ((ReadOnlySpan<int>)source.AsSpan()).AsValueEnumerable()
.ToArray(pool);

// Assert
_ = result.Memory.Must()
Expand All @@ -44,8 +44,8 @@ public void ToArray_Predicate_Must_Succeed(int[] source, Func<int, bool> predica
.ToArray();

// Act
var result = ArrayExtensions
.Where((ReadOnlySpan<int>)source.AsSpan(), predicate)
var result = ((ReadOnlySpan<int>)source.AsSpan()).AsValueEnumerable()
.Where(predicate)
.ToArray();

// Assert
Expand All @@ -68,8 +68,8 @@ public void ToArray_Predicate_MemoryPool_Must_Succeed(int[] source, Func<int, bo
.ToArray();

// Act
using var result = ArrayExtensions
.Where((ReadOnlySpan<int>)source.AsSpan(), predicate)
using var result = ((ReadOnlySpan<int>)source.AsSpan()).AsValueEnumerable()
.Where(predicate)
.ToArray(pool);

// Assert
Expand All @@ -92,8 +92,8 @@ public void ToArray_PredicateAt_Must_Succeed(int[] source, Func<int, int, bool>
.ToArray();

// Act
var result = ArrayExtensions
.Where((ReadOnlySpan<int>)source.AsSpan(), predicate)
var result = ((ReadOnlySpan<int>)source.AsSpan()).AsValueEnumerable()
.Where(predicate)
.ToArray();

// Assert
Expand All @@ -116,8 +116,8 @@ public void ToArray_PredicateAt_MemoryPool_Must_Succeed(int[] source, Func<int,
.ToArray();

// Act
using var result = ArrayExtensions
.Where((ReadOnlySpan<int>)source.AsSpan(), predicate)
using var result = ((ReadOnlySpan<int>)source.AsSpan()).AsValueEnumerable()
.Where(predicate)
.ToArray(pool);

// Assert
Expand All @@ -140,8 +140,8 @@ public void ToArray_Selector_Must_Succeed(int[] source, Func<int, string> select
.ToArray();

// Act
var result = ArrayExtensions
.Select((ReadOnlySpan<int>)source.AsSpan(), selector)
var result = ((ReadOnlySpan<int>)source.AsSpan()).AsValueEnumerable()
.Select(selector)
.ToArray();

// Assert
Expand All @@ -164,8 +164,8 @@ public void ToArray_Selector_MemoryPool_Must_Succeed(int[] source, Func<int, str
.ToArray();

// Act
using var result = ArrayExtensions
.Select((ReadOnlySpan<int>)source.AsSpan(), selector)
using var result = ((ReadOnlySpan<int>)source.AsSpan()).AsValueEnumerable()
.Select(selector)
.ToArray(pool);

// Assert
Expand All @@ -188,8 +188,8 @@ public void ToArray_SelectorAt_Must_Succeed(int[] source, Func<int, int, string>
.ToArray();

// Act
var result = ArrayExtensions
.Select((ReadOnlySpan<int>)source.AsSpan(), selector)
var result = ((ReadOnlySpan<int>)source.AsSpan()).AsValueEnumerable()
.Select(selector)
.ToArray();

// Assert
Expand All @@ -212,8 +212,8 @@ public void ToArray_SelectorAt_MemoryPool_Must_Succeed(int[] source, Func<int, i
.ToArray();

// Act
using var result = ArrayExtensions
.Select((ReadOnlySpan<int>)source.AsSpan(), selector)
using var result = ((ReadOnlySpan<int>)source.AsSpan()).AsValueEnumerable()
.Select(selector)
.ToArray(pool);

// Assert
Expand All @@ -237,8 +237,8 @@ public void ToArray_Predicate_Selector_Must_Succeed(int[] source, Func<int, bool
.ToArray();

// Act
var result = ArrayExtensions
.Where((ReadOnlySpan<int>)source.AsSpan(), predicate)
var result = ((ReadOnlySpan<int>)source.AsSpan()).AsValueEnumerable()
.Where(predicate)
.Select(selector)
.ToArray();

Expand All @@ -263,8 +263,8 @@ public void ToArray_Predicate_Selector_MemoryPool_Must_Succeed(int[] source, Fun
.ToArray();

// Act
using var result = ArrayExtensions
.Where((ReadOnlySpan<int>)source.AsSpan(), predicate)
using var result = ((ReadOnlySpan<int>)source.AsSpan()).AsValueEnumerable()
.Where(predicate)
.Select(selector)
.ToArray(pool);

Expand Down
Loading

0 comments on commit b2ea96c

Please sign in to comment.