1
0
mirror of https://github.com/oliverbooth/X10D synced 2024-11-12 23:55:41 +00:00

[ci skip] Document changes introduced with PR #68

This commit is contained in:
Oliver Booth 2023-03-23 13:53:12 +00:00
parent c6fdea1505
commit 7fbbb6ee64
No known key found for this signature in database
GPG Key ID: 20BEB9DC87961025

View File

@ -9,210 +9,222 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added ### Added
- Added new library X10D.DSharpPlus - Added new library X10D.DSharpPlus.
- Added new library X10D.Hosting - Added new library X10D.Hosting.
- Added .NET 7 target - Added .NET 7 target.
- X10D: Added `IntrinsicExtensions` and `IntrinsicUtility` which offer methods for vectors in `System.Runtime.Instrinsics`. (#68)
- X10D: Added `MathUtility.InverseLerp(float, float, float)` and `MathUtility.InverseLerp(double, double, double)` - X10D: Added `MathUtility.InverseLerp(float, float, float)` and `MathUtility.InverseLerp(double, double, double)`
- X10D: Added `MathUtility.ScaleRange(float, float, float, float, float)` - X10D: Added `MathUtility.ScaleRange(float, float, float, float, float)`
and `MathUtility.ScaleRange(double, double, double, double, double)` and `MathUtility.ScaleRange(double, double, double, double, double)`
- X10D: - X10D:
Added `Circle`, `CircleF`, `Cuboid`, `Ellipse`, `EllipseF`, `Line3D`, `Line`, `LineF`, `Polygon`, `PolygonF`, `Polyhedron`, Added `Circle`, `CircleF`, `Cuboid`, `Ellipse`, `EllipseF`, `Line3D`, `Line`, `LineF`, `Polygon`, `PolygonF`, `Polyhedron`,
and `Sphere`, to complement System.Drawing structs such as `Point` and `Rectangle` and `Sphere`, to complement System.Drawing structs such as `Point` and `Rectangle`
- X10D: Added `Color.Deconstruct()` - with optional alpha parameter - X10D: Added `Color.Deconstruct()` - with optional alpha parameter.
- X10D: Added `Color.GetClosestConsoleColor()` - X10D: Added `Color.GetClosestConsoleColor()`.
- X10D: Added `DateTime.GetIso8601WeekOfYear()` and `DateTimeOffset.GetIso8601WeekOfYear()` - X10D: Added `DateTime.GetIso8601WeekOfYear()` and `DateTimeOffset.GetIso8601WeekOfYear()`.
- X10D: Added `DirectoryInfo.Clear()` - X10D: Added `DirectoryInfo.Clear()`.
- X10D: Added `double.LinearToGamma([gamma])` and `float.LinearToGamma([gamma])` (#60) - X10D: Added `double.LinearToGamma([gamma])` and `float.LinearToGamma([gamma])`. (#60)
- X10D: Added `double.GammaToLinear([gamma])` and `float.GammaToLinear([gamma])` (#60) - X10D: Added `double.GammaToLinear([gamma])` and `float.GammaToLinear([gamma])`. (#60)
- X10D: Added `GreatestCommonFactor` for built-in integer types - X10D: Added `GreatestCommonFactor` for built-in integer types.
- X10D: Added `IEnumerable<T>.CountWhereNot(Func<T, bool>)` - X10D: Added `IEnumerable<T>.CountWhereNot(Func<T, bool>)`.
- X10D: Added `IEnumerable<T>.FirstWhereNot(Func<T, bool>)` - X10D: Added `IEnumerable<T>.FirstWhereNot(Func<T, bool>)`.
- X10D: Added `IEnumerable<T>.FirstWhereNotOrDefault(Func<T, bool>)` - X10D: Added `IEnumerable<T>.FirstWhereNotOrDefault(Func<T, bool>)`.
- X10D: Added `IEnumerable<T>.LastWhereNot(Func<T, bool>)` - X10D: Added `IEnumerable<T>.LastWhereNot(Func<T, bool>)`.
- X10D: Added `IEnumerable<T>.LastWhereNotOrDefault(Func<T, bool>)` - X10D: Added `IEnumerable<T>.LastWhereNotOrDefault(Func<T, bool>)`.
- X10D: Added `IEnumerable<T>.WhereNot(Func<T, bool>)` - X10D: Added `IEnumerable<T>.WhereNot(Func<T, bool>)`.
- X10D: Added `IEnumerable<T>.WhereNotNull()` - X10D: Added `IEnumerable<T>.WhereNotNull()`.
- X10D: Added `IList<T>.RemoveRange(Range)` - X10D: Added `IList<T>.RemoveRange(Range)`.
- X10D: Added `IList<T>.Swap(IList<T>)` (#62) - X10D: Added `IList<T>.Swap(IList<T>)`. (#62)
- X10D: Added `IReadOnlyList<T>.IndexOf(T[, int[, int]])` - X10D: Added `IReadOnlyList<T>.IndexOf(T[, int[, int]])`.
- X10D: Added `IReadOnlyList<T>.Slice(int[, int]])` - X10D: Added `IReadOnlyList<T>.Slice(int[, int]])`.
- X10D: Added `LowestCommonMultiple` for built-in integer types - X10D: Added `LowestCommonMultiple` for built-in integer types.
- X10D: Added `Wrap(T[, T])` for built-in numeric types (#60) - X10D: Added `Wrap(T[, T])` for built-in numeric types. (#60)
- X10D: Added `Nullable<T>.TryGetValue(out T)` (#61) - X10D: Added `Nullable<T>.TryGetValue(out T)`. (#61)
- X10D: Added `Point.IsOnLine(LineF)`, `Point.IsOnLine(PointF, PointF)`, and `Point.IsOnLine(Vector2, Vector2)` - X10D: Added `Point.IsOnLine(LineF)`, `Point.IsOnLine(PointF, PointF)`, and `Point.IsOnLine(Vector2, Vector2)`.
- X10D: Added `PointF.IsOnLine(LineF)`, `PointF.IsOnLine(PointF, PointF)`, and `PointF.IsOnLine(Vector2, Vector2)` - X10D: Added `PointF.IsOnLine(LineF)`, `PointF.IsOnLine(PointF, PointF)`, and `PointF.IsOnLine(Vector2, Vector2)`.
- X10D: Added `Point.ToSize()` - X10D: Added `Point.ToSize()`.
- X10D: Added `Point.ToSizeF()` - X10D: Added `Point.ToSizeF()`.
- X10D: Added `Point.ToVector2()` - X10D: Added `Point.ToVector2()`.
- X10D: Added `PointF.Round([float])` - X10D: Added `PointF.Round([float])`.
- X10D: Added `PointF.ToSizeF()` - X10D: Added `PointF.ToSizeF()`.
- X10D: Added `PointF.ToVector2()` for .NET < 6 - X10D: Added `PointF.ToVector2()` for .NET < 6.
- X10D: Added `PopCount()` for built-in integer types - X10D: Added `PopCount()` for built-in integer types.
- X10D: Added `Quaternion.ToAxisAngle(out float, out float)` - X10D: Added `Quaternion.ToAxisAngle(out float, out float)`.
- X10D: Added `Quaternion.ToVector3()` - X10D: Added `Quaternion.ToVector3()`.
- X10D: Added `Random.NextFrom(Span<T>)` and `Random.NextFrom(ReadOnlySpan<T>)` - X10D: Added `Random.NextFrom(Span<T>)` and `Random.NextFrom(ReadOnlySpan<T>)`.
- X10D: Added `ReadOnlySpan<char>.CountSubstring(char)` - X10D: Added `ReadOnlySpan<char>.CountSubstring(char)`.
- X10D: Added `ReadOnlySpan<char>.CountSubstring(ReadOnlySpan<char>[, StringComparison])` - X10D: Added `ReadOnlySpan<char>.CountSubstring(ReadOnlySpan<char>[, StringComparison])`.
- X10D: Added `ReadOnlySpan<char>.ToTimeSpan()` - X10D: Added `ReadOnlySpan<char>.ToTimeSpan()`.
- X10D: Added `ReadOnlySpan<T>.Split(T)` - X10D: Added `ReadOnlySpan<T>.Split(T)`.
- X10D: Added `ReadOnlySpan<T>.Split(ReadOnlySpan<T>)` - X10D: Added `ReadOnlySpan<T>.Split(ReadOnlySpan<T>)`.
- X10D: Added `RoundUpToPowerOf2()` for built-in integer types - X10D: Added `RoundUpToPowerOf2()` for built-in integer types.
- X10D: Added `Size.ToPoint()` - X10D: Added `Size.ToPoint()`.
- X10D: Added `Size.ToPointF()` - X10D: Added `Size.ToPointF()`.
- X10D: Added `Size.ToVector2()` - X10D: Added `Size.ToVector2()`.
- X10D: Added `Span<char>.CountSubstring(char)` - X10D: Added `Span<char>.CountSubstring(char)`.
- X10D: Added `Span<char>.CountSubstring(Span<char>[, StringComparison])` - X10D: Added `Span<char>.CountSubstring(Span<char>[, StringComparison])`.
- X10D: Added `Span<T>.Split(T)` - X10D: Added `Span<T>.Split(T)`.
- X10D: Added `Span<T>.Split(Span<T>)` - X10D: Added `Span<T>.Split(Span<T>)`.
- X10D: Added `string.CountSubstring(char)` - X10D: Added `string.CountSubstring(char)`.
- X10D: Added `string.CountSubstring(string[, StringComparison])` - X10D: Added `string.CountSubstring(string[, StringComparison])`.
- X10D: Added `string.IsEmpty()` - X10D: Added `string.IsEmpty()`.
- X10D: Added `string.IsWhiteSpace()` - X10D: Added `string.IsWhiteSpace()`.
- X10D: Added `string.IsNullOrEmpty()` - X10D: Added `string.IsNullOrEmpty()`.
- X10D: Added `string.IsNullOrWhiteSpace()` - X10D: Added `string.IsNullOrWhiteSpace()`.
- X10D: Added `TimeSpan.TryParse(ReadOnlySpan<char>, out TimeSpan)` - X10D: Added `TimeSpan.TryParse(ReadOnlySpan<char>, out TimeSpan)`.
- X10D: Added `Quaternion.Multiply(Vector3)` - this functions as an equivalent to Unity's `Quaternion * Vector3` operator - X10D: Added `Quaternion.Multiply(Vector3)` - this functions as an equivalent to Unity's `Quaternion * Vector3` operator.
- X10D: Added `Vector2.Deconstruct()` - X10D: Added `Vector2.Deconstruct()`.
- X10D: Added `Vector2.IsOnLine(LineF)`, `Vector2.IsOnLine(PointF, PointF)`, and `Vector2.IsOnLine(Vector2, Vector2)` - X10D: Added `Vector2.IsOnLine(LineF)`, `Vector2.IsOnLine(PointF, PointF)`, and `Vector2.IsOnLine(Vector2, Vector2)`.
- X10D: Added `Vector2.Round([float])` - X10D: Added `Vector2.Round([float])`.
- X10D: Added `Vector2.ToPointF()` - X10D: Added `Vector2.ToPointF()`.
- X10D: Added `Vector2.ToSizeF()` - X10D: Added `Vector2.ToSizeF()`.
- X10D: Added `Vector3.Deconstruct()` - X10D: Added `Vector3.Deconstruct()`.
- X10D: Added `Vector3.Round([float])` - X10D: Added `Vector3.Round([float])`.
- X10D: Added `Vector4.Deconstruct()` - X10D: Added `Vector4.Deconstruct()`.
- X10D: Added `Vector4.Round([float])` - X10D: Added `Vector4.Round([float])`.
- X10D.Unity: Added `DebugEx`, which mimics `UnityEngine.Debug` while offering more useful primitive drawing methods - X10D.Unity: Added `DebugEx`, which mimics `UnityEngine.Debug` while offering more useful primitive drawing methods.
- X10D.Unity: Added `System.Drawing.Color.ToUnityColor()` - X10D.Unity: Added `System.Drawing.Color.ToUnityColor()`.
- X10D.Unity: Added `System.Drawing.Color.ToUnityColor32()` - X10D.Unity: Added `System.Drawing.Color.ToUnityColor32()`.
- X10D.Unity: Added `Color.Deconstruct()` - with optional alpha parameter - X10D.Unity: Added `Color.Deconstruct()` - with optional alpha parameter.
- X10D.Unity: Added `Color.GetClosestConsoleColor()` - X10D.Unity: Added `Color.GetClosestConsoleColor()`.
- X10D.Unity: Added `Color.ToSystemDrawingColor()` - X10D.Unity: Added `Color.ToSystemDrawingColor()`.
- X10D.Unity: Added `Color32.Deconstruct()` - with optional alpha parameter - X10D.Unity: Added `Color32.Deconstruct()` - with optional alpha parameter.
- X10D.Unity: Added `Color32.GetClosestConsoleColor()` - X10D.Unity: Added `Color32.GetClosestConsoleColor()`.
- X10D.Unity: Added `Color32.ToSystemDrawingColor()` - X10D.Unity: Added `Color32.ToSystemDrawingColor()`.
- X10D.Unity: Added `Point.ToUnityVector2()` - X10D.Unity: Added `Point.ToUnityVector2()`.
- X10D.Unity: Added `Point.ToUnityVector2Int()` - X10D.Unity: Added `Point.ToUnityVector2Int()`.
- X10D.Unity: Added `PointF.ToUnityVector2()` - X10D.Unity: Added `PointF.ToUnityVector2()`.
- X10D.Unity: Added `Rect.ToSystemRectangleF()` - X10D.Unity: Added `Rect.ToSystemRectangleF()`.
- X10D.Unity: Added `RectInt.ToSystemRectangle()` - X10D.Unity: Added `RectInt.ToSystemRectangle()`.
- X10D.Unity: Added `RectInt.ToSystemRectangleF()` - X10D.Unity: Added `RectInt.ToSystemRectangleF()`.
- X10D.Unity: Added `Rectangle.ToUnityRect()` - X10D.Unity: Added `Rectangle.ToUnityRect()`.
- X10D.Unity: Added `Rectangle.ToUnityRectInt()` - X10D.Unity: Added `Rectangle.ToUnityRectInt()`.
- X10D.Unity: Added `RectangleF.ToUnityRect()` - X10D.Unity: Added `RectangleF.ToUnityRect()`.
- X10D.Unity: Added `Size.ToUnityVector2()` - X10D.Unity: Added `Size.ToUnityVector2()`.
- X10D.Unity: Added `Size.ToUnityVector2Int()` - X10D.Unity: Added `Size.ToUnityVector2Int()`.
- X10D.Unity: Added `SizeF.ToUnityVector2()` - X10D.Unity: Added `SizeF.ToUnityVector2()`.
- X10D.Unity: Added `Vector2.Deconstruct()` - X10D.Unity: Added `Vector2.Deconstruct()`.
- X10D.Unity: Added `Vector2.IsOnLine(LineF)`, `Vector2.IsOnLine(PointF, PointF)`, and `Vector2.IsOnLine(Vector2, Vector2)` - X10D.Unity: Added `Vector2.IsOnLine(LineF)`, `Vector2.IsOnLine(PointF, PointF)`, and `Vector2.IsOnLine(Vector2, Vector2)`.
- X10D.Unity: Added `Vector2Int.IsOnLine(LineF)`, `Vector2Int.IsOnLine(PointF, PointF)`, `Vector2Int.IsOnLine(Vector2, Vector2)`, - X10D.Unity: Added `Vector2Int.IsOnLine(LineF)`, `Vector2Int.IsOnLine(PointF, PointF)`, `Vector2Int.IsOnLine(Vector2, Vector2)`,
and `Vector2Int.IsOnLine(Vector2Int, Vector2Int)` and `Vector2Int.IsOnLine(Vector2Int, Vector2Int)`.
- X10D.Unity: Added `Vector2.Round([float])` - X10D.Unity: Added `Vector2.Round([float])`.
- X10D.Unity: Added `Vector2.ToSystemPointF()` - X10D.Unity: Added `Vector2.ToSystemPointF()`.
- X10D.Unity: Added `Vector2.ToSystemSizeF()` - X10D.Unity: Added `Vector2.ToSystemSizeF()`.
- X10D.Unity: Added `Vector2Int.Deconstruct()` - X10D.Unity: Added `Vector2Int.Deconstruct()`.
- X10D.Unity: Added `Vector2Int.ToSystemPoint()` - X10D.Unity: Added `Vector2Int.ToSystemPoint()`.
- X10D.Unity: Added `Vector2Int.ToSystemSize()` - X10D.Unity: Added `Vector2Int.ToSystemSize()`.
- X10D.Unity: Added `Vector2Int.ToSystemVector()` - X10D.Unity: Added `Vector2Int.ToSystemVector()`.
- X10D.Unity: Added `Vector2Int.WithX()` - X10D.Unity: Added `Vector2Int.WithX()`.
- X10D.Unity: Added `Vector2Int.WithY()` - X10D.Unity: Added `Vector2Int.WithY()`.
- X10D.Unity: Added `Vector3.Deconstruct()` - X10D.Unity: Added `Vector3.Deconstruct()`.
- X10D.Unity: Added `Vector3.Round([float])` - X10D.Unity: Added `Vector3.Round([float])`.
- X10D.Unity: Added `Vector3Int.Deconstruct()` - X10D.Unity: Added `Vector3Int.Deconstruct()`.
- X10D.Unity: Added `Vector3Int.ToSystemVector()` - X10D.Unity: Added `Vector3Int.ToSystemVector()`.
- X10D.Unity: Added `Vector3Int.WithX()` - X10D.Unity: Added `Vector3Int.WithX()`.
- X10D.Unity: Added `Vector3Int.WithY()` - X10D.Unity: Added `Vector3Int.WithY()`.
- X10D.Unity: Added `Vector3Int.WithZ()` - X10D.Unity: Added `Vector3Int.WithZ()`.
- X10D.Unity: Added `Vector4.Deconstruct()` - X10D.Unity: Added `Vector4.Deconstruct()`.
- X10D.Unity: Added `Vector4.Round([float])` - X10D.Unity: Added `Vector4.Round([float])`
- X10D.Unity: Added `WaitForFrames` yield instruction - X10D.Unity: Added `WaitForFrames` yield instruction.
- X10D.Unity: Added `WaitForKeyDown` yield instruction - X10D.Unity: Added `WaitForKeyDown` yield instruction.
- X10D.Unity: Added `WaitForKeyUp` yield instruction - X10D.Unity: Added `WaitForKeyUp` yield instruction.
- X10D.Unity: Added `WaitForSecondsNoAlloc` yield instruction - X10D.Unity: Added `WaitForSecondsNoAlloc` yield instruction.
- X10D.Unity: Added `WaitForSecondsRealtimeNoAlloc` yield instruction - X10D.Unity: Added `WaitForSecondsRealtimeNoAlloc` yield instruction.
- X10D.Unity: Added `WaitForTimeSpanNoAlloc` yield instruction - X10D.Unity: Added `WaitForTimeSpanNoAlloc` yield instruction.
- X10D.Unity: Added `WaitForTimeSpanRealtimeNoAlloc` yield instruction - X10D.Unity: Added `WaitForTimeSpanRealtimeNoAlloc` yield instruction.
### Fixed
- X10D: `T[].Clear` will now correctly clear the specified range of elements by
using the [GetOffsetAndLength](https://learn.microsoft.com/en-us/dotnet/api/system.range.getoffsetandlength?view=net-7.0)
method.
### Changed ### Changed
- X10D: `TimeSpanParser.TryParse` now accepts a nullable string, and returns false if this input is null or empty - X10D: Performance for integer `Unpack` has been dramatically improved using vector parallelization. (#68)
- X10D.Unity: `Singleton<T>` now caches instance where possible - X10D: Performance for `MemberInfo.HasCustomAttribute` has been improved. (#68)
- X10D: Performance for `Rune.Repeat` has been improved. (#68)
- X10D: `TimeSpanParser.TryParse` now accepts a nullable string, and returns false if this input is null or empty.
- X10D.Unity: `Singleton<T>` now caches instance where possible.
- X10D.Unity: Conversions between equivalent structures in `System.Numerics` and `UnityEngine` now make use of "unsafe"
reinterpretation, rather than constructing new instances. (#68)
## [3.1.0] - 2022-05-13 ## [3.1.0] - 2022-05-13
### Added ### Added
- Reintroduced Unity support - Reintroduced Unity support
- X10D: Added `Color.Inverted()` (#54) - X10D: Added `Color.Inverted()`. (#54)
- X10D: Added `Color.WithA()` (#55) - X10D: Added `Color.WithA()`. (#55)
- X10D: Added `Color.WithB()` (#55) - X10D: Added `Color.WithB()`. (#55)
- X10D: Added `Color.WithG()` (#55) - X10D: Added `Color.WithG()`. (#55)
- X10D: Added `Color.WithR()` (#55) - X10D: Added `Color.WithR()`. (#55)
- X10D: Added `ICollection<T>.ClearAndDisposeAll()` - X10D: Added `ICollection<T>.ClearAndDisposeAll()`.
- X10D: Added `ICollection<T>.ClearAndDisposeAllAsync()` - X10D: Added `ICollection<T>.ClearAndDisposeAllAsync()`.
- X10D: Added `IEnumerable<T>.For()` (#50) - X10D: Added `IEnumerable<T>.For()`. (#50)
- X10D: Added `IEnumerable<T>.ForEach()` (#50) - X10D: Added `IEnumerable<T>.ForEach()`. (#50)
- X10D: Added `IEnumerable<T>.DisposeAll()` - X10D: Added `IEnumerable<T>.DisposeAll()`.
- X10D: Added `IEnumerable<T>.DisposeAllAsync()` - X10D: Added `IEnumerable<T>.DisposeAllAsync()`.
- X10D: Added `char.IsEmoji` - X10D: Added `char.IsEmoji`.
- X10D: Added `ReadOnlySpan<T>.Count(Predicate<T>)` - X10D: Added `ReadOnlySpan<T>.Count(Predicate<T>)`.
- X10D: Added `Rune.IsEmoji` - X10D: Added `Rune.IsEmoji`.
- X10D: Added `Span<T>.Count(Predicate<T>)` - X10D: Added `Span<T>.Count(Predicate<T>)`.
- X10D: Added `string.IsEmoji` - X10D: Added `string.IsEmoji`.
- X10D: Added `Vector2.WithX()` (#56) - X10D: Added `Vector2.WithX()`. (#56)
- X10D: Added `Vector2.WithY()` (#56) - X10D: Added `Vector2.WithY()`. (#56)
- X10D: Added `Vector3.WithX()` (#56) - X10D: Added `Vector3.WithX()`. (#56)
- X10D: Added `Vector3.WithY()` (#56) - X10D: Added `Vector3.WithY()`. (#56)
- X10D: Added `Vector3.WithZ()` (#56) - X10D: Added `Vector3.WithZ()`. (#56)
- X10D: Added `Vector4.WithX()` (#56) - X10D: Added `Vector4.WithX()`. (#56)
- X10D: Added `Vector4.WithY()` (#56) - X10D: Added `Vector4.WithY()`. (#56)
- X10D: Added `Vector4.WithZ()` (#56) - X10D: Added `Vector4.WithZ()`. (#56)
- X10D: Added `Vector4.WithW()` (#56) - X10D: Added `Vector4.WithW()`. (#56)
- X10D.Unity: Added `Singleton<T>` class - X10D.Unity: Added `Singleton<T>` class.
- X10D.Unity: Added `Color.Inverted()` (#54) - X10D.Unity: Added `Color.Inverted()`. (#54)
- X10D.Unity: Added `Color.WithA()` (#55) - X10D.Unity: Added `Color.WithA()`. (#55)
- X10D.Unity: Added `Color.WithB()` (#55) - X10D.Unity: Added `Color.WithB()`. (#55)
- X10D.Unity: Added `Color.WithG()` (#55) - X10D.Unity: Added `Color.WithG()`. (#55)
- X10D.Unity: Added `Color.WithR()` (#55) - X10D.Unity: Added `Color.WithR()`. (#55)
- X10D.Unity: Added `Color32.Inverted()` (#54) - X10D.Unity: Added `Color32.Inverted()`. (#54)
- X10D.Unity: Added `Color32.WithA()` (#55) - X10D.Unity: Added `Color32.WithA()`. (#55)
- X10D.Unity: Added `Color32.WithB()` (#55) - X10D.Unity: Added `Color32.WithB()`. (#55)
- X10D.Unity: Added `Color32.WithG()` (#55) - X10D.Unity: Added `Color32.WithG()`. (#55)
- X10D.Unity: Added `Color32.WithR()` (#55) - X10D.Unity: Added `Color32.WithR()`. (#55)
- X10D.Unity: Added `Component.GetComponentsInChildrenOnly<T>()` - X10D.Unity: Added `Component.GetComponentsInChildrenOnly<T>()`.
- X10D.Unity: Added `GameObject.GetComponentsInChildrenOnly<T>()` - X10D.Unity: Added `GameObject.GetComponentsInChildrenOnly<T>()`.
- X10D.Unity: Added `GameObject.LookAt(GameObject[, Vector3])` - X10D.Unity: Added `GameObject.LookAt(GameObject[, Vector3])`.
- X10D.Unity: Added `GameObject.LookAt(Transform[, Vector3])` - X10D.Unity: Added `GameObject.LookAt(Transform[, Vector3])`.
- X10D.Unity: Added `GameObject.LookAt(Vector3[, Vector3])` - X10D.Unity: Added `GameObject.LookAt(Vector3[, Vector3])`.
- X10D.Unity: Added `GameObject.SetLayerRecursively(int)` (#57) - X10D.Unity: Added `GameObject.SetLayerRecursively(int)`. (#57)
- X10D.Unity: Added `GameObject.SetParent(GameObject[, bool])` - X10D.Unity: Added `GameObject.SetParent(GameObject[, bool])`.
- X10D.Unity: Added `GameObject.SetParent(Transform[, bool])` - X10D.Unity: Added `GameObject.SetParent(Transform[, bool])`.
- X10D.Unity: Added `System.Numerics.Quaternion.ToUnityQuaternion()` - X10D.Unity: Added `System.Numerics.Quaternion.ToUnityQuaternion()`.
- X10D.Unity: Added `Quaternion.ToSystemQuaternion()` - X10D.Unity: Added `Quaternion.ToSystemQuaternion()`.
- X10D.Unity: Added `Random.NextColorArgb()` - X10D.Unity: Added `Random.NextColorArgb()`.
- X10D.Unity: Added `Random.NextColor32Argb()` - X10D.Unity: Added `Random.NextColor32Argb()`.
- X10D.Unity: Added `Random.NextColorRgb()` - X10D.Unity: Added `Random.NextColorRgb()`.
- X10D.Unity: Added `Random.NextColor32Rgb()` - X10D.Unity: Added `Random.NextColor32Rgb()`.
- X10D.Unity: Added `Random.NextRotation()` - X10D.Unity: Added `Random.NextRotation()`.
- X10D.Unity: Added `Random.NextRotationUniform()` - X10D.Unity: Added `Random.NextRotationUniform()`.
- X10D.Unity: Added `Random.NextUnitVector2()` - X10D.Unity: Added `Random.NextUnitVector2()`.
- X10D.Unity: Added `Random.NextUnitVector3()` - X10D.Unity: Added `Random.NextUnitVector3()`.
- X10D.Unity: Added `Transform.LookAt(GameObject[, Vector3])` - X10D.Unity: Added `Transform.LookAt(GameObject[, Vector3])`.
- X10D.Unity: Added `Transform.SetParent(GameObject[, bool])` - X10D.Unity: Added `Transform.SetParent(GameObject[, bool])`.
- X10D.Unity: Added `System.Numerics.Vector2.ToUnityVector()` - X10D.Unity: Added `System.Numerics.Vector2.ToUnityVector()`.
- X10D.Unity: Added `System.Numerics.Vector3.ToUnityVector()` - X10D.Unity: Added `System.Numerics.Vector3.ToUnityVector()`.
- X10D.Unity: Added `System.Numerics.Vector4.ToUnityVector()` - X10D.Unity: Added `System.Numerics.Vector4.ToUnityVector()`.
- X10D.Unity: Added `Vector2.ToSystemVector()` - X10D.Unity: Added `Vector2.ToSystemVector()`.
- X10D.Unity: Added `Vector3.ToSystemVector()` - X10D.Unity: Added `Vector3.ToSystemVector()`.
- X10D.Unity: Added `Vector4.ToSystemVector()` - X10D.Unity: Added `Vector4.ToSystemVector()`.
- X10D.Unity: Added `Vector2.WithX()` (#56) - X10D.Unity: Added `Vector2.WithX()`. (#56)
- X10D.Unity: Added `Vector2.WithY()` (#56) - X10D.Unity: Added `Vector2.WithY()`. (#56)
- X10D.Unity: Added `Vector3.WithX()` (#56) - X10D.Unity: Added `Vector3.WithX()`. (#56)
- X10D.Unity: Added `Vector3.WithY()` (#56) - X10D.Unity: Added `Vector3.WithY()`. (#56)
- X10D.Unity: Added `Vector3.WithZ()` (#56) - X10D.Unity: Added `Vector3.WithZ()`. (#56)
- X10D.Unity: Added `Vector4.WithX()` (#56) - X10D.Unity: Added `Vector4.WithX()`. (#56)
- X10D.Unity: Added `Vector4.WithY()` (#56) - X10D.Unity: Added `Vector4.WithY()`. (#56)
- X10D.Unity: Added `Vector4.WithZ()` (#56) - X10D.Unity: Added `Vector4.WithZ()`. (#56)
- X10D.Unity: Added `Vector4.WithW()` (#56) - X10D.Unity: Added `Vector4.WithW()`. (#56)
## [3.0.0] - 2022-04-30 ## [3.0.0] - 2022-04-30
@ -222,144 +234,144 @@ please [open an issue](https://github.com/oliverbooth/X10D/issues)!
### Added ### Added
- Added `T.AsArrayValue()` - Added `T.AsArrayValue()`.
- Added `T.AsEnumerableValue()` - Added `T.AsEnumerableValue()`.
- Added `T.RepeatValue(int)` - Added `T.RepeatValue(int)`.
- Added `T.ToJson([JsonSerializerOptions])` - Added `T.ToJson([JsonSerializerOptions])`.
- Added `string.FromJson([JsonSerializerOptions])` - Added `string.FromJson([JsonSerializerOptions])`.
- Added `T[].AsReadOnly()` - Added `T[].AsReadOnly()`.
- Added `T[].Clear([Range])` and `T[].Clear(int, int)` - Added `T[].Clear([Range])` and `T[].Clear(int, int)`.
- Added `DateTime.IsLeapYear()` - Added `DateTime.IsLeapYear()`.
- Added `DateTimeOffset.IsLeapYear()` - Added `DateTimeOffset.IsLeapYear()`.
- Added `Endianness` enum - Added `Endianness` enum.
- Added `FileInfo.GetHash<T>()` - Added `FileInfo.GetHash<T>()`.
- Added `FileInfo.TryWriteHash<T>(Span<byte>, out int)` - Added `FileInfo.TryWriteHash<T>(Span<byte>, out int)`.
- Added `IComparable<T>.Clamp(T, T)` - this supersedes `Clamp` defined for hard-coded numeric types (#24) - Added `IComparable<T>.Clamp(T, T)` - this supersedes `Clamp` defined for hard-coded numeric types. (#24)
- Added `IComparable<T1>.GreaterThan(T2)` (#22) - Added `IComparable<T1>.GreaterThan(T2)`. (#22)
- Added `IComparable<T1>.GreaterThanOrEqualTo(T2)` (#22) - Added `IComparable<T1>.GreaterThanOrEqualTo(T2)`. (#22)
- Added `IComparable<T1>.LessThan(T2)` (#22) - Added `IComparable<T1>.LessThan(T2)`. (#22)
- Added `IComparable<T1>.LessThanOrEqualTo(T2)` (#22) - Added `IComparable<T1>.LessThanOrEqualTo(T2)`. (#22)
- Added `IComparable<T1>.Max(T)` (#23) - Added `IComparable<T1>.Max(T)`. (#23)
- Added `IComparable<T1>.Min(T)` (#23) - Added `IComparable<T1>.Min(T)`. (#23)
- Added `IDictionary<TKey, TValue>.AddOrUpdate()` - Added `IDictionary<TKey, TValue>.AddOrUpdate()`
- Added `IEnumerable<TSource>.Product()` and `IEnumerable<TSource>.Product<TResult>(Func<TSource>, TResult)` for all built-in - Added `IEnumerable<TSource>.Product()` and `IEnumerable<TSource>.Product<TResult>(Func<TSource>, TResult)` for all built-in
numeric types, computing the product of all (optionally transformed) elements numeric types, computing the product of all (optionally transformed) elements.
- Added `IList<T>.Fill(T)` and `IList<T>.Fill(T, int, int)` - Added `IList<T>.Fill(T)` and `IList<T>.Fill(T, int, int)`.
- Added `IPAddress.IsIPv4()` and `IPAddress.IsIPv6()` - Added `IPAddress.IsIPv4()` and `IPAddress.IsIPv6()`.
- Added `IReadOnlyList<byte>.Pack8Bit()` - Added `IReadOnlyList<byte>.Pack8Bit()`.
- Added `IReadOnlyList<byte>.Pack16Bit()` - Added `IReadOnlyList<byte>.Pack16Bit()`.
- Added `IReadOnlyList<byte>.Pack32Bit()` - Added `IReadOnlyList<byte>.Pack32Bit()`.
- Added `IReadOnlyList<byte>.Pack64Bit()` - Added `IReadOnlyList<byte>.Pack64Bit()`.
- Added `MemberInfo.HasCustomAttribute<T>()` and `MemberInfo.HasCustomAttribute(Type)` - Added `MemberInfo.HasCustomAttribute<T>()` and `MemberInfo.HasCustomAttribute(Type)`.
- Added `defaultValue` overload for `MemberInfo.SelectFromCustomAttribute<TAttr, TReturn>()` - Added `defaultValue` overload for `MemberInfo.SelectFromCustomAttribute<TAttr, TReturn>()`.
- Added `Random.Next<T>()` (returns a random field from a specified enum type) - Added `Random.Next<T>()` (returns a random field from a specified enum type).
- Added `Random.NextByte([byte[, byte]])` - Added `Random.NextByte([byte[, byte]])`.
- Added `Random.NextColorArgb()`, returning a random color in RGB space, including random alpha - Added `Random.NextColorArgb()`, returning a random color in RGB space, including random alpha.
- Added `Random.NextColorRgb()`, returning a random color in RGB space with alpha 255 - Added `Random.NextColorRgb()`, returning a random color in RGB space with alpha 255.
- Added `Random.NextDouble(double[, double])` - Added `Random.NextDouble(double[, double])`.
- Added `Random.NextInt16([short[, short]])` - Added `Random.NextInt16([short[, short]])`.
- Added `Random.NextSingle(float[, float])` (#34) - Added `Random.NextSingle(float[, float])`. (#34)
- Added `Random.NextUnitVector2()` - Added `Random.NextUnitVector2()`.
- Added `Random.NextUnitVector3()` - Added `Random.NextUnitVector3()`.
- Added `Random.NextRotation()` - Added `Random.NextRotation()`.
- Added `Rune.Repeat(int)` - Added `Rune.Repeat(int)`.
- Added `byte.IsEven()` - Added `byte.IsEven()`.
- Added `byte.IsOdd()` - Added `byte.IsOdd()`.
- Added `byte.IsPrime()` - Added `byte.IsPrime()`.
- Added `byte.UnpackBits()` - Added `byte.UnpackBits()`.
- Added `byte.RangeTo(byte)`, `byte.RangeTo(short)`, `byte.RangeTo(int)`, and `byte.RangeTo(long)` - Added `byte.RangeTo(byte)`, `byte.RangeTo(short)`, `byte.RangeTo(int)`, and `byte.RangeTo(long)`.
- Added `int.Mod(int)` - Added `int.Mod(int)`.
- Added `int.RangeTo(int)`, and `int.RangeTo(long)` - Added `int.RangeTo(int)`, and `int.RangeTo(long)`.
- Added `int.UnpackBits()` - Added `int.UnpackBits()`.
- Added `long.Mod(long)` - Added `long.Mod(long)`.
- Added `long.RangeTo(long)` - Added `long.RangeTo(long)`.
- Added `long.UnpackBits()` - Added `long.UnpackBits()`.
- Added `sbyte.IsEven()` - Added `sbyte.IsEven()`.
- Added `sbyte.IsOdd()` - Added `sbyte.IsOdd()`.
- Added `sbyte.IsPrime()` - Added `sbyte.IsPrime()`.
- Added `sbyte.Mod(sbyte)` - Added `sbyte.Mod(sbyte)`.
- Added `short.IsEven()` - Added `short.IsEven()`.
- Added `short.IsOdd()` - Added `short.IsOdd()`.
- Added `short.Mod(short)` - Added `short.Mod(short)`.
- Added `short.RangeTo(short)`, `short.RangeTo(int)`, and `short.RangeTo(long)` - Added `short.RangeTo(short)`, `short.RangeTo(int)`, and `short.RangeTo(long)`.
- Added `short.UnpackBits()` - Added `short.UnpackBits()`.
- Added `string.IsPalindrome()` - Added `string.IsPalindrome()`.
- Added `Stream.GetHash<T>()` - Added `Stream.GetHash<T>()`.
- Added `Stream.TryWriteHash<T>(Span<byte>, out int)` - Added `Stream.TryWriteHash<T>(Span<byte>, out int)`.
- Added `Stream.ReadInt16([Endian])` - Added `Stream.ReadInt16([Endian])`.
- Added `Stream.ReadInt32([Endian])` - Added `Stream.ReadInt32([Endian])`.
- Added `Stream.ReadInt64([Endian])` - Added `Stream.ReadInt64([Endian])`.
- Added `Stream.ReadUInt16([Endian])` - Added `Stream.ReadUInt16([Endian])`.
- Added `Stream.ReadUInt32([Endian])` - Added `Stream.ReadUInt32([Endian])`.
- Added `Stream.ReadUInt64([Endian])` - Added `Stream.ReadUInt64([Endian])`.
- Added `Stream.Write(short, [Endian])` - Added `Stream.Write(short, [Endian])`.
- Added `Stream.Write(int, [Endian])` - Added `Stream.Write(int, [Endian])`.
- Added `Stream.Write(long, [Endian])` - Added `Stream.Write(long, [Endian])`.
- Added `Stream.Write(ushort, [Endian])` - Added `Stream.Write(ushort, [Endian])`.
- Added `Stream.Write(uint, [Endian])` - Added `Stream.Write(uint, [Endian])`.
- Added `Stream.Write(ulong, [Endian])` - Added `Stream.Write(ulong, [Endian])`.
- Added `TimeSpan.Ago()` - Added `TimeSpan.Ago()`.
- Added `TimeSpan.FromNow()` - Added `TimeSpan.FromNow()`.
- Added `TimeSpanParser.TryParse` which supersedes `TimeSpanParser.Parse` - Added `TimeSpanParser.TryParse` which supersedes `TimeSpanParser.Parse`.
- Added `Sqrt()` and `ComplexSqrt()` for all built-in decimal types - Added `Sqrt()` and `ComplexSqrt()` for all built-in decimal types.
- Added `All()` and `Any()` for `Span<T>` and `ReadOnlySpan<T>`, mimicking the corresponding methods in `System.Linq` - Added `All()` and `Any()` for `Span<T>` and `ReadOnlySpan<T>`, mimicking the corresponding methods in `System.Linq`.
- Added `Sign()` for built-in numeric types. For unsigned types, this never returns -1 - Added `Sign()` for built-in numeric types. For unsigned types, this never returns -1.
- Added `Type.Implements<T>()` and `Type.Implements(Type)` (#25) - Added `Type.Implements<T>()` and `Type.Implements(Type)`. (#25)
- Added `Type.Inherits<T>()` and `Type.Inherits(Type)` (#25) - Added `Type.Inherits<T>()` and `Type.Inherits(Type)`. (#25)
- Added `DigitalRoot` function for built-in integer types - Added `DigitalRoot` function for built-in integer types.
- Added `Factorial` function for built-in integer types - Added `Factorial` function for built-in integer types.
- Added `HostToNetworkOrder` and `NetworkToHostOrder` for `short`, `int`, and `long` - Added `HostToNetworkOrder` and `NetworkToHostOrder` for `short`, `int`, and `long`.
- Added `IsLeapYear` function for `DateTime` and `DateTimeOffset`, as well as built-in numeric types - Added `IsLeapYear` function for `DateTime` and `DateTimeOffset`, as well as built-in numeric types.
- Added `MultiplicativePersistence` function for built-in integer types - Added `MultiplicativePersistence` function for built-in integer types.
- Added `RotateLeft` and `RotateRight` for built-in integer types - Added `RotateLeft` and `RotateRight` for built-in integer types.
- Added trigonometric functions for built-in numeric types, - Added trigonometric functions for built-in numeric types,
including `Acos()`, `Asin()`, `Atan()`, `Atan2()`, `Cos()`, `Sin()`, `Tan()` (#49) including `Acos()`, `Asin()`, `Atan()`, `Atan2()`, `Cos()`, `Sin()`, `Tan()` (#49)
- Added time-related extension methods for built-in numeric types, - Added time-related extension methods for built-in numeric types,
including `Milliseconds()`, `Seconds()`, `Minutes()`, `Hours()`, `Days()`, and `Weeks()`. `Ticks()` is also available, but only including `Milliseconds()`, `Seconds()`, `Minutes()`, `Hours()`, `Days()`, and `Weeks()`. `Ticks()` is also available, but only
for integers; not floating point for integers; not floating point.
- Added `StringBuilderReader` (inheriting `TextReader`) which allows reading from a `StringBuilder` without consuming the - Added `StringBuilderReader` (inheriting `TextReader`) which allows reading from a `StringBuilder` without consuming the
underlying string underlying string.
- Added extension methods for `System.Decimal` - Added extension methods for `System.Decimal`.
### Changed ### Changed
- Updated to .NET 6 (#45) - Updated to .NET 6. (#45)
- Methods defined to accept `byte[]` have been changed accept `IReadOnlyList<byte>` - Methods defined to accept `byte[]` have been changed accept `IReadOnlyList<byte>`.
- Extension methods are now defined in appropriate child namespaces to reduce the risk of name collisions (#7) - Extension methods are now defined in appropriate child namespaces to reduce the risk of name collisions. (#7)
- `char[].Random(int)`, `char[].Random(int, int)`, `IEnumerable<char>.Random(int)`, and `IEnumerable<char>.Random(int, int)` have - `char[].Random(int)`, `char[].Random(int, int)`, `IEnumerable<char>.Random(int)`, and `IEnumerable<char>.Random(int, int)` have
been redefined as `Random.NextString(IReadOnlyList<char>, int)` been redefined as `Random.NextString(IReadOnlyList<char>, int)`.
- `IComparable<T>.Between(T, T)` has been redefined as `IComparable<T1>.Between(T2, T3, [InclusiveOptions])` to allow comparison - `IComparable<T>.Between(T, T)` has been redefined as `IComparable<T1>.Between(T2, T3, [InclusiveOptions])` to allow comparison
of disparate yet comparable types, and also offers inclusivity options of disparate yet comparable types, and also offers inclusivity options.
- `DateTime` extensions now wrap `DateTimeOffset` extensions - `DateTime` extensions now wrap `DateTimeOffset` extensions.
- `DateTime.ToUnixTimestamp([bool])` has been redefined as `DateTime.ToUnixTimeMilliseconds()` and `DateTime.ToUnixTimeSeconds()` - `DateTime.ToUnixTimestamp([bool])` has been redefined as `DateTime.ToUnixTimeMilliseconds()` and `DateTime.ToUnixTimeSeconds()`.
- `Dictionary<T1, T2>.ToGetParameters()`, `IDictionary<T1, T2>.ToGetParameters()`, - `Dictionary<T1, T2>.ToGetParameters()`, `IDictionary<T1, T2>.ToGetParameters()`,
and `IReadOnlyDictionary<T1, T2>.ToGetParameters()`, has been redefined as `IEnumerable<KeyValuePair<T1, T2>>.ToGetParameters()` and `IReadOnlyDictionary<T1, T2>.ToGetParameters()`, has been redefined as `IEnumerable<KeyValuePair<T1, T2>>.ToGetParameters()`.
- `Dictionary<T1, T2>.ToConnectionString()`, `IDictionary<T1, T2>.ToConnectionString()`, - `Dictionary<T1, T2>.ToConnectionString()`, `IDictionary<T1, T2>.ToConnectionString()`,
and `IReadOnlyDictionary<T1, T2>.ToConnectionString()`, has been redefined and `IReadOnlyDictionary<T1, T2>.ToConnectionString()`, has been redefined
as `IEnumerable<KeyValuePair<T1, T2>>.ToConnectionString()` as `IEnumerable<KeyValuePair<T1, T2>>.ToConnectionString()`.
- `IList<T>.OneOf([Random])` and `IEnumerable<T>.OneOf([Random])` have been redefined as `Random.NextFrom<T>(IEnumerable<T>)` to - `IList<T>.OneOf([Random])` and `IEnumerable<T>.OneOf([Random])` have been redefined as `Random.NextFrom<T>(IEnumerable<T>)` to
fall in line with the naming convention of `System.Random` (#21) fall in line with the naming convention of `System.Random`. (#21)
- `IList<T>.Shuffle([Random])` now uses a Fisher-Yates shuffle implementation - `IList<T>.Shuffle([Random])` now uses a Fisher-Yates shuffle implementation.
- `IList<T>.Shuffle([Random])` has been repurposed to shuffle the list in place, rather than returning a new enumerable - `IList<T>.Shuffle([Random])` has been repurposed to shuffle the list in place, rather than returning a new enumerable.
- `IEnumerable<T>.Shuffle([Random])` has been renamed to `IEnumerable<T>.Shuffled([Random])` to avoid confusion - `IEnumerable<T>.Shuffle([Random])` has been renamed to `IEnumerable<T>.Shuffled([Random])` to avoid confusion
with `IList<T>.Shuffle([Random])` with `IList<T>.Shuffle([Random])`.
- `Random.CoinToss()` has been redefined as `Random.NextBoolean()` to fall in line with the naming convention of `System.Random` - `Random.CoinToss()` has been redefined as `Random.NextBoolean()` to fall in line with the naming convention of `System.Random`.
- `Random.OneOf<T>(T[])` and `Random.OneOf<T>(IList<T>)` have been redefined as `Random.NextFrom<T>(IEnumerable<T>)` to fall in - `Random.OneOf<T>(T[])` and `Random.OneOf<T>(IList<T>)` have been redefined as `Random.NextFrom<T>(IEnumerable<T>)` to fall in
line with the naming convention of `System.Random` line with the naming convention of `System.Random`.
- `Enum.Next([bool])` and `Enum.Previous([bool])` have been redefined - `Enum.Next([bool])` and `Enum.Previous([bool])` have been redefined.
as `Enum.Next()`, `Enum.Previous()`, `Enum.NextUnchecked()`, `Enum.PreviousUnchecked()`. The `Unchecked` variants of these as `Enum.Next()`, `Enum.Previous()`, `Enum.NextUnchecked()`, `Enum.PreviousUnchecked()`. The `Unchecked` variants of these
methods do not perform index validation, and will throw `IndexOutOfRangeException` when attempting to access an invalid index. methods do not perform index validation, and will throw `IndexOutOfRangeException` when attempting to access an invalid index.
The checked variants will perform a modulo to wrap the index The checked variants will perform a modulo to wrap the index.
- Seperated `string.WithAlternative(string, [bool])` to `string.WithEmptyAlternative(string)` - Seperated `string.WithAlternative(string, [bool])` to `string.WithEmptyAlternative(string)`
and `string.WithWhiteSpaceAlternative(string)` and `string.WithWhiteSpaceAlternative(string)`.
- `string.AsNullIfEmpty()` and `string.AsNullIfWhiteSpace()` now accept a nullable `string` - `string.AsNullIfEmpty()` and `string.AsNullIfWhiteSpace()` now accept a nullable `string`.
- `IEnumerable<byte>.GetString([Encoding])` has been renamed to `IReadOnlyList<byte>.ToString` and its `Encoding` parameter has - `IEnumerable<byte>.GetString([Encoding])` has been renamed to `IReadOnlyList<byte>.ToString` and its `Encoding` parameter has
been made non-optional been made non-optional.
- Fixed a bug where `IEnumerable<KeyValuePair<K,V>>.ToConnectionString()` would not sanitize types with custom `ToString()` - Fixed a bug where `IEnumerable<KeyValuePair<K,V>>.ToConnectionString()` would not sanitize types with custom `ToString()`
implementation (#20) implementation. (#20)
Renamed `string.Random(int[, Random])` to `string.Randomize(int[, Random])` Renamed `string.Random(int[, Random])` to `string.Randomize(int[, Random])`.
- Redefined `char[].Random(int)`, `char[].Random(int, Random)`, `IEnumerable<char>.Random(int)`, - Redefined `char[].Random(int)`, `char[].Random(int, Random)`, `IEnumerable<char>.Random(int)`,
and `IEnumerable<char>.Random(int, Random)`, as `Random.NextString(IReadOnlyList<char>, int)` and `IEnumerable<char>.Random(int, Random)`, as `Random.NextString(IReadOnlyList<char>, int)`.
- Improved performance for: - Improved performance for:
- `string.IsLower()` - `string.IsLower()`
- `string.IsUpper()` - `string.IsUpper()`
@ -370,33 +382,33 @@ please [open an issue](https://github.com/oliverbooth/X10D/issues)!
- Indefinitely suspended Unity support, until such a time that Unity can be updated to a newer version of .NET. - Indefinitely suspended Unity support, until such a time that Unity can be updated to a newer version of .NET.
See: https://forum.unity.com/threads/unity-future-net-development-status.1092205/ See: https://forum.unity.com/threads/unity-future-net-development-status.1092205/
- Removed `bool.And(bool)` - Removed `bool.And(bool)`.
- Removed `bool.NAnd(bool)` - Removed `bool.NAnd(bool)`.
- Removed `bool.NOr(bool)` - Removed `bool.NOr(bool)`.
- Removed `bool.Not(bool)` - Removed `bool.Not(bool)`.
- Removed `bool.Or(bool)` - Removed `bool.Or(bool)`.
- Removed `bool.ToByte()` - Removed `bool.ToByte()`.
- Removed `bool.ToInt16()` - Removed `bool.ToInt16()`.
- Removed `bool.ToInt64()` - Removed `bool.ToInt64()`.
- Removed `bool.XNOr()` - Removed `bool.XNOr()`.
- Removed `bool.XOr()` - Removed `bool.XOr()`.
- Removed `IConvertible.To<T>([IFormatProvider])` (#13) - Removed `IConvertible.To<T>([IFormatProvider])`. (#13)
- Removed `IConvertible.ToOrDefault<T>([IFormatProvider])` (#13) - Removed `IConvertible.ToOrDefault<T>([IFormatProvider])`. (#13)
- Removed `IConvertible.ToOrDefault<T>(out T, [IFormatProvider])` (#13) - Removed `IConvertible.ToOrDefault<T>(out T, [IFormatProvider])`. (#13)
- Removed `IConvertible.ToOrNull<T>([IFormatProvider])` (#13) - Removed `IConvertible.ToOrNull<T>([IFormatProvider])`. (#13)
- Removed `IConvertible.ToOrNull<T>(out T, [IFormatProvider])` (#13) - Removed `IConvertible.ToOrNull<T>(out T, [IFormatProvider])`. (#13)
- Removed `IConvertible.ToOrOther<T>(T, [IFormatProvider])` (#13) - Removed `IConvertible.ToOrOther<T>(T, [IFormatProvider])`. (#13)
- Removed `IConvertible.ToOrOther<T>(out T, T, [IFormatProvider])` (#13) - Removed `IConvertible.ToOrOther<T>(out T, T, [IFormatProvider])`. (#13)
- Removed `IEnumerable<T>.Split(int)` - this functionality is now provided by .NET in the form of the `Chunk` method. - Removed `IEnumerable<T>.Split(int)` - this functionality is now provided by .NET in the form of the `Chunk` method.
See: https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.chunk?view=net-6.0 See: https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.chunk?view=net-6.0.
- Removed `MemberInfo.GetDefaultValue()` (use `SelectFromCustomAttribute()` instead) - Removed `MemberInfo.GetDefaultValue()` (use `SelectFromCustomAttribute()` instead).
- Removed `MemberInfo.GetDescription()` (use `SelectFromCustomAttribute()` instead) - Removed `MemberInfo.GetDescription()` (use `SelectFromCustomAttribute()` instead).
- Removed `int.ToBoolean()` - Removed `int.ToBoolean()`.
- Removed `long.ToBoolean()` - Removed `long.ToBoolean()`.
- Removed `short.ToBoolean()` - Removed `short.ToBoolean()`.
- Removed `uint.ToBoolean()` - Removed `uint.ToBoolean()`.
- Removed `ushort.ToBoolean()` - Removed `ushort.ToBoolean()`.
- Removed `ulong.ToBoolean()` - Removed `ulong.ToBoolean()`.
- Removed `WaitHandle.WaitOneAsync()`. For suspensions of execution during asynchronous operations, favour `TaskCompletionSource` - Removed `WaitHandle.WaitOneAsync()`. For suspensions of execution during asynchronous operations, favour `TaskCompletionSource`
or `TaskCompletionSource<T>`. or `TaskCompletionSource<T>`.
See: https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.taskcompletionsource?view=net-6.0 See: https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.taskcompletionsource?view=net-6.0
@ -406,13 +418,13 @@ please [open an issue](https://github.com/oliverbooth/X10D/issues)!
### Added ### Added
- Add `string.AsNullIfEmpty()` - Add `string.AsNullIfEmpty()`.
- Returns the current string, or `null` if the current string is null or empty. - Returns the current string, or `null` if the current string is null or empty.
- Add `string.AsNullIfWhiteSpace()` - Add `string.AsNullIfWhiteSpace()`.
- Returns the current string, or `null` if the current string is null, empty, or consists of only whitespace. - Returns the current string, or `null` if the current string is null, empty, or consists of only whitespace.
- Add `string.Reverse()` - Add `string.Reverse()`.
- Reverses the current string - Reverses the current string.
- Add `string.WithAlternative()` - Add `string.WithAlternative()`.
- Returns the current string, or an alternative value if the current string is null or empty, or optionally if the current - Returns the current string, or an alternative value if the current string is null or empty, or optionally if the current
string consists of only whitespace. string consists of only whitespace.
@ -428,30 +440,30 @@ please [open an issue](https://github.com/oliverbooth/X10D/issues)!
### Added ### Added
- `WaitHandle.WaitOneAsync()` - `WaitHandle.WaitOneAsync()`.
- Wraps `WaitHandle.WaitOne` as a `Task` - Wraps `WaitHandle.WaitOne` as a `Task`.
- Add support for Unity 2019.4.3f1 - Add support for Unity 2019.4.3f1.
- Add `GameObject.LookAt(GameObject)` - Add `GameObject.LookAt(GameObject)`.
- Rotates the Transform on the current GameObject so that it faces the Transform on another GameObject - Rotates the Transform on the current GameObject so that it faces the Transform on another GameObject.
- Add `GameObject.LookAt(Transform)` - Add `GameObject.LookAt(Transform)`.
- Rotates the Transform on the current GameObject so that it faces another transform - Rotates the Transform on the current GameObject so that it faces another transform.
- Add `Transform.LookAt(GameObject)` - Add `Transform.LookAt(GameObject)`
- Rotates the current Transform so that it faces the Transform on another GameObject - Rotates the current Transform so that it faces the Transform on another GameObject.
- Add `Vector3.Round([float])` - Add `Vector3.Round([float])`.
- Returns a rounded Vector3 by calling `float.Round()` on each component - Returns a rounded Vector3 by calling `float.Round()` on each component.
- Add `Vector3.WithX(float)` - Add `Vector3.WithX(float)`.
- Returns a Vector3 with a new X component value - Returns a Vector3 with a new X component value.
- Add `Vector3.WithY(float)` - Add `Vector3.WithY(float)`.
- Returns a Vector3 with a new Y component value - Returns a Vector3 with a new Y component value.
- Add `Vector3.WithZ(float)` - Add `Vector3.WithZ(float)`.
- Returns a Vector3 with a new Z component value - Returns a Vector3 with a new Z component value.
- Add `Vector3.WithXY(float, float)` - Add `Vector3.WithXY(float, float)`.
- Returns a Vector3 with new X and Y component values - Returns a Vector3 with new X and Y component values.
- Add `Vector3.WithXZ(float, float)` - Add `Vector3.WithXZ(float, float)`.
- Returns a Vector3 with new X and Z component values - Returns a Vector3 with new X and Z component values.
- Add `Vector3.WithYZ(float, float)` - Add `Vector3.WithYZ(float, float)`.
- Returns a Vector3 with new Y and Z component values - Returns a Vector3 with new Y and Z component values.
- Add `BetterBehavior` (experimental wrapper over `MonoBehaviour`) - Add `BetterBehavior` (experimental wrapper over `MonoBehaviour`).
### Changed ### Changed
@ -465,18 +477,18 @@ please [open an issue](https://github.com/oliverbooth/X10D/issues)!
### Added ### Added
- Add `string.ChangeEncoding(Encoding, Encoding)` - Add `string.ChangeEncoding(Encoding, Encoding)`.
- Converts this string from one encoding to another - Converts this string from one encoding to another.
- Add `string.IsLower()` - Add `string.IsLower()`.
- Determines if all alpha characters in this string are considered lowercase - Determines if all alpha characters in this string are considered lowercase.
- Add `string.IsUpper()` - Add `string.IsUpper()`.
- Determines if all alpha characters in this string are considered uppercase - Determines if all alpha characters in this string are considered uppercase.
- Various extension methods with regards to reflection: - Various extension methods with regards to reflection:
- `GetDefaultValue` and `GetDefaultValue<T>` - gets the value stored in the member's `DefaultValue` attribute - `GetDefaultValue` and `GetDefaultValue<T>` - gets the value stored in the member's `DefaultValue` attribute.
- `GetDescription`- gets the value stored in the member's `Description` attribute - `GetDescription`- gets the value stored in the member's `Description` attribute.
- `SelectFromCustomAttribute<T1, T2>` - Internally calls `GetCustomAttribute<T1>` and passes it to a `Func<T1, T2>` so that - `SelectFromCustomAttribute<T1, T2>` - Internally calls `GetCustomAttribute<T1>` and passes it to a `Func<T1, T2>` so that
specific members may be selected specific members may be selected.
### Changed ### Changed
@ -490,26 +502,26 @@ please [open an issue](https://github.com/oliverbooth/X10D/issues)!
### Added ### Added
- Add `bool bool.And(bool)` - Add `bool bool.And(bool)`.
- Performs logical AND - Performs logical AND.
- Add `bool bool.Or(bool)` - Add `bool bool.Or(bool)`.
- Performs logical OR - Performs logical OR.
- Add `bool bool.Not(bool)` - Add `bool bool.Not(bool)`.
- Performs logical NOT - Performs logical NOT.
- Add `bool bool.XOr(bool)` - Add `bool bool.XOr(bool)`.
- Performs Logical XOR - Performs Logical XOR.
- Add `bool bool.NAnd(bool)` - Add `bool bool.NAnd(bool)`.
- Performs logical NAND - Performs logical NAND.
- Add `bool bool.NOr(bool)` - Add `bool bool.NOr(bool)`.
- Performs logical NOR - Performs logical NOR.
- Add `bool bool.XNOr(bool)` - Add `bool bool.XNOr(bool)`.
- Performs logical XNOR - Performs logical XNOR.
- Add `byte bool.ToByte()` - Add `byte bool.ToByte()`.
- 1 if `true`, 0 otherwise - 1 if `true`, 0 otherwise.
- Add `short bool.ToInt16()` - Add `short bool.ToInt16()`.
- 1 if `true`, 0 otherwise - 1 if `true`, 0 otherwise.
- Add `long bool.ToInt64()` - Add `long bool.ToInt64()`.
- 1 if `true`, 0 otherwise - 1 if `true`, 0 otherwise.
### Changed ### Changed
@ -523,18 +535,18 @@ please [open an issue](https://github.com/oliverbooth/X10D/issues)!
### Added ### Added
- Add `IEnumerable<T>.Split(int)` - Add `IEnumerable<T>.Split(int)`.
- Performs the same operation as the previously defined `IEnumerable<byte>.Chunkify(int)`, except now accepts any type `T` - Performs the same operation as the previously defined `IEnumerable<byte>.Chunkify(int)`, except now accepts any type `T`.
### Changed ### Changed
- Fix `DateTime.Last(DayOfWeek)` implementation - Fix `DateTime.Last(DayOfWeek)` implementation.
- Now returns the correct date/time for a given day of the week - Now returns the correct date/time for a given day of the week.
### Removed ### Removed
- Remove `IEnumerable<byte>.Chunkify(int)` - Remove `IEnumerable<byte>.Chunkify(int)`.
- Replaced by a method of the same behaviour `IEnumerable<T>.Split(int)` - Replaced by a method of the same behaviour `IEnumerable<T>.Split(int)`.
## Earlier versions ## Earlier versions