Skip to content

Commit d043eb0

Browse files
committed
removed the need for InternalExtensions.cs
1 parent 18c7dbc commit d043eb0

File tree

12 files changed

+60
-223
lines changed

12 files changed

+60
-223
lines changed

src/Enumerators/Split/SpanSplitStringSplitOptionsEnumerator.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ public ref struct SpanSplitStringSplitOptionsEnumerator
2727
/// <param name="options">A bitwise combination of the enumeration values that specifies whether to trim results and include empty results.</param>
2828
public SpanSplitStringSplitOptionsEnumerator(ReadOnlySpan<char> source, char delimiter, StringSplitOptions options)
2929
{
30+
ExceptionHelpers.ThrowIfInvalid(options, nameof(options));
31+
3032
Span = source;
3133
Delimiter = delimiter;
32-
TrimEntries = options.ThrowIfInvalid().IsTrimEntriesSet();
33-
RemoveEmptyEntries = options.IsRemoveEmptyEntriesSet();
34+
TrimEntries = options.HasFlag((StringSplitOptions)2); // StringSplitOptions.TrimEntries
35+
RemoveEmptyEntries = options.HasFlag(StringSplitOptions.RemoveEmptyEntries);
3436
EnumerationDone = false;
3537
Current = default;
3638
}

src/Enumerators/Split/SpanSplitStringSplitOptionsWithCountEnumerator.cs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,16 @@ public SpanSplitStringSplitOptionsWithCountEnumerator(ReadOnlySpan<char> source,
3333
{
3434
ExceptionHelpers.ThrowIfNegative(count, nameof(count));
3535
ExceptionHelpers.ThrowIfInvalid(countExceedingBehaviour, nameof(countExceedingBehaviour));
36+
ExceptionHelpers.ThrowIfInvalid(options, nameof(options));
37+
3638
Span = source;
3739
Delimiter = delimiter;
38-
CurrentCount = count;
39-
TrimEntries = options.ThrowIfInvalid().IsTrimEntriesSet();
40-
RemoveEmptyEntries = options.IsRemoveEmptyEntriesSet();
40+
CurrentCount = count == 1 ? 0 : count;
41+
TrimEntries = options.HasFlag((StringSplitOptions)2); // StringSplitOptions.TrimEntries
42+
RemoveEmptyEntries = options.HasFlag(StringSplitOptions.RemoveEmptyEntries);
4143
CountExceedingBehaviour = countExceedingBehaviour;
4244
EnumerationDone = count == 0;
4345
Current = default;
44-
45-
if(count == 1) // special case
46-
{
47-
CurrentCount = 0;
48-
}
4946
}
5047

5148
/// <summary>

src/Enumerators/SplitAny/SpanSplitAnyStringSplitOptionsEnumerator.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ public ref struct SpanSplitAnyStringSplitOptionsEnumerator
2727
/// <param name="options">A bitwise combination of the enumeration values that specifies whether to trim results and include empty results.</param>
2828
public SpanSplitAnyStringSplitOptionsEnumerator(ReadOnlySpan<char> source, ReadOnlySpan<char> delimiters, StringSplitOptions options)
2929
{
30+
ExceptionHelpers.ThrowIfInvalid(options, nameof(options));
31+
3032
Span = source;
3133
Delimiters = delimiters;
32-
TrimEntries = options.ThrowIfInvalid().IsTrimEntriesSet();
33-
RemoveEmptyEntries = options.IsRemoveEmptyEntriesSet();
34+
TrimEntries = options.HasFlag((StringSplitOptions)2); // StringSplitOptions.TrimEntries
35+
RemoveEmptyEntries = options.HasFlag(StringSplitOptions.RemoveEmptyEntries);
3436
EnumerationDone = false;
3537
Current = default;
3638
}

src/Enumerators/SplitAny/SpanSplitAnyStringSplitOptionsWithCountEnumerator.cs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,16 @@ public SpanSplitAnyStringSplitOptionsWithCountEnumerator(ReadOnlySpan<char> sour
3333
{
3434
ExceptionHelpers.ThrowIfNegative(count, nameof(count));
3535
ExceptionHelpers.ThrowIfInvalid(countExceedingBehaviour, nameof(countExceedingBehaviour));
36+
ExceptionHelpers.ThrowIfInvalid(options, nameof(options));
37+
3638
Span = source;
3739
Delimiters = delimiters;
38-
CurrentCount = count;
39-
TrimEntries = options.ThrowIfInvalid().IsTrimEntriesSet();
40-
RemoveEmptyEntries = options.IsRemoveEmptyEntriesSet();
40+
CurrentCount = count == 1 ? 0 : count;
41+
TrimEntries = options.HasFlag((StringSplitOptions)2); // StringSplitOptions.TrimEntries
42+
RemoveEmptyEntries = options.HasFlag(StringSplitOptions.RemoveEmptyEntries);
4143
CountExceedingBehaviour = countExceedingBehaviour;
4244
EnumerationDone = count == 0;
4345
Current = default;
44-
45-
if(count == 1) // special case
46-
{
47-
CurrentCount = 0;
48-
}
4946
}
5047

5148
/// <summary>

src/Enumerators/SplitSequence/SpanSplitSequenceStringSplitOptionsEnumerator.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,14 @@ public ref struct SpanSplitSequenceStringSplitOptionsEnumerator
2828
/// <param name="options">A bitwise combination of the enumeration values that specifies whether to trim results and include empty results.</param>
2929
public SpanSplitSequenceStringSplitOptionsEnumerator(ReadOnlySpan<char> source, ReadOnlySpan<char> delimiter, StringSplitOptions options)
3030
{
31+
ExceptionHelpers.ThrowIfInvalid(options, nameof(options));
32+
3133
Span = source;
3234
Delimiter = delimiter;
3335
DelimiterLength = Delimiter.Length;
3436
DelimiterIsEmpty = Delimiter.IsEmpty;
35-
TrimEntries = options.ThrowIfInvalid().IsTrimEntriesSet();
36-
RemoveEmptyEntries = options.IsRemoveEmptyEntriesSet();
37+
TrimEntries = options.HasFlag((StringSplitOptions)2); // StringSplitOptions.TrimEntries
38+
RemoveEmptyEntries = options.HasFlag(StringSplitOptions.RemoveEmptyEntries);
3739
EnumerationDone = false;
3840
Current = default;
3941
}

src/Enumerators/SplitSequence/SpanSplitSequenceStringSplitOptionsWithCountEnumerator.cs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,18 @@ public SpanSplitSequenceStringSplitOptionsWithCountEnumerator(ReadOnlySpan<char>
3434
{
3535
ExceptionHelpers.ThrowIfNegative(count, nameof(count));
3636
ExceptionHelpers.ThrowIfInvalid(countExceedingBehaviour, nameof(countExceedingBehaviour));
37+
ExceptionHelpers.ThrowIfInvalid(options, nameof(options));
38+
3739
Span = source;
3840
Delimiter = delimiter;
3941
DelimiterLength = Delimiter.Length;
4042
DelimiterIsEmpty = Delimiter.IsEmpty;
41-
CurrentCount = DelimiterIsEmpty ? 0 : count;
42-
TrimEntries = options.ThrowIfInvalid().IsTrimEntriesSet();
43-
RemoveEmptyEntries = options.IsRemoveEmptyEntriesSet();
43+
CurrentCount = DelimiterIsEmpty || count == 1 ? 0 : count;
44+
TrimEntries = options.HasFlag((StringSplitOptions)2); // StringSplitOptions.TrimEntries
45+
RemoveEmptyEntries = options.HasFlag(StringSplitOptions.RemoveEmptyEntries);
4446
CountExceedingBehaviour = countExceedingBehaviour;
4547
EnumerationDone = count == 0;
4648
Current = default;
47-
48-
if(count == 1) // special case
49-
{
50-
CurrentCount = 0;
51-
}
5249
}
5350

5451
/// <summary>

src/ExceptionHelpers.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,25 @@
77

88
static class ExceptionHelpers
99
{
10+
static readonly StringSplitOptions NegatedCombinationOfAllValidStringSplitOptions;
11+
12+
static ExceptionHelpers()
13+
{
14+
#if NET5_0_OR_GREATER
15+
StringSplitOptions[] flags = Enum.GetValues<StringSplitOptions>();
16+
#else
17+
StringSplitOptions[] flags = (StringSplitOptions[])Enum.GetValues(typeof(StringSplitOptions));
18+
#endif
19+
20+
int combination = 0;
21+
foreach(int flag in flags)
22+
{
23+
combination |= flag;
24+
}
25+
26+
NegatedCombinationOfAllValidStringSplitOptions = (StringSplitOptions) ~combination;
27+
}
28+
1029
internal static void ThrowIfGreaterThanOrEqual<T>(T value, T other,
1130
#if NET8_0_OR_GREATER
1231
[CallerArgumentExpression(nameof(value))]
@@ -51,6 +70,18 @@ internal static void ThrowIfInvalid(CountExceedingBehaviour countExceedingBehavi
5170
}
5271
}
5372

73+
internal static void ThrowIfInvalid(this StringSplitOptions options,
74+
#if NET8_0_OR_GREATER
75+
[CallerArgumentExpression(nameof(options))]
76+
#endif
77+
string? paramName = null)
78+
{
79+
if((options & NegatedCombinationOfAllValidStringSplitOptions) != 0)
80+
{
81+
throw new ArgumentException("Value of flag is invalid.", paramName);
82+
}
83+
}
84+
5485
internal static void ThrowIfOutOfBounds<T>(T value, T lowerBound, T upperBound,
5586
#if NET8_0_OR_GREATER
5687
[CallerArgumentExpression(nameof(value))]

src/Extensions/ReadOnlySpan/Linq/Where.cs

Lines changed: 0 additions & 56 deletions
This file was deleted.

src/Extensions/Span/Linq/Where.cs

Lines changed: 0 additions & 34 deletions
This file was deleted.

src/InternalExtensions.cs

Lines changed: 0 additions & 101 deletions
This file was deleted.

0 commit comments

Comments
 (0)