Files
MycLib/Src/Myc.DataRecord.Impl.pas
T
2025-07-22 01:13:01 +02:00

90 lines
2.3 KiB
ObjectPascal

unit Myc.DataRecord.Impl;
interface
uses
System.SysUtils,
System.Rtti,
System.TypInfo,
System.Generics.Collections,
System.Generics.Defaults,
Myc.DataRecord;
type
TFieldLayoutComparer = class(TComparer<TDataRecord.TField>)
strict private
class var
FDefaultComparer: IComparer<TDataRecord.TField>;
class constructor CreateClass;
public
function Compare(const Left, Right: TDataRecord.TField): Integer; override;
class property DefaultComparer: IComparer<TDataRecord.TField> read FDefaultComparer;
end;
implementation
(*
procedure TIntegerField.GetRaw(const [ref] Buffer: TBytes; Dst: Pointer);
begin
PInteger(Dst)^ := PInteger(GetRawRef(Buffer))^;
end;
procedure TIntegerField.SetRaw(const [ref] Buffer: TBytes; Src: Pointer);
begin
PInteger(GetRawRef(Buffer))^ := PInteger(Src)^;
end;
procedure TSingleField.GetRaw(const [ref] Buffer: TBytes; Dst: Pointer);
begin
PSingle(Dst)^ := PSingle(GetRawRef(Buffer))^;
end;
procedure TSingleField.SetRaw(const [ref] Buffer: TBytes; Src: Pointer);
begin
PSingle(GetRawRef(Buffer))^ := PSingle(Src)^;
end;
procedure TDoubleField.GetRaw(const [ref] Buffer: TBytes; Dst: Pointer);
begin
PDouble(Dst)^ := PDouble(GetRawRef(Buffer))^;
end;
procedure TDoubleField.SetRaw(const [ref] Buffer: TBytes; Src: Pointer);
begin
PDouble(GetRawRef(Buffer))^ := PDouble(Src)^;
end;
procedure TInt64Field.GetRaw(const [ref] Buffer: TBytes; Dst: Pointer);
begin
PInt64(Dst)^ := PInt64(GetRawRef(Buffer))^;
end;
procedure TInt64Field.SetRaw(const [ref] Buffer: TBytes; Src: Pointer);
begin
PInt64(GetRawRef(Buffer))^ := PInt64(Src)^;
end;
procedure TStringField.GetRaw(const [ref] Buffer: TBytes; Dst: Pointer);
begin
PString(Dst)^ := PString(GetRawRef(Buffer))^;
end;
procedure TStringField.SetRaw(const [ref] Buffer: TBytes; Src: Pointer);
begin
PString(GetRawRef(Buffer))^ := PString(Src)^;
end;
*)
{ TFieldLayoutComparer }
class constructor TFieldLayoutComparer.CreateClass;
begin
FDefaultComparer := TFieldLayoutComparer.Create;
end;
function TFieldLayoutComparer.Compare(const Left, Right: TDataRecord.TField): Integer;
begin
Result := TComparer<string>.Default.Compare(Left.Name, Right.Name);
end;
end.