@@ -167,12 +167,8 @@ internal abstract class ValueFieldAccessor<T> : ValueFieldAccessor
167
167
168
168
protected virtual long Encode ( T value ) => throw new NotSupportedException ( ) ;
169
169
170
- protected virtual void Encode ( T value , long [ ] values , int offset ) => throw new NotSupportedException ( ) ;
171
-
172
170
protected virtual T Decode ( long value ) => throw new NotSupportedException ( ) ;
173
171
174
- protected virtual T Decode ( long [ ] values , int offset ) => throw new NotSupportedException ( ) ;
175
-
176
172
public override object GetUntypedValue ( PackedTuple tuple , in PackedFieldDescriptor descriptor , out TupleFieldState fieldState )
177
173
{
178
174
fieldState = tuple . GetFieldState ( descriptor ) ;
@@ -233,31 +229,17 @@ private void SetNullableValue(PackedTuple tuple, in PackedFieldDescriptor descri
233
229
}
234
230
}
235
231
236
- private void Store ( PackedTuple tuple , in PackedFieldDescriptor d , T value )
232
+ protected virtual void Store ( PackedTuple tuple , in PackedFieldDescriptor d , T value )
237
233
{
238
- var valueIndex = d . GetValueIndex ( ) ;
239
- if ( Rank > 6 ) {
240
- Encode ( value , tuple . Values , valueIndex ) ;
241
- return ;
242
- }
243
-
244
234
var encoded = Encode ( value ) ;
245
- ref var block = ref tuple . Values [ valueIndex ] ;
235
+ ref var block = ref tuple . Values [ d . GetValueIndex ( ) ] ;
246
236
var valueBitOffset = d . GetValueBitOffset ( ) ;
247
237
var mask = ValueBitMask << valueBitOffset ;
248
238
block = ( block & ~ mask ) | ( ( encoded << valueBitOffset ) & mask ) ;
249
239
}
250
240
251
- private T Load ( PackedTuple tuple , in PackedFieldDescriptor d )
252
- {
253
- var valueIndex = d . GetValueIndex ( ) ;
254
- if ( Rank > 6 ) {
255
- return Decode ( tuple . Values , valueIndex ) ;
256
- }
257
-
258
- var encoded = ( tuple . Values [ valueIndex ] >> d . GetValueBitOffset ( ) ) & ValueBitMask ;
259
- return Decode ( encoded ) ;
260
- }
241
+ protected virtual T Load ( PackedTuple tuple , in PackedFieldDescriptor d ) =>
242
+ Decode ( ( tuple . Values [ d . GetValueIndex ( ) ] >> d . GetValueBitOffset ( ) ) & ValueBitMask ) ;
261
243
262
244
protected ValueFieldAccessor ( int bits , byte index )
263
245
: base ( bits , index )
@@ -551,18 +533,18 @@ public ULongFieldAccessor()
551
533
552
534
internal sealed class GuidFieldAccessor : ValueFieldAccessor < Guid >
553
535
{
554
- protected override Guid Decode ( long [ ] values , int offset )
536
+ protected override Guid Load ( PackedTuple tuple , in PackedFieldDescriptor d )
555
537
{
556
538
unsafe {
557
- fixed ( long * valuePtr = & values [ offset ] )
539
+ fixed ( long * valuePtr = & tuple . Values [ d . GetValueIndex ( ) ] )
558
540
return * ( Guid * ) valuePtr ;
559
541
}
560
542
}
561
543
562
- protected override void Encode ( Guid value , long [ ] values , int offset )
544
+ protected override void Store ( PackedTuple tuple , in PackedFieldDescriptor d , Guid value )
563
545
{
564
546
unsafe {
565
- fixed ( long * valuePtr = & values [ offset ] )
547
+ fixed ( long * valuePtr = & tuple . Values [ d . GetValueIndex ( ) ] )
566
548
* ( Guid * ) valuePtr = value ;
567
549
}
568
550
}
@@ -583,18 +565,18 @@ public GuidFieldAccessor()
583
565
584
566
internal sealed class DecimalFieldAccessor : ValueFieldAccessor < decimal >
585
567
{
586
- protected override decimal Decode ( long [ ] values , int offset )
568
+ protected override decimal Load ( PackedTuple tuple , in PackedFieldDescriptor d )
587
569
{
588
570
unsafe {
589
- fixed ( long * valuePtr = & values [ offset ] )
571
+ fixed ( long * valuePtr = & tuple . Values [ d . GetValueIndex ( ) ] )
590
572
return * ( decimal * ) valuePtr ;
591
573
}
592
574
}
593
575
594
- protected override void Encode ( decimal value , long [ ] values , int offset )
576
+ protected override void Store ( PackedTuple tuple , in PackedFieldDescriptor d , decimal value )
595
577
{
596
578
unsafe {
597
- fixed ( long * valuePtr = & values [ offset ] )
579
+ fixed ( long * valuePtr = & tuple . Values [ d . GetValueIndex ( ) ] )
598
580
* ( decimal * ) valuePtr = value ;
599
581
}
600
582
}
@@ -610,18 +592,18 @@ public DecimalFieldAccessor()
610
592
611
593
internal sealed class DateTimeOffsetFieldAccessor : ValueFieldAccessor < DateTimeOffset >
612
594
{
613
- protected override DateTimeOffset Decode ( long [ ] values , int offset )
595
+ protected override DateTimeOffset Load ( PackedTuple tuple , in PackedFieldDescriptor d )
614
596
{
615
597
unsafe {
616
- fixed ( long * valuePtr = & values [ offset ] )
598
+ fixed ( long * valuePtr = & tuple . Values [ d . GetValueIndex ( ) ] )
617
599
return * ( DateTimeOffset * ) valuePtr ;
618
600
}
619
601
}
620
602
621
- protected override void Encode ( DateTimeOffset value , long [ ] values , int offset )
603
+ protected override void Store ( PackedTuple tuple , in PackedFieldDescriptor d , DateTimeOffset value )
622
604
{
623
605
unsafe {
624
- fixed ( long * valuePtr = & values [ offset ] )
606
+ fixed ( long * valuePtr = & tuple . Values [ d . GetValueIndex ( ) ] )
625
607
* ( DateTimeOffset * ) valuePtr = value ;
626
608
}
627
609
}
0 commit comments