Skip to content

Optimization: Don't pass not-readonly PackedFieldDescriptor with in specifier #197

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 29, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Orm/Xtensive.Orm/Tuples/AccessorDelegates.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace Xtensive.Tuples
/// <param name="descriptor">Field descriptor.</param>
/// <param name="fieldState">State of a field.</param>
/// <returns></returns>
internal delegate TValue GetValueDelegate<TValue>(PackedTuple tuple, in PackedFieldDescriptor descriptor, out TupleFieldState fieldState);
internal delegate TValue GetValueDelegate<TValue>(PackedTuple tuple, PackedFieldDescriptor descriptor, out TupleFieldState fieldState);

/// <summary>
/// Incapsulates <see cref="Tuple.SetValue{T}"/> method.
Expand All @@ -25,5 +25,5 @@ namespace Xtensive.Tuples
/// <param name="tuple">Tuple to use.</param>
/// <param name="descriptor">Field descriptor.</param>
/// <param name="value">A value.</param>
internal delegate void SetValueDelegate<TValue>(PackedTuple tuple, in PackedFieldDescriptor descriptor, TValue value);
internal delegate void SetValueDelegate<TValue>(PackedTuple tuple, PackedFieldDescriptor descriptor, TValue value);
}
96 changes: 48 additions & 48 deletions Orm/Xtensive.Orm/Tuples/Packed/PackedFieldAccessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ internal abstract class PackedFieldAccessor
protected readonly long ValueBitMask;
public readonly byte Index;

public void SetValue<T>(PackedTuple tuple, in PackedFieldDescriptor descriptor, bool isNullable, T value)
public void SetValue<T>(PackedTuple tuple, PackedFieldDescriptor descriptor, bool isNullable, T value)
{
if ((isNullable ? NullableSetter : Setter) is SetValueDelegate<T> setter) {
setter.Invoke(tuple, descriptor, value);
Expand All @@ -50,10 +50,10 @@ public void SetValue<T>(PackedTuple tuple, in PackedFieldDescriptor descriptor,
}
}

public virtual void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public virtual void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
throw new NotSupportedException($"{this} does not support reading from DbDataReader");

public T GetValue<T>(PackedTuple tuple, in PackedFieldDescriptor descriptor, bool isNullable, out TupleFieldState fieldState)
public T GetValue<T>(PackedTuple tuple, PackedFieldDescriptor descriptor, bool isNullable, out TupleFieldState fieldState)
{
if ((isNullable ? NullableGetter : Getter) is GetValueDelegate<T> getter) {
return getter.Invoke(tuple, descriptor, out fieldState);
Expand All @@ -70,17 +70,17 @@ public T GetValue<T>(PackedTuple tuple, in PackedFieldDescriptor descriptor, boo
return (T) GetUntypedValue(tuple, descriptor, out fieldState);
}

public abstract object GetUntypedValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, out TupleFieldState fieldState);
public abstract object GetUntypedValue(PackedTuple tuple, PackedFieldDescriptor descriptor, out TupleFieldState fieldState);

public abstract void SetUntypedValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, object value);
public abstract void SetUntypedValue(PackedTuple tuple, PackedFieldDescriptor descriptor, object value);

public abstract void CopyValue(PackedTuple source, in PackedFieldDescriptor sourceDescriptor,
PackedTuple target, in PackedFieldDescriptor targetDescriptor);
public abstract void CopyValue(PackedTuple source, PackedFieldDescriptor sourceDescriptor,
PackedTuple target, PackedFieldDescriptor targetDescriptor);

public abstract bool ValueEquals(PackedTuple left, in PackedFieldDescriptor leftDescriptor,
PackedTuple right, in PackedFieldDescriptor rightDescriptor);
public abstract bool ValueEquals(PackedTuple left, PackedFieldDescriptor leftDescriptor,
PackedTuple right, PackedFieldDescriptor rightDescriptor);

public abstract int GetValueHashCode(PackedTuple tuple, in PackedFieldDescriptor descriptor);
public abstract int GetValueHashCode(PackedTuple tuple, PackedFieldDescriptor descriptor);

protected PackedFieldAccessor(int rank, byte index)
{
Expand Down Expand Up @@ -109,35 +109,35 @@ protected PackedFieldAccessor(int rank, byte index)

internal sealed class ObjectFieldAccessor : PackedFieldAccessor
{
public override object GetUntypedValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, out TupleFieldState fieldState)
public override object GetUntypedValue(PackedTuple tuple, PackedFieldDescriptor descriptor, out TupleFieldState fieldState)
{
var state = tuple.GetFieldState(descriptor);
fieldState = state;
return state == TupleFieldState.Available ? tuple.Objects[descriptor.GetObjectIndex()] : null;
}

public override void SetUntypedValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, object value)
public override void SetUntypedValue(PackedTuple tuple, PackedFieldDescriptor descriptor, object value)
{
tuple.Objects[descriptor.GetObjectIndex()] = value;
tuple.SetFieldState(descriptor, value != null ? TupleFieldState.Available : (TupleFieldState.Available | TupleFieldState.Null));
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetUntypedValue(tuple, descriptor, mr.Reader(mr.DbDataReader, mr.FieldIndex));

public override void CopyValue(PackedTuple source, in PackedFieldDescriptor sourceDescriptor,
PackedTuple target, in PackedFieldDescriptor targetDescriptor)
public override void CopyValue(PackedTuple source, PackedFieldDescriptor sourceDescriptor,
PackedTuple target, PackedFieldDescriptor targetDescriptor)
{
target.Objects[targetDescriptor.GetObjectIndex()] = source.Objects[sourceDescriptor.GetObjectIndex()];
}

public override bool ValueEquals(PackedTuple left, in PackedFieldDescriptor leftDescriptor,
PackedTuple right, in PackedFieldDescriptor rightDescriptor)
public override bool ValueEquals(PackedTuple left, PackedFieldDescriptor leftDescriptor,
PackedTuple right, PackedFieldDescriptor rightDescriptor)
{
return Equals(left.Objects[leftDescriptor.GetObjectIndex()], right.Objects[rightDescriptor.GetObjectIndex()]);
}

public override int GetValueHashCode(PackedTuple tuple, in PackedFieldDescriptor descriptor)
public override int GetValueHashCode(PackedTuple tuple, PackedFieldDescriptor descriptor)
{
return tuple.Objects[descriptor.GetObjectIndex()]?.GetHashCode() ?? 0;
}
Expand Down Expand Up @@ -173,13 +173,13 @@ internal abstract class ValueFieldAccessor<T> : ValueFieldAccessor

protected virtual T Decode(long[] values, int offset) => throw new NotSupportedException();

public override object GetUntypedValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, out TupleFieldState fieldState)
public override object GetUntypedValue(PackedTuple tuple, PackedFieldDescriptor descriptor, out TupleFieldState fieldState)
{
fieldState = tuple.GetFieldState(descriptor);
return fieldState == TupleFieldState.Available ? (object) Load(tuple, descriptor) : null;
}

public override void SetUntypedValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, object value)
public override void SetUntypedValue(PackedTuple tuple, PackedFieldDescriptor descriptor, object value)
{
if (value != null) {
Store(tuple, descriptor, (T) value);
Expand All @@ -190,39 +190,39 @@ public override void SetUntypedValue(PackedTuple tuple, in PackedFieldDescriptor
}
}

public override void CopyValue(PackedTuple source, in PackedFieldDescriptor sourceDescriptor,
PackedTuple target, in PackedFieldDescriptor targetDescriptor)
public override void CopyValue(PackedTuple source, PackedFieldDescriptor sourceDescriptor,
PackedTuple target, PackedFieldDescriptor targetDescriptor)
{
Store(target, targetDescriptor, Load(source, sourceDescriptor));
}

public override bool ValueEquals(PackedTuple left, in PackedFieldDescriptor leftDescriptor, PackedTuple right, in PackedFieldDescriptor rightDescriptor) =>
public override bool ValueEquals(PackedTuple left, PackedFieldDescriptor leftDescriptor, PackedTuple right, PackedFieldDescriptor rightDescriptor) =>
Load(left, leftDescriptor).Equals(Load(right, rightDescriptor));

public override int GetValueHashCode(PackedTuple tuple, in PackedFieldDescriptor descriptor)
public override int GetValueHashCode(PackedTuple tuple, PackedFieldDescriptor descriptor)
{
return Load(tuple, descriptor).GetHashCode();
}

private T GetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, out TupleFieldState fieldState)
private T GetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, out TupleFieldState fieldState)
{
fieldState = tuple.GetFieldState(descriptor);
return fieldState == TupleFieldState.Available ? Load(tuple, descriptor) : DefaultValue;
}

private T? GetNullableValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, out TupleFieldState fieldState)
private T? GetNullableValue(PackedTuple tuple, PackedFieldDescriptor descriptor, out TupleFieldState fieldState)
{
fieldState = tuple.GetFieldState(descriptor);
return fieldState == TupleFieldState.Available ? Load(tuple, descriptor) : NullValue;
}

protected void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, T value)
protected void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, T value)
{
Store(tuple, descriptor, value);
tuple.SetFieldState(descriptor, TupleFieldState.Available);
}

private void SetNullableValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, T? value)
private void SetNullableValue(PackedTuple tuple, PackedFieldDescriptor descriptor, T? value)
{
if (value != null) {
Store(tuple, descriptor, value.Value);
Expand All @@ -233,7 +233,7 @@ private void SetNullableValue(PackedTuple tuple, in PackedFieldDescriptor descri
}
}

private void Store(PackedTuple tuple, in PackedFieldDescriptor d, T value)
private void Store(PackedTuple tuple, PackedFieldDescriptor d, T value)
{
var valueIndex = d.GetValueIndex();
if (Rank > 6) {
Expand All @@ -248,7 +248,7 @@ private void Store(PackedTuple tuple, in PackedFieldDescriptor d, T value)
block = (block & ~mask) | ((encoded << valueBitOffset) & mask);
}

private T Load(PackedTuple tuple, in PackedFieldDescriptor d)
private T Load(PackedTuple tuple, PackedFieldDescriptor d)
{
var valueIndex = d.GetValueIndex();
if (Rank > 6) {
Expand Down Expand Up @@ -283,7 +283,7 @@ protected override bool Decode(long value)
return value != 0;
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadBoolean(mr.DbDataReader, mr.FieldIndex));

public BooleanFieldAccessor()
Expand All @@ -309,7 +309,7 @@ protected override float Decode(long value)
}
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadFloat(mr.DbDataReader, mr.FieldIndex));

public FloatFieldAccessor()
Expand All @@ -330,7 +330,7 @@ protected override double Decode(long value)
return BitConverter.Int64BitsToDouble(value);
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadDouble(mr.DbDataReader, mr.FieldIndex));

public DoubleFieldAccessor()
Expand All @@ -351,7 +351,7 @@ protected override TimeSpan Decode(long value)
return TimeSpan.FromTicks(value);
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadTimeSpan(mr.DbDataReader, mr.FieldIndex));

public TimeSpanFieldAccessor()
Expand All @@ -372,7 +372,7 @@ protected override DateTime Decode(long value)
return DateTime.FromBinary(value);
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadDateTime(mr.DbDataReader, mr.FieldIndex));

public DateTimeFieldAccessor()
Expand All @@ -393,7 +393,7 @@ protected override byte Decode(long value)
return unchecked((byte) value);
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadByte(mr.DbDataReader, mr.FieldIndex));

public ByteFieldAccessor()
Expand All @@ -414,7 +414,7 @@ protected override sbyte Decode(long value)
return unchecked((sbyte) value);
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadSByte(mr.DbDataReader, mr.FieldIndex));

public SByteFieldAccessor()
Expand All @@ -435,7 +435,7 @@ protected override short Decode(long value)
return unchecked((short) value);
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadShort(mr.DbDataReader, mr.FieldIndex));

public ShortFieldAccessor()
Expand All @@ -456,7 +456,7 @@ protected override ushort Decode(long value)
return unchecked((ushort) value);
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadUShort(mr.DbDataReader, mr.FieldIndex));

public UShortFieldAccessor()
Expand All @@ -477,7 +477,7 @@ protected override int Decode(long value)
return unchecked((int) value);
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadInt(mr.DbDataReader, mr.FieldIndex));

public IntFieldAccessor()
Expand All @@ -498,7 +498,7 @@ protected override uint Decode(long value)
return unchecked((uint) value);
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadUInt(mr.DbDataReader, mr.FieldIndex));

public UIntFieldAccessor()
Expand All @@ -519,7 +519,7 @@ protected override long Decode(long value)
return value;
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadLong(mr.DbDataReader, mr.FieldIndex));

public LongFieldAccessor()
Expand All @@ -540,7 +540,7 @@ protected override ulong Decode(long value)
return unchecked((ulong) value);
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadULong(mr.DbDataReader, mr.FieldIndex));

public ULongFieldAccessor()
Expand Down Expand Up @@ -572,7 +572,7 @@ private static unsafe int GetSize()
return sizeof(Guid);
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadGuid(mr.DbDataReader, mr.FieldIndex));

public GuidFieldAccessor()
Expand All @@ -599,7 +599,7 @@ protected override void Encode(decimal value, long[] values, int offset)
}
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadDecimal(mr.DbDataReader, mr.FieldIndex));

public DecimalFieldAccessor()
Expand Down Expand Up @@ -635,7 +635,7 @@ private static unsafe int GetSize()
return sizeof(long) * 2;
}

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadDateTimeOffset(mr.DbDataReader, mr.FieldIndex));

public DateTimeOffsetFieldAccessor()
Expand All @@ -651,7 +651,7 @@ protected override DateOnly Decode(long value) =>
protected override long Encode(DateOnly value) =>
value.DayNumber;

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadDateOnly(mr.DbDataReader, mr.FieldIndex));

public DateOnlyFieldAccessor()
Expand All @@ -667,7 +667,7 @@ protected override TimeOnly Decode(long value) =>
protected override long Encode(TimeOnly value) =>
value.Ticks;

public override void SetValue(PackedTuple tuple, in PackedFieldDescriptor descriptor, MapperReader mr) =>
public override void SetValue(PackedTuple tuple, PackedFieldDescriptor descriptor, MapperReader mr) =>
SetValue(tuple, descriptor, mr.Mapper.ReadTimeOnly(mr.DbDataReader, mr.FieldIndex));

public TimeOnlyFieldAccessor()
Expand Down
4 changes: 2 additions & 2 deletions Orm/Xtensive.Orm/Tuples/Packed/PackedTuple.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ public override void SetValueFromDataReader(in MapperReader mr)
}
}

public void SetFieldState(in PackedFieldDescriptor d, TupleFieldState fieldState)
public void SetFieldState(PackedFieldDescriptor d, TupleFieldState fieldState)
{
var bits = (long) fieldState;
ref var block = ref Values[d.GetStateIndex()];
Expand All @@ -140,7 +140,7 @@ public void SetFieldState(in PackedFieldDescriptor d, TupleFieldState fieldState
}
}

public TupleFieldState GetFieldState(in PackedFieldDescriptor d)
public TupleFieldState GetFieldState(PackedFieldDescriptor d)
{
int stateIndex = d.GetStateIndex(), stateBitOffset = d.GetStateBitOffset();
return (TupleFieldState) ((Values[stateIndex] >> stateBitOffset) & 3);
Expand Down