8
8
using System . Runtime . Intrinsics ;
9
9
using System . Runtime . Intrinsics . X86 ;
10
10
using Microsoft . AspNetCore . Internal ;
11
- using Microsoft . AspNetCore . WebUtilities ;
12
11
using Microsoft . Extensions . Primitives ;
13
12
14
13
namespace Microsoft . AspNetCore . Http . Features
@@ -122,7 +121,7 @@ public IQueryCollection Query
122
121
}
123
122
124
123
KvpAccumulator accumulator = new ( ) ;
125
- int queryStringLength = queryString . Length ;
124
+ var queryStringLength = queryString . Length ;
126
125
127
126
char [ ] ? arryToReturnToPool = null ;
128
127
Span < char > query = ( queryStringLength <= 128
@@ -139,17 +138,17 @@ public IQueryCollection Query
139
138
140
139
while ( ! query . IsEmpty )
141
140
{
142
- int delimiterIndex = query . IndexOf ( '&' ) ;
141
+ var delimiterIndex = query . IndexOf ( '&' ) ;
143
142
144
- Span < char > querySegment = delimiterIndex >= 0
143
+ var querySegment = delimiterIndex >= 0
145
144
? query . Slice ( 0 , delimiterIndex )
146
145
: query ;
147
146
148
- int equalIndex = querySegment . IndexOf ( '=' ) ;
147
+ var equalIndex = querySegment . IndexOf ( '=' ) ;
149
148
150
149
if ( equalIndex >= 0 )
151
150
{
152
- int i = 0 ;
151
+ var i = 0 ;
153
152
for ( ; i < querySegment . Length ; ++ i )
154
153
{
155
154
if ( ! char . IsWhiteSpace ( querySegment [ i ] ) )
@@ -158,11 +157,11 @@ public IQueryCollection Query
158
157
}
159
158
}
160
159
161
- Span < char > name = querySegment [ i ..equalIndex ] ;
162
- Span < char > value = querySegment . Slice ( equalIndex + 1 ) ;
160
+ var name = querySegment [ i ..equalIndex ] ;
161
+ var value = querySegment . Slice ( equalIndex + 1 ) ;
163
162
164
- name . ReplacePlusWithSpaceInPlace ( ) ;
165
- value . ReplacePlusWithSpaceInPlace ( ) ;
163
+ SpanHelper . ReplacePlusWithSpaceInPlace ( name ) ;
164
+ SpanHelper . ReplacePlusWithSpaceInPlace ( value ) ;
166
165
167
166
accumulator . Append (
168
167
Uri . UnescapeDataString ( name . ToString ( ) ) ,
@@ -212,13 +211,12 @@ public void Append(ReadOnlySpan<char> key, ReadOnlySpan<char> value = default)
212
211
/// </summary>
213
212
public void Append ( string key , string value )
214
213
{
215
- if ( _accumulator == null )
214
+ if ( _accumulator is null )
216
215
{
217
216
_accumulator = new AdaptiveCapacityDictionary < string , StringValues > ( StringComparer . OrdinalIgnoreCase ) ;
218
217
}
219
218
220
- StringValues values ;
221
- if ( _accumulator . TryGetValue ( key , out values ) )
219
+ if ( _accumulator . TryGetValue ( key , out var values ) )
222
220
{
223
221
if ( values . Count == 0 )
224
222
{
@@ -232,9 +230,9 @@ public void Append(string key, string value)
232
230
else
233
231
{
234
232
// Add zero count entry and move to data to expanding list dictionary
235
- _accumulator [ key ] = default ( StringValues ) ;
233
+ _accumulator [ key ] = default ;
236
234
237
- if ( _expandingAccumulator == null )
235
+ if ( _expandingAccumulator is null )
238
236
{
239
237
_expandingAccumulator = new AdaptiveCapacityDictionary < string , List < string > > ( 5 , StringComparer . OrdinalIgnoreCase ) ;
240
238
}
@@ -293,44 +291,44 @@ public AdaptiveCapacityDictionary<string, StringValues> GetResults()
293
291
return _accumulator ?? new AdaptiveCapacityDictionary < string , StringValues > ( 0 , StringComparer . OrdinalIgnoreCase ) ;
294
292
}
295
293
}
296
- }
297
-
298
- internal static class MySpanExtensions
299
- {
300
- public static void ReplacePlusWithSpaceInPlace ( this Span < char > span )
301
- => ReplaceInPlace ( span , '+' , ' ' ) ;
302
294
303
- [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
304
- public static unsafe void ReplaceInPlace ( this Span < char > span , char oldChar , char newChar )
295
+ private static class SpanHelper
305
296
{
306
- nint i = 0 ;
307
- nint n = ( nint ) ( uint ) span . Length ;
297
+ public static void ReplacePlusWithSpaceInPlace ( Span < char > span )
298
+ => ReplaceInPlace ( span , '+' , ' ' ) ;
308
299
309
- fixed ( char * ptr = span )
300
+ [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
301
+ public static unsafe void ReplaceInPlace ( Span < char > span , char oldChar , char newChar )
310
302
{
311
- ushort * pVec = ( ushort * ) ptr ;
303
+ var i = ( nint ) 0 ;
304
+ var n = ( nint ) ( uint ) span . Length ;
312
305
313
- if ( Sse41 . IsSupported && n >= Vector128 < ushort > . Count )
306
+ fixed ( char * ptr = span )
314
307
{
315
- Vector128 < ushort > vecOldChar = Vector128 . Create ( ( ushort ) oldChar ) ;
316
- Vector128 < ushort > vecNewChar = Vector128 . Create ( ( ushort ) newChar ) ;
308
+ var pVec = ( ushort * ) ptr ;
317
309
318
- do
310
+ if ( Sse41 . IsSupported && n >= Vector128 < ushort > . Count )
319
311
{
320
- Vector128 < ushort > vec = Sse2 . LoadVector128 ( pVec + i ) ;
321
- Vector128 < ushort > mask = Sse2 . CompareEqual ( vec , vecOldChar ) ;
322
- Vector128 < ushort > res = Sse41 . BlendVariable ( vec , vecNewChar , mask ) ;
323
- Sse2 . Store ( pVec + i , res ) ;
312
+ var vecOldChar = Vector128 . Create ( ( ushort ) oldChar ) ;
313
+ var vecNewChar = Vector128 . Create ( ( ushort ) newChar ) ;
324
314
325
- i += Vector128 < ushort > . Count ;
326
- } while ( i <= n - Vector128 < ushort > . Count ) ;
327
- }
315
+ do
316
+ {
317
+ var vec = Sse2 . LoadVector128 ( pVec + i ) ;
318
+ var mask = Sse2 . CompareEqual ( vec , vecOldChar ) ;
319
+ var res = Sse41 . BlendVariable ( vec , vecNewChar , mask ) ;
320
+ Sse2 . Store ( pVec + i , res ) ;
328
321
329
- for ( ; i < n ; ++ i )
330
- {
331
- if ( ptr [ i ] == oldChar )
322
+ i += Vector128 < ushort > . Count ;
323
+ } while ( i <= n - Vector128 < ushort > . Count ) ;
324
+ }
325
+
326
+ for ( ; i < n ; ++ i )
332
327
{
333
- ptr [ i ] = newChar ;
328
+ if ( ptr [ i ] == oldChar )
329
+ {
330
+ ptr [ i ] = newChar ;
331
+ }
334
332
}
335
333
}
336
334
}
0 commit comments