@@ -57,11 +57,17 @@ public static decimal AmqpToDecimal(byte scale, uint unsignedMantissa)
57
57
throw new SyntaxError ( "Unrepresentable AMQP decimal table field: " +
58
58
"scale=" + scale ) ;
59
59
}
60
- return new decimal ( ( int ) ( unsignedMantissa & 0x7FFFFFFF ) ,
61
- 0 ,
62
- 0 ,
63
- ( ( unsignedMantissa & 0x80000000 ) == 0 ) ? false : true ,
64
- scale ) ;
60
+
61
+ return new decimal (
62
+ // The low 32 bits of a 96-bit integer
63
+ lo : ( int ) ( unsignedMantissa & 0x7FFFFFFF ) ,
64
+ // The middle 32 bits of a 96-bit integer.
65
+ mid : 0 ,
66
+ // The high 32 bits of a 96-bit integer.
67
+ hi : 0 ,
68
+ isNegative : ( unsignedMantissa & 0x80000000 ) != 0 ,
69
+ // A power of 10 ranging from 0 to 28.
70
+ scale : scale ) ;
65
71
}
66
72
67
73
public static void DecimalToAmqp ( decimal value , out byte scale , out int mantissa )
@@ -91,7 +97,7 @@ public static IList ReadArray(NetworkBinaryReader reader)
91
97
{
92
98
IList array = new List < object > ( ) ;
93
99
long arrayLength = reader . ReadUInt32 ( ) ;
94
- Stream backingStream = reader . BaseStream ;
100
+ var backingStream = reader . BaseStream ;
95
101
long startPosition = backingStream . Position ;
96
102
while ( ( backingStream . Position - startPosition ) < arrayLength )
97
103
{
@@ -129,7 +135,6 @@ public static object ReadFieldValue(NetworkBinaryReader reader)
129
135
case 'F' :
130
136
value = ReadTable ( reader ) ;
131
137
break ;
132
-
133
138
case 'A' :
134
139
value = ReadArray ( reader ) ;
135
140
break ;
@@ -215,7 +220,7 @@ public static IDictionary<string, object> ReadTable(NetworkBinaryReader reader)
215
220
IDictionary < string , object > table = new Dictionary < string , object > ( ) ;
216
221
long tableLength = reader . ReadUInt32 ( ) ;
217
222
218
- Stream backingStream = reader . BaseStream ;
223
+ var backingStream = reader . BaseStream ;
219
224
long startPosition = backingStream . Position ;
220
225
while ( ( backingStream . Position - startPosition ) < tableLength )
221
226
{
@@ -247,7 +252,7 @@ public static void WriteArray(NetworkBinaryWriter writer, IList val)
247
252
}
248
253
else
249
254
{
250
- Stream backingStream = writer . BaseStream ;
255
+ var backingStream = writer . BaseStream ;
251
256
long patchPosition = backingStream . Position ;
252
257
writer . Write ( ( uint ) 0 ) ; // length of table - will be backpatched
253
258
foreach ( object entry in val )
@@ -264,93 +269,82 @@ public static void WriteArray(NetworkBinaryWriter writer, IList val)
264
269
265
270
public static void WriteDecimal ( NetworkBinaryWriter writer , decimal value )
266
271
{
267
- byte scale ;
268
- int mantissa ;
269
- DecimalToAmqp ( value , out scale , out mantissa ) ;
272
+ DecimalToAmqp ( value , out var scale , out var mantissa ) ;
270
273
WriteOctet ( writer , scale ) ;
271
274
WriteLong ( writer , ( uint ) mantissa ) ;
272
275
}
273
276
274
277
public static void WriteFieldValue ( NetworkBinaryWriter writer , object value )
275
278
{
276
- if ( value == null )
277
- {
278
- WriteOctet ( writer , ( byte ) 'V' ) ;
279
- }
280
- else if ( value is string )
281
- {
282
- WriteOctet ( writer , ( byte ) 'S' ) ;
283
- WriteLongstr ( writer , Encoding . UTF8 . GetBytes ( ( string ) value ) ) ;
284
- }
285
- else if ( value is byte [ ] )
286
- {
287
- WriteOctet ( writer , ( byte ) 'S' ) ;
288
- WriteLongstr ( writer , ( byte [ ] ) value ) ;
289
- }
290
- else if ( value is int )
291
- {
292
- WriteOctet ( writer , ( byte ) 'I' ) ;
293
- writer . Write ( ( int ) value ) ;
294
- }
295
- else if ( value is decimal )
296
- {
297
- WriteOctet ( writer , ( byte ) 'D' ) ;
298
- WriteDecimal ( writer , ( decimal ) value ) ;
299
- }
300
- else if ( value is AmqpTimestamp )
301
- {
302
- WriteOctet ( writer , ( byte ) 'T' ) ;
303
- WriteTimestamp ( writer , ( AmqpTimestamp ) value ) ;
304
- }
305
- else if ( value is IDictionary )
306
- {
307
- WriteOctet ( writer , ( byte ) 'F' ) ;
308
- WriteTable ( writer , ( IDictionary ) value ) ;
309
- }
310
- else if ( value is IList )
311
- {
312
- WriteOctet ( writer , ( byte ) 'A' ) ;
313
- WriteArray ( writer , ( IList ) value ) ;
314
- }
315
- else if ( value is sbyte )
316
- {
317
- WriteOctet ( writer , ( byte ) 'b' ) ;
318
- writer . Write ( ( sbyte ) value ) ;
319
- }
320
- else if ( value is double )
321
- {
322
- WriteOctet ( writer , ( byte ) 'd' ) ;
323
- writer . Write ( ( double ) value ) ;
324
- }
325
- else if ( value is float )
326
- {
327
- WriteOctet ( writer , ( byte ) 'f' ) ;
328
- writer . Write ( ( float ) value ) ;
329
- }
330
- else if ( value is long )
331
- {
332
- WriteOctet ( writer , ( byte ) 'l' ) ;
333
- writer . Write ( ( long ) value ) ;
334
- }
335
- else if ( value is short )
279
+ switch ( value )
336
280
{
337
- WriteOctet ( writer , ( byte ) 's' ) ;
338
- writer . Write ( ( short ) value ) ;
339
- }
340
- else if ( value is bool )
341
- {
342
- WriteOctet ( writer , ( byte ) 't' ) ;
343
- WriteOctet ( writer , ( byte ) ( ( ( bool ) value ) ? 1 : 0 ) ) ;
344
- }
345
- else if ( value is BinaryTableValue )
346
- {
347
- WriteOctet ( writer , ( byte ) 'x' ) ;
348
- WriteLongstr ( writer , ( ( BinaryTableValue ) value ) . Bytes ) ;
349
- }
350
- else
351
- {
352
- throw new WireFormattingException ( "Value cannot appear as table value" ,
353
- value ) ;
281
+ case null :
282
+ WriteOctet ( writer , ( byte ) 'V' ) ;
283
+ break ;
284
+ case string val :
285
+ WriteOctet ( writer , ( byte ) 'S' ) ;
286
+ WriteLongstr ( writer , Encoding . UTF8 . GetBytes ( val ) ) ;
287
+ break ;
288
+ case byte [ ] val :
289
+ WriteOctet ( writer , ( byte ) 'S' ) ;
290
+ WriteLongstr ( writer , val ) ;
291
+ break ;
292
+ case int val :
293
+ WriteOctet ( writer , ( byte ) 'I' ) ;
294
+ writer . Write ( val ) ;
295
+ break ;
296
+ case decimal val :
297
+ WriteOctet ( writer , ( byte ) 'D' ) ;
298
+ WriteDecimal ( writer , val ) ;
299
+ break ;
300
+ case AmqpTimestamp val :
301
+ WriteOctet ( writer , ( byte ) 'T' ) ;
302
+ WriteTimestamp ( writer , val ) ;
303
+ break ;
304
+ case IDictionary val :
305
+ WriteOctet ( writer , ( byte ) 'F' ) ;
306
+ WriteTable ( writer , val ) ;
307
+ break ;
308
+ case IList val :
309
+ WriteOctet ( writer , ( byte ) 'A' ) ;
310
+ WriteArray ( writer , val ) ;
311
+ break ;
312
+ case byte val :
313
+ WriteOctet ( writer , ( byte ) 'b' ) ;
314
+ writer . Write ( val ) ;
315
+ break ;
316
+ case sbyte val :
317
+ WriteOctet ( writer , ( byte ) 'b' ) ;
318
+ writer . Write ( val ) ;
319
+ break ;
320
+ case double val :
321
+ WriteOctet ( writer , ( byte ) 'd' ) ;
322
+ writer . Write ( val ) ;
323
+ break ;
324
+ case float val :
325
+ WriteOctet ( writer , ( byte ) 'f' ) ;
326
+ writer . Write ( val ) ;
327
+ break ;
328
+ case long val :
329
+ WriteOctet ( writer , ( byte ) 'l' ) ;
330
+ writer . Write ( val ) ;
331
+ break ;
332
+ case short val :
333
+ WriteOctet ( writer , ( byte ) 's' ) ;
334
+ writer . Write ( val ) ;
335
+ break ;
336
+ case bool val :
337
+ WriteOctet ( writer , ( byte ) 't' ) ;
338
+ WriteOctet ( writer , ( byte ) ( val ? 1 : 0 ) ) ;
339
+ break ;
340
+ case BinaryTableValue val :
341
+ WriteOctet ( writer , ( byte ) 'x' ) ;
342
+ WriteLongstr ( writer , val . Bytes ) ;
343
+ break ;
344
+ default :
345
+ throw new WireFormattingException (
346
+ $ "Value of type '{ value . GetType ( ) . Name } ' cannot appear as table value",
347
+ value ) ;
354
348
}
355
349
}
356
350
@@ -382,14 +376,16 @@ public static void WriteShort(NetworkBinaryWriter writer, ushort val)
382
376
383
377
public static void WriteShortstr ( NetworkBinaryWriter writer , string val )
384
378
{
385
- byte [ ] bytes = Encoding . UTF8 . GetBytes ( val ) ;
386
- int len = bytes . Length ;
387
- if ( len > 255 )
379
+ var bytes = Encoding . UTF8 . GetBytes ( val ) ;
380
+ var length = bytes . Length ;
381
+
382
+ if ( length > 255 )
388
383
{
389
384
throw new WireFormattingException ( "Short string too long; " +
390
- "UTF-8 encoded length=" + len + ", max=255" ) ;
385
+ "UTF-8 encoded length=" + length + ", max=255" ) ;
391
386
}
392
- writer . Write ( ( byte ) len ) ;
387
+
388
+ writer . Write ( ( byte ) length ) ;
393
389
writer . Write ( bytes ) ;
394
390
}
395
391
@@ -415,15 +411,14 @@ public static void WriteTable(NetworkBinaryWriter writer, IDictionary val)
415
411
}
416
412
else
417
413
{
418
- Stream backingStream = writer . BaseStream ;
414
+ var backingStream = writer . BaseStream ;
419
415
long patchPosition = backingStream . Position ;
420
416
writer . Write ( ( uint ) 0 ) ; // length of table - will be backpatched
421
417
422
418
foreach ( DictionaryEntry entry in val )
423
419
{
424
420
WriteShortstr ( writer , entry . Key . ToString ( ) ) ;
425
- object value = entry . Value ;
426
- WriteFieldValue ( writer , value ) ;
421
+ WriteFieldValue ( writer , entry . Value ) ;
427
422
}
428
423
429
424
// Now, backpatch the table length.
@@ -457,15 +452,14 @@ public static void WriteTable(NetworkBinaryWriter writer, IDictionary<string, ob
457
452
}
458
453
else
459
454
{
460
- Stream backingStream = writer . BaseStream ;
455
+ var backingStream = writer . BaseStream ;
461
456
long patchPosition = backingStream . Position ;
462
457
writer . Write ( ( uint ) 0 ) ; // length of table - will be backpatched
463
458
464
- foreach ( KeyValuePair < string , object > entry in val )
459
+ foreach ( var entry in val )
465
460
{
466
461
WriteShortstr ( writer , entry . Key ) ;
467
- object value = entry . Value ;
468
- WriteFieldValue ( writer , value ) ;
462
+ WriteFieldValue ( writer , entry . Value ) ;
469
463
}
470
464
471
465
// Now, backpatch the table length.
0 commit comments