Rephidock.GeneralUtilities 1.2.0

dotnet add package Rephidock.GeneralUtilities --version 1.2.0
NuGet\Install-Package Rephidock.GeneralUtilities -Version 1.2.0
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="Rephidock.GeneralUtilities" Version="1.2.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Rephidock.GeneralUtilities --version 1.2.0
#r "nuget: Rephidock.GeneralUtilities, 1.2.0"
#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 Rephidock.GeneralUtilities as a Cake Addin
#addin nuget:?package=Rephidock.GeneralUtilities&version=1.2.0

// Install Rephidock.GeneralUtilities as a Cake Tool
#tool nuget:?package=Rephidock.GeneralUtilities&version=1.2.0

GeneralUtilities

GitHub Licence Badge

A package with general utilities that may be useful.

Contents

Arithmetic

Method Summary
(extension) int.TrueMod[1] Performs a modulo operation (% is remainder)
(extension) int.Wrap[1] Wraps value into given range
(extension) int.DigitalRoot[1] Calculates digital root (repeated digit sum)
(extension) int.GetFactors Returns all factors of an integer
(extension) float.DegToRad[1] Converts angle in degrees to radians
(extension) float.RadToDeg[1] Converts angle in radians to degrees
MoreMath.Lerp Linearly interpolates between 2 values
MoreMath.ReverseLerp Inverse of Lerp (returns lerp amount form value)
MoreMath.TabShift Returns column position of a character after tab
MoreMath.AngleDifference Calculates the shortest distance between 2 angles

Some methods also exist for BigInteger:

Method Summary
(extension) BigInteger.Sqrt Returns a square root of BigInteger
(extension) BigInteger.TrueMod Same as above
(extension) BigInteger.Wrap Same as above
(extension) BigInteger.DigitalRoot Same as above
(extension) BigInteger.GetFactors Same as above
(extension) BigInteger.ToDigits Same as below
BigIntMath.FromDigits Same as below
BigIntMath.Lerp Same as above

Arbitrary Base Representation

Use RadixMath to perform operations with digits with arbitrary base, represented as arrays of digit values:

Method Summary
(extension) int.ToDigits[1] Converts a value to an array of digits
RadixMath.FromDigits Converts an array of digits to a value
RadixMath.CountAllAscending Enumerates all numbers with a given places count

Other

Class Summary
(static) EnumConverter<TEnum,TInt> A generic enum ↔ integer converter
Method Summary
(extension) T.Yield<T> Wraps anything in a IEnumerable<T>
(extension) IEnumerable<T>.JoinString A fluent way to call string.Join
(extension) char[].JoinString A fluent way to call string constructor
(extension) T[].SplitIntoSegments "Splits" array into ArraySegment<T>s
(extension) Type.IsSubclassOrSelfOf Checks if a type is base type or subclass of it

This package also implements some methods that were added in .NET7 as extensions for .NET6

Extension Method for .NET6 Summary
IList<T>.AsReadOnly Constructs a ReadOnlyCollection<T>
IDictionary<TKey, TValue>.AsReadOnly Constructs a ReadOnlyDictionary<T>

.Randomness namespace

The .Randomness namespace relates to System.Random

Class Summary
ShuffleIndexMap The index map of a shuffle (to track where items ended up)
Extension method Summary
Random.NextUInt31 Returns a random int in range of [0, int.MaxValue]
Random.Chance Returns true with %-chance
Random.GetItem Returns a random item from a list or span
Random.GetDifferentItems Returns multiple different random items from a collection
Random.Shuffle Shuffles given items in-place
Random.ShuffleRemap Shuffles given items in-place and returns and index map

The following methods also exist and are extensions on collection interfaces to allow fluent syntax:

  • IReadOnlyList<T>.PickRandom is equivalent to Random.GetItem
  • IReadOnlyCollection<T>.PickMultipleDifferent is equivalent to Random.GetDifferentItems
  • IList<T>.Shuffle is equivalent to Random.Shuffle
  • IList<T>.ShuffleRemap is equivalent to Random.ShuffleRemap

.Color namespace

The .Color namespace relates to System.Drawing.Color

Method Summary
(extension) Color.WithAlpha Returns source Color with given alpha
(extension) Color.Transparent Returns source Color with alpha of 0
ColorMath.LerpColor Linearly interpolates between 2 colors
ColorMath.AlphaBlend Blend 2 colors with alpha-1-minus-alpha blending

[1]: Extension also exists for other numeric types.

* - Extension methods are static methods and can be used as such.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net6.0

    • No dependencies.
  • net8.0

    • No dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Rephidock.GeneralUtilities:

Package Downloads
Rephidock.AtomicAnimations

Classes for simple animations that accept delegates

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.2.0 76 4/17/2024
1.1.0 120 3/26/2024
1.0.0 93 2/23/2024
0.3.0 78 2/17/2024
0.2.0 90 2/12/2024
0.1.1 88 2/1/2024
0.1.0 76 1/31/2024

- Potentially lowered BigIntMath.Lerp precision loss for big values
     - Added GeneralEnumerableExtensions.SplitIntoSegments for "splitting" array into ArraySegments
     - Added ColorMath.AlphaBlend overload that works on (r,g,b,a) tuples of floats.
     - Added IDictionary<TKey, TValue>.AsReadOnly and IList<T>.AsReadOnly extension for net6