Files
MycLib/Src/Data/Myc.Data.POD.pas
T
2025-08-28 12:30:13 +02:00

66 lines
1.5 KiB
ObjectPascal

unit Myc.Data.POD;
interface
uses
Myc.Data.Series;
type
// POD: Plain old data (that fits into a 64 bit register)
TScalarKind = (skInteger, skInt64, skUInt64, skSingle, skDouble, skTimestamp, skBoolean, skChar, skString, skBytes);
TScalarValue = record
case TScalarKind of
skInteger: (AsInteger: Integer);
skInt64: (AsInt64: Int64);
skUInt64: (AsUInt64: UInt64);
skSingle: (AsSingle: Single);
skDouble: (AsDouble: Double);
skTimestamp: (AsTimeStamp: TDateTime);
skBoolean: (AsBoolean: Boolean);
skChar: (AsChar: Char);
skString: (AsString: String[15]);
skBytes: (AsBytes: array[0..15] of Byte);
end;
TScalar = record
Kind: TScalarKind;
Value: TScalarValue;
end;
// Basic data structures using the scalar type (these ar not POD of course)
TScalarArray = record
Kind: TScalarKind;
Items: TArray<TScalarValue>;
end;
TScalarTuple = TArray<TScalar>;
TScalarRecordField = record
Name: String;
Kind: TScalarKind;
end;
TScalarRecordDefinition = record
Fields: TArray<TScalarRecordField>;
end;
TScalarRecord = record
Def: TScalarRecordDefinition;
Fields: TArray<TScalarValue>;
end;
TScalarSeries = record
Kind: TScalarKind;
Items: TSeries<TScalarValue>;
end;
implementation
initialization
Assert(sizeof(TScalarValue) = 16);
end.