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.CreateOrDefault.Internal.cs b/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.CreateOrDefault.Internal.cs new file mode 100644 index 0000000..0774da2 --- /dev/null +++ b/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.CreateOrDefault.Internal.cs @@ -0,0 +1,22 @@ +using System.Diagnostics; +using System.Runtime.CompilerServices; + +namespace System; + +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); + + 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..7b23204 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.InternalCreateOrDefault(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.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 9cd3a36..2ef488a 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.InternalCreateOrDefault(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.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 8898dac..c75d21e 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.InternalCreateOrDefault(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.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 c633ea0..9e92432 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.InternalCreateOrDefault(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.InternalCreateOrDefault(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