@@ -1306,7 +1306,7 @@ public static int SequenceCompareTo<T>(ref T first, int firstLength, ref T secon
1306
1306
[ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
1307
1307
internal static unsafe bool ContainsValueType < T > ( ref T searchSpace , T value , int length ) where T : struct , INumber < T >
1308
1308
{
1309
- if ( PackedSpanHelpers . PackedIndexOfIsSupported && PackedSpanHelpers . CanUsePackedIndexOf ( value ) )
1309
+ if ( PackedSpanHelpers . PackedIndexOfIsSupported && typeof ( T ) == typeof ( short ) && PackedSpanHelpers . CanUsePackedIndexOf ( value ) )
1310
1310
{
1311
1311
return PackedSpanHelpers . Contains ( ref Unsafe . As < T , short > ( ref searchSpace ) , * ( short * ) & value , length ) ;
1312
1312
}
@@ -1435,6 +1435,10 @@ internal static bool NonPackedContainsValueType<T>(ref T searchSpace, T value, i
1435
1435
internal static int IndexOfChar ( ref char searchSpace , char value , int length )
1436
1436
=> IndexOfValueType ( ref Unsafe . As < char , short > ( ref searchSpace ) , ( short ) value , length ) ;
1437
1437
1438
+ [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
1439
+ internal static int NonPackedIndexOfChar ( ref char searchSpace , char value , int length ) =>
1440
+ NonPackedIndexOfValueType < short , DontNegate < short > > ( ref Unsafe . As < char , short > ( ref searchSpace ) , ( short ) value , length ) ;
1441
+
1438
1442
[ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
1439
1443
internal static int IndexOfValueType < T > ( ref T searchSpace , T value , int length ) where T : struct , INumber < T >
1440
1444
=> IndexOfValueType < T , DontNegate < T > > ( ref searchSpace , value , length ) ;
@@ -1448,7 +1452,7 @@ private static unsafe int IndexOfValueType<TValue, TNegator>(ref TValue searchSp
1448
1452
where TValue : struct , INumber < TValue >
1449
1453
where TNegator : struct , INegator < TValue >
1450
1454
{
1451
- if ( PackedSpanHelpers . PackedIndexOfIsSupported && PackedSpanHelpers . CanUsePackedIndexOf ( value ) )
1455
+ if ( PackedSpanHelpers . PackedIndexOfIsSupported && typeof ( TValue ) == typeof ( short ) && PackedSpanHelpers . CanUsePackedIndexOf ( value ) )
1452
1456
{
1453
1457
return typeof ( TNegator ) == typeof ( DontNegate < short > )
1454
1458
? PackedSpanHelpers . IndexOf ( ref Unsafe . As < TValue , char > ( ref searchSpace ) , * ( char * ) & value , length )
@@ -1605,7 +1609,7 @@ private static unsafe int IndexOfAnyValueType<TValue, TNegator>(ref TValue searc
1605
1609
where TValue : struct , INumber < TValue >
1606
1610
where TNegator : struct , INegator < TValue >
1607
1611
{
1608
- if ( PackedSpanHelpers . PackedIndexOfIsSupported && PackedSpanHelpers . CanUsePackedIndexOf ( value0 ) && PackedSpanHelpers . CanUsePackedIndexOf ( value1 ) )
1612
+ if ( PackedSpanHelpers . PackedIndexOfIsSupported && typeof ( TValue ) == typeof ( short ) && PackedSpanHelpers . CanUsePackedIndexOf ( value0 ) && PackedSpanHelpers . CanUsePackedIndexOf ( value1 ) )
1609
1613
{
1610
1614
return typeof ( TNegator ) == typeof ( DontNegate < short > )
1611
1615
? PackedSpanHelpers . IndexOfAny ( ref Unsafe . As < TValue , char > ( ref searchSpace ) , * ( char * ) & value0 , * ( char * ) & value1 , length )
@@ -1782,7 +1786,7 @@ private static unsafe int IndexOfAnyValueType<TValue, TNegator>(ref TValue searc
1782
1786
where TValue : struct , INumber< TValue>
1783
1787
where TNegator : struct , INegator < TValue>
1784
1788
{
1785
- if ( PackedSpanHelpers . PackedIndexOfIsSupported && PackedSpanHelpers . CanUsePackedIndexOf ( value0 ) && PackedSpanHelpers . CanUsePackedIndexOf ( value1 ) && PackedSpanHelpers . CanUsePackedIndexOf ( value2 ) )
1789
+ if ( PackedSpanHelpers . PackedIndexOfIsSupported && typeof ( TValue ) == typeof ( short ) && PackedSpanHelpers . CanUsePackedIndexOf ( value0 ) && PackedSpanHelpers . CanUsePackedIndexOf ( value1 ) && PackedSpanHelpers . CanUsePackedIndexOf ( value2 ) )
1786
1790
{
1787
1791
return typeof ( TNegator ) == typeof ( DontNegate < short > )
1788
1792
? PackedSpanHelpers . IndexOfAny ( ref Unsafe . As < TValue , char > ( ref searchSpace ) , * ( char * ) & value0 , * ( char * ) & value1 , * ( char * ) & value2 , length )
@@ -3085,7 +3089,7 @@ private static unsafe int IndexOfAnyInRangeUnsignedNumber<T, TNegator>(ref T sea
3085
3089
where T : struct , IUnsignedNumber < T > , IComparisonOperators < T , T , bool >
3086
3090
where TNegator : struct , INegator < T >
3087
3091
{
3088
- if ( PackedSpanHelpers . PackedIndexOfIsSupported && PackedSpanHelpers . CanUsePackedIndexOf ( lowInclusive ) && PackedSpanHelpers . CanUsePackedIndexOf ( highInclusive ) && highInclusive >= lowInclusive )
3092
+ if ( PackedSpanHelpers . PackedIndexOfIsSupported && typeof ( T ) == typeof ( ushort ) && PackedSpanHelpers . CanUsePackedIndexOf ( lowInclusive ) && PackedSpanHelpers . CanUsePackedIndexOf ( highInclusive ) && highInclusive >= lowInclusive )
3089
3093
{
3090
3094
ref char charSearchSpace = ref Unsafe . As < T , char > ( ref searchSpace ) ;
3091
3095
char charLowInclusive = * ( char * ) & lowInclusive ;
0 commit comments