Skip to content

Commit

Permalink
Refactor Abstractions project
Browse files Browse the repository at this point in the history
  • Loading branch information
aalmada committed Dec 3, 2023
1 parent 9abf381 commit 9c1d7db
Show file tree
Hide file tree
Showing 15 changed files with 934 additions and 429 deletions.
3 changes: 2 additions & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@

<PropertyGroup>
<Authors>Antao Almada</Authors>
<Copyright>Copyright 2019-2021 Antao Almada</Copyright>
<Copyright>Copyright 2019-2023 Antao Almada</Copyright>
<LangVersion>latest</LangVersion>
<Features>strict</Features>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

</Project>
258 changes: 258 additions & 0 deletions NetFabric.Hyperlinq.Abstractions/ActionWrapper.cs

Large diffs are not rendered by default.

233 changes: 121 additions & 112 deletions NetFabric.Hyperlinq.Abstractions/AsyncFunctionWrapper.cs

Large diffs are not rendered by default.

13 changes: 6 additions & 7 deletions NetFabric.Hyperlinq.Abstractions/AsyncValueEnumerable.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
using System.Collections.Generic;
using System.Threading;

namespace NetFabric.Hyperlinq
namespace NetFabric.Hyperlinq;

public interface IAsyncValueEnumerable<out T, out TEnumerator>
: IAsyncEnumerable<T>
where TEnumerator : struct, IAsyncEnumerator<T>
{
public interface IAsyncValueEnumerable<out T, out TEnumerator>
: IAsyncEnumerable<T>
where TEnumerator : struct, IAsyncEnumerator<T>
{
new TEnumerator GetAsyncEnumerator(CancellationToken cancellationToken = default);
}
new TEnumerator GetAsyncEnumerator(CancellationToken cancellationToken = default);
}
6 changes: 0 additions & 6 deletions NetFabric.Hyperlinq.Abstractions/FunctionIn.cs

This file was deleted.

37 changes: 0 additions & 37 deletions NetFabric.Hyperlinq.Abstractions/FunctionInWrapper.cs

This file was deleted.

260 changes: 135 additions & 125 deletions NetFabric.Hyperlinq.Abstractions/FunctionWrapper.cs
Original file line number Diff line number Diff line change
@@ -1,165 +1,175 @@
using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

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

public FunctionWrapper(Func<TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
[StructLayout(LayoutKind.Auto)]
public readonly struct FunctionWrapper<TResult>
: IFunction<TResult>
{
readonly Func<TResult> function;

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke()
=> function();
public FunctionWrapper(Func<TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));

public static implicit operator FunctionWrapper<TResult>(Func<TResult> func)
=> new(func);
}

public readonly struct FunctionWrapper<T, TResult>
: IFunction<T, TResult>
{
readonly Func<T, TResult> function;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke()
=> function();

public FunctionWrapper(Func<T, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
public static implicit operator FunctionWrapper<TResult>(Func<TResult> func)
=> new(func);
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T arg)
=> function(arg);
[StructLayout(LayoutKind.Auto)]
public readonly struct FunctionWrapper<T, TResult>
: IFunction<T, TResult>
{
readonly Func<T, TResult> function;

public static implicit operator FunctionWrapper<T, TResult>(Func<T, TResult> func)
=> new(func);
}

public readonly struct FunctionWrapper<T1, T2, TResult>
: IFunction<T1, T2, TResult>
{
readonly Func<T1, T2, TResult> function;
public FunctionWrapper(Func<T, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));

public FunctionWrapper(Func<T1, T2, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T arg)
=> function(arg);

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2)
=> function(arg1, arg2);
public static implicit operator FunctionWrapper<T, TResult>(Func<T, TResult> func)
=> new(func);
}

public static implicit operator FunctionWrapper<T1, T2, TResult>(Func<T1, T2, TResult> func)
=> new(func);
}

public readonly struct FunctionWrapper<T1, T2, T3, TResult>
: IFunction<T1, T2, T3, TResult>
{
readonly Func<T1, T2, T3, TResult> function;
[StructLayout(LayoutKind.Auto)]
public readonly struct FunctionWrapper<T1, T2, TResult>
: IFunction<T1, T2, TResult>
{
readonly Func<T1, T2, TResult> function;

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

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3)
=> function(arg1, arg2, arg3);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2)
=> function(arg1, arg2);

public static implicit operator FunctionWrapper<T1, T2, T3, TResult>(Func<T1, T2, T3, TResult> func)
=> new(func);
}
public static implicit operator FunctionWrapper<T1, T2, TResult>(Func<T1, T2, TResult> func)
=> new(func);
}

public readonly struct FunctionWrapper<T1, T2, T3, T4, TResult>
: IFunction<T1, T2, T3, T4, TResult>
{
readonly Func<T1, T2, T3, T4, TResult> function;
[StructLayout(LayoutKind.Auto)]
public readonly struct FunctionWrapper<T1, T2, T3, TResult>
: IFunction<T1, T2, T3, TResult>
{
readonly Func<T1, T2, T3, TResult> function;

public FunctionWrapper(Func<T1, T2, T3, T4, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
public FunctionWrapper(Func<T1, T2, T3, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4)
=> function(arg1, arg2, arg3, arg4);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3)
=> function(arg1, arg2, arg3);

public static implicit operator FunctionWrapper<T1, T2, T3, T4, TResult>(Func<T1, T2, T3, T4, TResult> func)
=> new(func);
}
public static implicit operator FunctionWrapper<T1, T2, T3, TResult>(Func<T1, T2, T3, TResult> func)
=> new(func);
}

public readonly struct FunctionWrapper<T1, T2, T3, T4, T5, TResult>
: IFunction<T1, T2, T3, T4, T5, TResult>
{
readonly Func<T1, T2, T3, T4, T5, TResult> function;
[StructLayout(LayoutKind.Auto)]
public readonly struct FunctionWrapper<T1, T2, T3, T4, TResult>
: IFunction<T1, T2, T3, T4, TResult>
{
readonly Func<T1, T2, T3, T4, TResult> function;

public FunctionWrapper(Func<T1, T2, T3, T4, T5, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
public FunctionWrapper(Func<T1, T2, T3, T4, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
=> function(arg1, arg2, arg3, arg4, arg5);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4)
=> function(arg1, arg2, arg3, arg4);

public static implicit operator FunctionWrapper<T1, T2, T3, T4, T5, TResult>(Func<T1, T2, T3, T4, T5, TResult> func)
=> new(func);
}
public static implicit operator FunctionWrapper<T1, T2, T3, T4, TResult>(Func<T1, T2, T3, T4, TResult> func)
=> new(func);
}

public readonly struct FunctionWrapper<T1, T2, T3, T4, T5, T6, TResult>
: IFunction<T1, T2, T3, T4, T5, T6, TResult>
{
readonly Func<T1, T2, T3, T4, T5, T6, TResult> function;
[StructLayout(LayoutKind.Auto)]
public readonly struct FunctionWrapper<T1, T2, T3, T4, T5, TResult>
: IFunction<T1, T2, T3, T4, T5, TResult>
{
readonly Func<T1, T2, T3, T4, T5, TResult> function;

public FunctionWrapper(Func<T1, T2, T3, T4, T5, T6, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
public FunctionWrapper(Func<T1, T2, T3, T4, T5, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
=> function(arg1, arg2, arg3, arg4, arg5, arg6);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
=> function(arg1, arg2, arg3, arg4, arg5);

public static implicit operator FunctionWrapper<T1, T2, T3, T4, T5, T6, TResult>(Func<T1, T2, T3, T4, T5, T6, TResult> func)
=> new(func);
}
public static implicit operator FunctionWrapper<T1, T2, T3, T4, T5, TResult>(Func<T1, T2, T3, T4, T5, TResult> func)
=> new(func);
}

public readonly struct FunctionWrapper<T1, T2, T3, T4, T5, T6, T7, TResult>
: IFunction<T1, T2, T3, T4, T5, T6, T7, TResult>
{
readonly Func<T1, T2, T3, T4, T5, T6, T7, TResult> function;
[StructLayout(LayoutKind.Auto)]
public readonly struct FunctionWrapper<T1, T2, T3, T4, T5, T6, TResult>
: IFunction<T1, T2, T3, T4, T5, T6, TResult>
{
readonly Func<T1, T2, T3, T4, T5, T6, TResult> function;

public FunctionWrapper(Func<T1, T2, T3, T4, T5, T6, T7, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
public FunctionWrapper(Func<T1, T2, T3, T4, T5, T6, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)
=> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
=> function(arg1, arg2, arg3, arg4, arg5, arg6);

public static implicit operator FunctionWrapper<T1, T2, T3, T4, T5, T6, T7, TResult>(Func<T1, T2, T3, T4, T5, T6, T7, TResult> func)
=> new(func);
}
public static implicit operator FunctionWrapper<T1, T2, T3, T4, T5, T6, TResult>(Func<T1, T2, T3, T4, T5, T6, TResult> func)
=> new(func);
}

public readonly struct FunctionWrapper<T1, T2, T3, T4, T5, T6, T7, T8, TResult>
: IFunction<T1, T2, T3, T4, T5, T6, T7, T8, TResult>
{
readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> function;
[StructLayout(LayoutKind.Auto)]
public readonly struct FunctionWrapper<T1, T2, T3, T4, T5, T6, T7, TResult>
: IFunction<T1, T2, T3, T4, T5, T6, T7, TResult>
{
readonly Func<T1, T2, T3, T4, T5, T6, T7, TResult> function;

public FunctionWrapper(Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
public FunctionWrapper(Func<T1, T2, T3, T4, T5, T6, T7, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8)
=> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)
=> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7);

public static implicit operator FunctionWrapper<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> func)
=> new(func);
}
public static implicit operator FunctionWrapper<T1, T2, T3, T4, T5, T6, T7, TResult>(Func<T1, T2, T3, T4, T5, T6, T7, TResult> func)
=> new(func);
}

public readonly struct FunctionWrapper<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>
: IFunction<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>
{
readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> function;
[StructLayout(LayoutKind.Auto)]
public readonly struct FunctionWrapper<T1, T2, T3, T4, T5, T6, T7, T8, TResult>
: IFunction<T1, T2, T3, T4, T5, T6, T7, T8, TResult>
{
readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> function;

public FunctionWrapper(Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
public FunctionWrapper(Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9)
=> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8)
=> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);

public static implicit operator FunctionWrapper<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> func)
=> new(func);
}
public static implicit operator FunctionWrapper<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> func)
=> new(func);
}

[StructLayout(LayoutKind.Auto)]
public readonly struct FunctionWrapper<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>
: IFunction<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>
{
readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> function;

public FunctionWrapper(Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9)
=> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);

public static implicit operator FunctionWrapper<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> func)
=> new(func);
}
Loading

0 comments on commit 9c1d7db

Please sign in to comment.