From a52bf6334f6747ac1fbc60a72d49d224ca83d06c Mon Sep 17 00:00:00 2001 From: Andrei Sergeev Date: Fri, 1 May 2026 10:29:25 +0400 Subject: [PATCH 1/3] release/v1.6.0-rc.1; minor refactor --- .../Factory/Factory.Constructor.Private.cs | 2 +- .../Factory/Factory.Create.Internal.cs | 20 +++++++++++++++++++ .../FlatArray/FlatArray.csproj | 2 +- .../SplitToFlatArray/SplitToFlatArray.Char.cs | 12 ++--------- .../SplitToFlatArray.CharArray.cs | 12 ++--------- .../SplitToFlatArray.String.cs | 12 ++--------- .../SplitToFlatArray.StringArray.cs | 12 ++--------- .../FlatCollections/FlatCollections.csproj | 2 +- 8 files changed, 31 insertions(+), 43 deletions(-) create mode 100644 src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.Create.Internal.cs diff --git a/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.Constructor.Private.cs b/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.Constructor.Private.cs index 2a49e93..cd27ca4 100644 --- a/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.Constructor.Private.cs +++ b/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.Constructor.Private.cs @@ -26,7 +26,7 @@ private FlatArray(T[] items, int _) // the caller MUST ensure the length is GREATER than zero // [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal FlatArray(int length, T[] items) + private FlatArray(int length, T[] items) { Debug.Assert(items is not null); Debug.Assert(length > 0 && length <= items.Length); diff --git a/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.Create.Internal.cs b/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.Create.Internal.cs new file mode 100644 index 0000000..06af402 --- /dev/null +++ b/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.Create.Internal.cs @@ -0,0 +1,20 @@ +using System.Diagnostics; + +namespace System; + +partial struct FlatArray +{ + // Initializes an instance without creation of a defensive copy + // When the input array is empty, the default is returned + internal static FlatArray InternalCreate(T[] items) + { + Debug.Assert(items is not null); + + if (items.Length == default) + { + return default; + } + + return new(items, default); + } +} diff --git a/src/flatcollections-array/FlatArray/FlatArray.csproj b/src/flatcollections-array/FlatArray/FlatArray.csproj index 4ccdb88..8c9ad15 100644 --- a/src/flatcollections-array/FlatArray/FlatArray.csproj +++ b/src/flatcollections-array/FlatArray/FlatArray.csproj @@ -19,7 +19,7 @@ PrimeFuncPack Core.FlatArray is a core library for .NET consisting of immutable FlatArray targeted for use in functional programming. System PrimeFuncPack.Core.FlatArray - 1.6.0-preview.1 + 1.6.0-rc.1 diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.Char.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.Char.cs index 84ff0ad..328b3f5 100644 --- a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.Char.cs +++ b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.Char.cs @@ -11,12 +11,8 @@ public static FlatArray SplitToFlatArray( } var array = source.Split(separator, options); - if (array.Length is 0) - { - return default; - } - return new(array.Length, array); + return FlatArray.InternalCreate(array); } public static FlatArray SplitToFlatArray( @@ -28,11 +24,7 @@ public static FlatArray SplitToFlatArray( } var array = source.Split(separator, count, options); - if (array.Length is 0) - { - return default; - } - return new(array.Length, array); + return FlatArray.InternalCreate(array); } } \ No newline at end of file diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.CharArray.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.CharArray.cs index 9cd3a36..592f6f3 100644 --- a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.CharArray.cs +++ b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.CharArray.cs @@ -11,12 +11,8 @@ public static FlatArray SplitToFlatArray( } var array = source.Split(separators, options); - if (array.Length is 0) - { - return default; - } - return new(array.Length, array); + return FlatArray.InternalCreate(array); } public static FlatArray SplitToFlatArray( @@ -28,11 +24,7 @@ public static FlatArray SplitToFlatArray( } var array = source.Split(separators, count, options); - if (array.Length is 0) - { - return default; - } - return new(array.Length, array); + return FlatArray.InternalCreate(array); } } \ No newline at end of file diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.String.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.String.cs index 8898dac..bd03d16 100644 --- a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.String.cs +++ b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.String.cs @@ -11,12 +11,8 @@ public static FlatArray SplitToFlatArray( } var array = source.Split(separator, options); - if (array.Length is 0) - { - return default; - } - return new(array.Length, array); + return FlatArray.InternalCreate(array); } public static FlatArray SplitToFlatArray( @@ -28,11 +24,7 @@ public static FlatArray SplitToFlatArray( } var array = source.Split(separator, count, options); - if (array.Length is 0) - { - return default; - } - return new(array.Length, array); + return FlatArray.InternalCreate(array); } } \ No newline at end of file diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.StringArray.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.StringArray.cs index c633ea0..a5a2e0c 100644 --- a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.StringArray.cs +++ b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.StringArray.cs @@ -11,12 +11,8 @@ public static FlatArray SplitToFlatArray( } var array = source.Split(separators, options); - if (array.Length is 0) - { - return default; - } - return new(array.Length, array); + return FlatArray.InternalCreate(array); } public static FlatArray SplitToFlatArray( @@ -28,11 +24,7 @@ public static FlatArray SplitToFlatArray( } var array = source.Split(separators, count, options); - if (array.Length is 0) - { - return default; - } - return new(array.Length, array); + return FlatArray.InternalCreate(array); } } \ No newline at end of file diff --git a/src/flatcollections/FlatCollections/FlatCollections.csproj b/src/flatcollections/FlatCollections/FlatCollections.csproj index 3b4cb68..235bc8e 100644 --- a/src/flatcollections/FlatCollections/FlatCollections.csproj +++ b/src/flatcollections/FlatCollections/FlatCollections.csproj @@ -19,7 +19,7 @@ PrimeFuncPack Core.FlatCollections is a set of immutable Flat collections for .NET designed for developing business applications based on functional programming. System PrimeFuncPack.Core.FlatCollections - 1.6.0-preview.1 + 1.6.0-rc.1 From 3e9ff89e40370c677bc4e8434a08e3883b5bbfbb Mon Sep 17 00:00:00 2001 From: Andrei Sergeev Date: Fri, 1 May 2026 10:36:16 +0400 Subject: [PATCH 2/3] Minor refactor (adjust InternalCreateOrDefault name) --- ...Create.Internal.cs => Factory.CreateOrDefault.Internal.cs} | 2 +- .../SplitToFlatArray/SplitToFlatArray.Char.cs | 4 ++-- .../SplitToFlatArray/SplitToFlatArray.CharArray.cs | 4 ++-- .../SplitToFlatArray/SplitToFlatArray.String.cs | 4 ++-- .../SplitToFlatArray/SplitToFlatArray.StringArray.cs | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) rename src/flatcollections-array/FlatArray/FlatArray.T/Factory/{Factory.Create.Internal.cs => Factory.CreateOrDefault.Internal.cs} (85%) diff --git a/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.Create.Internal.cs b/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.CreateOrDefault.Internal.cs similarity index 85% rename from src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.Create.Internal.cs rename to src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.CreateOrDefault.Internal.cs index 06af402..bf61535 100644 --- a/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.Create.Internal.cs +++ b/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.CreateOrDefault.Internal.cs @@ -6,7 +6,7 @@ partial struct FlatArray { // Initializes an instance without creation of a defensive copy // When the input array is empty, the default is returned - internal static FlatArray InternalCreate(T[] items) + internal static FlatArray InternalCreateOrDefault(T[] items) { Debug.Assert(items is not null); diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.Char.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.Char.cs index 328b3f5..7b23204 100644 --- a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.Char.cs +++ b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.Char.cs @@ -12,7 +12,7 @@ public static FlatArray SplitToFlatArray( var array = source.Split(separator, options); - return FlatArray.InternalCreate(array); + return FlatArray.InternalCreateOrDefault(array); } public static FlatArray SplitToFlatArray( @@ -25,6 +25,6 @@ public static FlatArray SplitToFlatArray( var array = source.Split(separator, count, options); - return FlatArray.InternalCreate(array); + return FlatArray.InternalCreateOrDefault(array); } } \ No newline at end of file diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.CharArray.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.CharArray.cs index 592f6f3..2ef488a 100644 --- a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.CharArray.cs +++ b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.CharArray.cs @@ -12,7 +12,7 @@ public static FlatArray SplitToFlatArray( var array = source.Split(separators, options); - return FlatArray.InternalCreate(array); + return FlatArray.InternalCreateOrDefault(array); } public static FlatArray SplitToFlatArray( @@ -25,6 +25,6 @@ public static FlatArray SplitToFlatArray( var array = source.Split(separators, count, options); - return FlatArray.InternalCreate(array); + return FlatArray.InternalCreateOrDefault(array); } } \ No newline at end of file diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.String.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.String.cs index bd03d16..c75d21e 100644 --- a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.String.cs +++ b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.String.cs @@ -12,7 +12,7 @@ public static FlatArray SplitToFlatArray( var array = source.Split(separator, options); - return FlatArray.InternalCreate(array); + return FlatArray.InternalCreateOrDefault(array); } public static FlatArray SplitToFlatArray( @@ -25,6 +25,6 @@ public static FlatArray SplitToFlatArray( var array = source.Split(separator, count, options); - return FlatArray.InternalCreate(array); + return FlatArray.InternalCreateOrDefault(array); } } \ No newline at end of file diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.StringArray.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.StringArray.cs index a5a2e0c..9e92432 100644 --- a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.StringArray.cs +++ b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.StringArray.cs @@ -12,7 +12,7 @@ public static FlatArray SplitToFlatArray( var array = source.Split(separators, options); - return FlatArray.InternalCreate(array); + return FlatArray.InternalCreateOrDefault(array); } public static FlatArray SplitToFlatArray( @@ -25,6 +25,6 @@ public static FlatArray SplitToFlatArray( var array = source.Split(separators, count, options); - return FlatArray.InternalCreate(array); + return FlatArray.InternalCreateOrDefault(array); } } \ No newline at end of file From d675e4978c70a2b21a557cab5bed012ff72915fb Mon Sep 17 00:00:00 2001 From: Andrei Sergeev Date: Fri, 1 May 2026 10:39:12 +0400 Subject: [PATCH 3/3] Add AggressiveInlining to InternalCreateOrDefault --- .../FlatArray.T/Factory/Factory.CreateOrDefault.Internal.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.CreateOrDefault.Internal.cs b/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.CreateOrDefault.Internal.cs index bf61535..0774da2 100644 --- a/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.CreateOrDefault.Internal.cs +++ b/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.CreateOrDefault.Internal.cs @@ -1,4 +1,5 @@ using System.Diagnostics; +using System.Runtime.CompilerServices; namespace System; @@ -6,6 +7,7 @@ partial struct FlatArray { // Initializes an instance without creation of a defensive copy // When the input array is empty, the default is returned + [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static FlatArray InternalCreateOrDefault(T[] items) { Debug.Assert(items is not null);