@@ -51,15 +51,18 @@ public void SetValue<T>(PackedTuple tuple, in PackedFieldDescriptor descriptor,
51
51
public T GetValue < T > ( PackedTuple tuple , in PackedFieldDescriptor descriptor , bool isNullable , out TupleFieldState fieldState )
52
52
{
53
53
var getter = ( isNullable ? NullableGetter : Getter ) as GetValueDelegate < T > ;
54
- if ( getter != null )
54
+ if ( getter != null ) {
55
55
return getter . Invoke ( tuple , descriptor , out fieldState ) ;
56
- var targetType = typeof ( T ) ;
56
+ }
57
+ var targetType = typeof ( T ) ;
57
58
58
59
//Dirty hack of nullable enum reading
59
- if ( isNullable )
60
+ if ( isNullable ) {
60
61
targetType = Nullable . GetUnderlyingType ( targetType ) ?? targetType ;
61
- if ( targetType . IsEnum )
62
+ }
63
+ if ( targetType . IsEnum ) {
62
64
return ( T ) Enum . ToObject ( targetType , GetUntypedValue ( tuple , descriptor , out fieldState ) ) ;
65
+ }
63
66
return ( T ) GetUntypedValue ( tuple , descriptor , out fieldState ) ;
64
67
}
65
68
@@ -106,32 +109,30 @@ public override object GetUntypedValue(PackedTuple tuple, in PackedFieldDescript
106
109
{
107
110
var state = tuple . GetFieldState ( descriptor ) ;
108
111
fieldState = state ;
109
- return state == TupleFieldState . Available ? tuple . Objects [ descriptor . ObjectIndex ] : null ;
112
+ return state == TupleFieldState . Available ? tuple . Objects [ descriptor . GetObjectIndex ( ) ] : null ;
110
113
}
111
114
112
115
public override void SetUntypedValue ( PackedTuple tuple , in PackedFieldDescriptor descriptor , object value )
113
116
{
114
- tuple . Objects [ descriptor . ObjectIndex ] = value ;
117
+ tuple . Objects [ descriptor . GetObjectIndex ( ) ] = value ;
115
118
tuple . SetFieldState ( descriptor , value != null ? TupleFieldState . Available : ( TupleFieldState . Available | TupleFieldState . Null ) ) ;
116
119
}
117
120
118
121
public override void CopyValue ( PackedTuple source , in PackedFieldDescriptor sourceDescriptor ,
119
122
PackedTuple target , in PackedFieldDescriptor targetDescriptor )
120
123
{
121
- target . Objects [ targetDescriptor . ObjectIndex ] = source . Objects [ sourceDescriptor . ObjectIndex ] ;
124
+ target . Objects [ targetDescriptor . GetObjectIndex ( ) ] = source . Objects [ sourceDescriptor . GetObjectIndex ( ) ] ;
122
125
}
123
126
124
127
public override bool ValueEquals ( PackedTuple left , in PackedFieldDescriptor leftDescriptor ,
125
128
PackedTuple right , in PackedFieldDescriptor rightDescriptor )
126
129
{
127
- var leftValue = left . Objects [ leftDescriptor . ObjectIndex ] ;
128
- var rightValue = right . Objects [ rightDescriptor . ObjectIndex ] ;
129
- return leftValue . Equals ( rightValue ) ;
130
+ return Equals ( left . Objects [ leftDescriptor . GetObjectIndex ( ) ] , right . Objects [ rightDescriptor . GetObjectIndex ( ) ] ) ;
130
131
}
131
132
132
133
public override int GetValueHashCode ( PackedTuple tuple , in PackedFieldDescriptor descriptor )
133
134
{
134
- return tuple . Objects [ descriptor . ObjectIndex ] . GetHashCode ( ) ;
135
+ return tuple . Objects [ descriptor . GetObjectIndex ( ) ] ? . GetHashCode ( ) ?? 0 ;
135
136
}
136
137
137
138
public ObjectFieldAccessor ( )
@@ -167,14 +168,13 @@ internal abstract class ValueFieldAccessor<T> : ValueFieldAccessor
167
168
168
169
public override object GetUntypedValue ( PackedTuple tuple , in PackedFieldDescriptor descriptor , out TupleFieldState fieldState )
169
170
{
170
- var state = tuple . GetFieldState ( descriptor ) ;
171
- fieldState = state ;
172
- return state == TupleFieldState . Available ? ( object ) Load ( tuple , descriptor ) : null ;
171
+ fieldState = tuple . GetFieldState ( descriptor ) ;
172
+ return fieldState == TupleFieldState . Available ? ( object ) Load ( tuple , descriptor ) : null ;
173
173
}
174
174
175
175
public override void SetUntypedValue ( PackedTuple tuple , in PackedFieldDescriptor descriptor , object value )
176
176
{
177
- if ( value != null ) {
177
+ if ( value != null ) {
178
178
Store ( tuple , descriptor , ( T ) value ) ;
179
179
tuple . SetFieldState ( descriptor , TupleFieldState . Available ) ;
180
180
}
@@ -190,12 +190,8 @@ public override void CopyValue(PackedTuple source, in PackedFieldDescriptor sour
190
190
}
191
191
192
192
public override bool ValueEquals ( PackedTuple left , in PackedFieldDescriptor leftDescriptor ,
193
- PackedTuple right , in PackedFieldDescriptor rightDescriptor )
194
- {
195
- var leftValue = Load ( left , leftDescriptor ) ;
196
- var rightValue = Load ( right , rightDescriptor ) ;
197
- return leftValue . Equals ( rightValue ) ;
198
- }
193
+ PackedTuple right , in PackedFieldDescriptor rightDescriptor ) =>
194
+ Load ( left , leftDescriptor ) . Equals ( Load ( right , rightDescriptor ) ) ;
199
195
200
196
public override int GetValueHashCode ( PackedTuple tuple , in PackedFieldDescriptor descriptor )
201
197
{
@@ -204,16 +200,14 @@ public override int GetValueHashCode(PackedTuple tuple, in PackedFieldDescriptor
204
200
205
201
private T GetValue ( PackedTuple tuple , in PackedFieldDescriptor descriptor , out TupleFieldState fieldState )
206
202
{
207
- var state = tuple . GetFieldState ( descriptor ) ;
208
- fieldState = state ;
209
- return state == TupleFieldState . Available ? Load ( tuple , descriptor ) : DefaultValue ;
203
+ fieldState = tuple . GetFieldState ( descriptor ) ;
204
+ return fieldState == TupleFieldState . Available ? Load ( tuple , descriptor ) : DefaultValue ;
210
205
}
211
206
212
207
private T ? GetNullableValue ( PackedTuple tuple , in PackedFieldDescriptor descriptor , out TupleFieldState fieldState )
213
208
{
214
- var state = tuple . GetFieldState ( descriptor ) ;
215
- fieldState = state ;
216
- return state == TupleFieldState . Available ? Load ( tuple , descriptor ) : NullValue ;
209
+ fieldState = tuple . GetFieldState ( descriptor ) ;
210
+ return fieldState == TupleFieldState . Available ? Load ( tuple , descriptor ) : NullValue ;
217
211
}
218
212
219
213
private void SetValue ( PackedTuple tuple , in PackedFieldDescriptor descriptor , T value )
@@ -224,37 +218,38 @@ private void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, T
224
218
225
219
private void SetNullableValue ( PackedTuple tuple , in PackedFieldDescriptor descriptor , T ? value )
226
220
{
227
- if ( value != null ) {
221
+ if ( value != null ) {
228
222
Store ( tuple , descriptor , value . Value ) ;
229
223
tuple . SetFieldState ( descriptor , TupleFieldState . Available ) ;
230
224
}
231
- else
225
+ else {
232
226
tuple . SetFieldState ( descriptor , TupleFieldState . Available | TupleFieldState . Null ) ;
227
+ }
233
228
}
234
229
235
230
private void Store ( PackedTuple tuple , in PackedFieldDescriptor d , T value )
236
231
{
237
- var valueIndex = d . ValueIndex ;
232
+ var valueIndex = d . GetValueIndex ( ) ;
238
233
if ( Rank > 6 ) {
239
234
Encode ( value , tuple . Values , valueIndex ) ;
240
235
return ;
241
236
}
242
237
243
238
var encoded = Encode ( value ) ;
244
239
ref var block = ref tuple . Values [ valueIndex ] ;
245
- var valueBitOffset = d . ValueBitOffset ;
240
+ var valueBitOffset = d . GetValueBitOffset ( ) ;
246
241
var mask = ValueBitMask << valueBitOffset ;
247
242
block = ( block & ~ mask ) | ( ( encoded << valueBitOffset ) & mask ) ;
248
243
}
249
244
250
245
private T Load ( PackedTuple tuple , in PackedFieldDescriptor d )
251
246
{
252
- var valueIndex = d . ValueIndex ;
247
+ var valueIndex = d . GetValueIndex ( ) ;
253
248
if ( Rank > 6 ) {
254
249
return Decode ( tuple . Values , valueIndex ) ;
255
250
}
256
251
257
- var encoded = ( tuple . Values [ valueIndex ] >> d . ValueBitOffset ) & ValueBitMask ;
252
+ var encoded = ( tuple . Values [ valueIndex ] >> d . GetValueBitOffset ( ) ) & ValueBitMask ;
258
253
return Decode ( encoded ) ;
259
254
}
260
255
@@ -279,7 +274,7 @@ protected override long Encode(bool value)
279
274
280
275
protected override bool Decode ( long value )
281
276
{
282
- return value != 0 ;
277
+ return value != 0 ;
283
278
}
284
279
285
280
public BooleanFieldAccessor ( )
@@ -299,7 +294,7 @@ protected override long Encode(float value)
299
294
300
295
protected override float Decode ( long value )
301
296
{
302
- var intValue = unchecked ( ( int ) value ) ;
297
+ var intValue = unchecked ( ( int ) value ) ;
303
298
unsafe {
304
299
return * ( float * ) & intValue ;
305
300
}
@@ -374,7 +369,7 @@ protected override long Encode(byte value)
374
369
375
370
protected override byte Decode ( long value )
376
371
{
377
- return unchecked ( ( byte ) value ) ;
372
+ return unchecked ( ( byte ) value ) ;
378
373
}
379
374
380
375
public ByteFieldAccessor ( )
@@ -392,15 +387,15 @@ protected override long Encode(sbyte value)
392
387
393
388
protected override sbyte Decode ( long value )
394
389
{
395
- return unchecked ( ( sbyte ) value ) ;
390
+ return unchecked ( ( sbyte ) value ) ;
396
391
}
397
392
398
393
public SByteFieldAccessor ( )
399
394
: base ( sizeof ( sbyte ) * 8 , 8 )
400
395
{
401
396
}
402
397
}
403
-
398
+
404
399
internal sealed class ShortFieldAccessor : ValueFieldAccessor < short >
405
400
{
406
401
protected override long Encode ( short value )
@@ -410,15 +405,15 @@ protected override long Encode(short value)
410
405
411
406
protected override short Decode ( long value )
412
407
{
413
- return unchecked ( ( short ) value ) ;
408
+ return unchecked ( ( short ) value ) ;
414
409
}
415
410
416
411
public ShortFieldAccessor ( )
417
412
: base ( sizeof ( short ) * 8 , 9 )
418
413
{
419
414
}
420
415
}
421
-
416
+
422
417
internal sealed class UShortFieldAccessor : ValueFieldAccessor < ushort >
423
418
{
424
419
protected override long Encode ( ushort value )
@@ -428,15 +423,15 @@ protected override long Encode(ushort value)
428
423
429
424
protected override ushort Decode ( long value )
430
425
{
431
- return unchecked ( ( ushort ) value ) ;
426
+ return unchecked ( ( ushort ) value ) ;
432
427
}
433
428
434
429
public UShortFieldAccessor ( )
435
430
: base ( sizeof ( ushort ) * 8 , 10 )
436
431
{
437
432
}
438
433
}
439
-
434
+
440
435
internal sealed class IntFieldAccessor : ValueFieldAccessor < int >
441
436
{
442
437
protected override long Encode ( int value )
@@ -446,15 +441,15 @@ protected override long Encode(int value)
446
441
447
442
protected override int Decode ( long value )
448
443
{
449
- return unchecked ( ( int ) value ) ;
444
+ return unchecked ( ( int ) value ) ;
450
445
}
451
446
452
447
public IntFieldAccessor ( )
453
448
: base ( sizeof ( int ) * 8 , 11 )
454
449
{
455
450
}
456
451
}
457
-
452
+
458
453
internal sealed class UIntFieldAccessor : ValueFieldAccessor < uint >
459
454
{
460
455
protected override long Encode ( uint value )
@@ -464,15 +459,15 @@ protected override long Encode(uint value)
464
459
465
460
protected override uint Decode ( long value )
466
461
{
467
- return unchecked ( ( uint ) value ) ;
462
+ return unchecked ( ( uint ) value ) ;
468
463
}
469
464
470
465
public UIntFieldAccessor ( )
471
466
: base ( sizeof ( uint ) * 8 , 12 )
472
467
{
473
468
}
474
469
}
475
-
470
+
476
471
internal sealed class LongFieldAccessor : ValueFieldAccessor < long >
477
472
{
478
473
protected override long Encode ( long value )
@@ -490,7 +485,7 @@ public LongFieldAccessor()
490
485
{
491
486
}
492
487
}
493
-
488
+
494
489
internal sealed class ULongFieldAccessor : ValueFieldAccessor < ulong >
495
490
{
496
491
protected override long Encode ( ulong value )
@@ -529,7 +524,7 @@ protected override void Encode(Guid value, long[] values, int offset)
529
524
530
525
private static unsafe int GetSize ( )
531
526
{
532
- return sizeof ( Guid ) ;
527
+ return sizeof ( Guid ) ;
533
528
}
534
529
535
530
public GuidFieldAccessor ( )
0 commit comments