IEnumerableUnpacker 1.0.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package IEnumerableUnpacker --version 1.0.2                
NuGet\Install-Package IEnumerableUnpacker -Version 1.0.2                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="IEnumerableUnpacker" Version="1.0.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add IEnumerableUnpacker --version 1.0.2                
#r "nuget: IEnumerableUnpacker, 1.0.2"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install IEnumerableUnpacker as a Cake Addin
#addin nuget:?package=IEnumerableUnpacker&version=1.0.2

// Install IEnumerableUnpacker as a Cake Tool
#tool nuget:?package=IEnumerableUnpacker&version=1.0.2                

IEnumerableUnpacker 📦

alternate text is missing from this package README image

License NuGet

IEnumerableUnpacker is a C# library that provides a quick and efficient way to unpack IEnumerable<T> to 1D and 2D arrays of T's members. It leverages parallel processing and optimized memory copying techniques to achieve high-performance array unpacking. 🚀

Key Features

  • Unpack IEnumerable<T> to 1D and 2D arrays of T's members
  • Utilize parallel processing for individual members âš¡
  • Identify blittable types and use unaligned memory copy for optimized performance
  • Support for generic types
  • Flexible attribute-based configuration for specifying output parameter names

Installation

You can install IEnumerableUnpacker via NuGet Package Manager:

Install-Package IEnumerableUnpacker

Usage

Here's an example of how to use IEnumerableUnpacker:

[Unpackable]
public class UnpackMe<Titem, Titem2, UselessGeneric>
{
    [Unpack("MyItegersOut")]
    public int[] myIntegers;

    [Unpack("MyIntegerOut")]
    public int myInteger;

    [Unpack("MyFloatsOut")]
    public float[] myFloats;

    [Unpack("MyGenericOut")]
    public Titem[] myGeneric;

    [Unpack("MyGeneric2Out")]
    public Titem2 myGeneric2;
}

public static unsafe void UnpackUnpackMe<Titem, Titem2, UselessGeneric>(this IEnumerable<UnpackMe<Titem, Titem2, UselessGeneric>> source, out int[,] MyItegersOut, out int[] MyIntegerOut, out float[,] MyFloatsOut, out Titem[,] MyGenericOut, out Titem2[] MyGeneric2Out)
{
    // Unpacking logic...
}

In this example:

  • The Unpackable attribute is used to mark the class for unpacking.
  • The Unpack attribute is used to specify the output parameter names for the unpacked arrays.
  • Generic types are supported and can be used as needed.
  • Parameters not labeled with the Unpack attribute will not be unpacked.

For more detailed benchmarks and comparisons, please visit the project repository. 📊

Contributing

Contributions are welcome! If you find any issues or have suggestions for improvements, please open an issue or submit a pull request on the GitHub repository. 😊

License

ArrayUnpacker is licensed under the MIT License.

Note

I've decided to use 2D arrays because that's what I use with TorchSharp. Unpacking to flat types might be faster, so feel free to reach out to me if it's required! 📫

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on IEnumerableUnpacker:

Package Downloads
RLMatrix

Deep Reinforcement Learning in .NET

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on IEnumerableUnpacker:

Repository Stars
asieradzk/RL_Matrix
Deep Reinforcement Learning in C#
Version Downloads Last updated
1.0.3 5,118 5/27/2024
1.0.2 100 5/27/2024
1.0.1 101 5/27/2024
1.0.0 103 5/27/2024