New type system

This commit is contained in:
Michael Schimmel
2025-08-26 14:42:14 +02:00
parent 769497887f
commit 8e8f139785
3 changed files with 33 additions and 100 deletions
-67
View File
@@ -217,18 +217,6 @@ type
class operator Implicit(const A: IDataValue): TDataType.TValue; overload; inline;
class operator Implicit(const A: TDataType.TValue): IDataValue; overload; inline;
class operator Implicit(const A: IDataOrdinalValue): TDataType.TValue; overload; inline;
class operator Implicit(const A: IDataFloatValue): TDataType.TValue; overload; inline;
class operator Implicit(const A: IDataTextValue): TDataType.TValue; overload; inline;
class operator Implicit(const A: IDataTimestampValue): TDataType.TValue; overload; inline;
class operator Implicit(const A: IDataDecimalValue): TDataType.TValue; overload; inline;
class operator Implicit(const A: IDataEnumValue): TDataType.TValue; overload; inline;
class operator Implicit(const A: IDataMethodValue): TDataType.TValue; overload; inline;
class operator Implicit(const A: IDataRecordValue): TDataType.TValue; overload; inline;
class operator Implicit(const A: IDataTupleValue): TDataType.TValue; overload; inline;
class operator Implicit(const A: IDataArrayValue): TDataType.TValue; overload; inline;
class operator Implicit(const A: IDataVoidValue): TDataType.TValue; overload; inline;
property DataValue: IDataValue read FDataValue;
property DataType: IDataType read GetDataType;
end;
@@ -1656,66 +1644,11 @@ begin
Result := A.FDataValue;
end;
class operator TDataType.TValue.Implicit(const A: IDataArrayValue): TDataType.TValue;
begin
Result.FDataValue := A;
end;
class operator TDataType.TValue.Implicit(const A: IDataDecimalValue): TDataType.TValue;
begin
Result.FDataValue := A;
end;
class operator TDataType.TValue.Implicit(const A: IDataEnumValue): TDataType.TValue;
begin
Result.FDataValue := A;
end;
class operator TDataType.TValue.Implicit(const A: IDataFloatValue): TDataType.TValue;
begin
Result.FDataValue := A;
end;
class operator TDataType.TValue.Implicit(const A: IDataMethodValue): TDataType.TValue;
begin
Result.FDataValue := A;
end;
class operator TDataType.TValue.Implicit(const A: IDataOrdinalValue): TDataType.TValue;
begin
Result.FDataValue := A;
end;
class operator TDataType.TValue.Implicit(const A: IDataRecordValue): TDataType.TValue;
begin
Result.FDataValue := A;
end;
class operator TDataType.TValue.Implicit(const A: IDataTextValue): TDataType.TValue;
begin
Result.FDataValue := A;
end;
class operator TDataType.TValue.Implicit(const A: IDataTimestampValue): TDataType.TValue;
begin
Result.FDataValue := A;
end;
class operator TDataType.TValue.Implicit(const A: IDataTupleValue): TDataType.TValue;
begin
Result.FDataValue := A;
end;
class operator TDataType.TValue.Implicit(const A: IDataValue): TDataType.TValue;
begin
Result.FDataValue := A;
end;
class operator TDataType.TValue.Implicit(const A: IDataVoidValue): TDataType.TValue;
begin
Result.FDataValue := A;
end;
function TDataType.AsArray: TDataType.TArray;
begin
if (FDataType.Kind <> dkArray) then
+31 -31
View File
@@ -797,18 +797,18 @@ begin
var paramsType :=
TDataType.RecordOf(
[
TRecordField.Create('FastPeriod', TDataType.Ordinal),
TRecordField.Create('SlowPeriod', TDataType.Ordinal),
TRecordField.Create('SignalPeriod', TDataType.Ordinal)
TDataRecordField.Create('FastPeriod', TDataType.Ordinal),
TDataRecordField.Create('SlowPeriod', TDataType.Ordinal),
TDataRecordField.Create('SignalPeriod', TDataType.Ordinal)
]
);
var argsType := TDataType.Float;
var resultType :=
TDataType.RecordOf(
[
TRecordField.Create('MacdLine', TDataType.Float),
TRecordField.Create('SignalLine', TDataType.Float),
TRecordField.Create('Histogram', TDataType.Float)
TDataRecordField.Create('MacdLine', TDataType.Float),
TDataRecordField.Create('SignalLine', TDataType.Float),
TDataRecordField.Create('Histogram', TDataType.Float)
]
);
@@ -962,21 +962,21 @@ end;
class constructor TStochastic.CreateClass;
begin
var paramsType :=
TDataType.RecordOf([TRecordField.Create('KPeriod', TDataType.Ordinal), TRecordField.Create('DPeriod', TDataType.Ordinal)]);
TDataType.RecordOf([TDataRecordField.Create('KPeriod', TDataType.Ordinal), TDataRecordField.Create('DPeriod', TDataType.Ordinal)]);
var ohlcType :=
TDataType.RecordOf(
[
TRecordField.Create('Open', TDataType.Float),
TRecordField.Create('High', TDataType.Float),
TRecordField.Create('Low', TDataType.Float),
TRecordField.Create('Close', TDataType.Float),
TRecordField.Create('Volume', TDataType.Float)
TDataRecordField.Create('Open', TDataType.Float),
TDataRecordField.Create('High', TDataType.Float),
TDataRecordField.Create('Low', TDataType.Float),
TDataRecordField.Create('Close', TDataType.Float),
TDataRecordField.Create('Volume', TDataType.Float)
]
);
var argsType := ohlcType;
var resultType := TDataType.RecordOf([TRecordField.Create('K', TDataType.Float), TRecordField.Create('D', TDataType.Float)]);
var resultType := TDataType.RecordOf([TDataRecordField.Create('K', TDataType.Float), TDataRecordField.Create('D', TDataType.Float)]);
var indicatorMethodType := TDataType.MethodOf(argsType, resultType);
var factoryMethodType := TDataType.MethodOf(paramsType, indicatorMethodType);
@@ -1218,14 +1218,14 @@ end;
class constructor TBollingerBands.CreateClass;
begin
var paramsType :=
TDataType.RecordOf([TRecordField.Create('Period', TDataType.Ordinal), TRecordField.Create('Multiplier', TDataType.Float)]);
TDataType.RecordOf([TDataRecordField.Create('Period', TDataType.Ordinal), TDataRecordField.Create('Multiplier', TDataType.Float)]);
var argsType := TDataType.Float;
var resultType :=
TDataType.RecordOf(
[
TRecordField.Create('UpperBand', TDataType.Float),
TRecordField.Create('MiddleBand', TDataType.Float),
TRecordField.Create('LowerBand', TDataType.Float)
TDataRecordField.Create('UpperBand', TDataType.Float),
TDataRecordField.Create('MiddleBand', TDataType.Float),
TDataRecordField.Create('LowerBand', TDataType.Float)
]
);
@@ -1316,11 +1316,11 @@ begin
var ohlcType :=
TDataType.RecordOf(
[
TRecordField.Create('Open', TDataType.Float),
TRecordField.Create('High', TDataType.Float),
TRecordField.Create('Low', TDataType.Float),
TRecordField.Create('Close', TDataType.Float),
TRecordField.Create('Volume', TDataType.Float)
TDataRecordField.Create('Open', TDataType.Float),
TDataRecordField.Create('High', TDataType.Float),
TDataRecordField.Create('Low', TDataType.Float),
TDataRecordField.Create('Close', TDataType.Float),
TDataRecordField.Create('Volume', TDataType.Float)
]
);
var argsType := ohlcType;
@@ -1405,24 +1405,24 @@ end;
class constructor TKeltnerChannels.CreateClass;
begin
var paramsType :=
TDataType.RecordOf([TRecordField.Create('Period', TDataType.Ordinal), TRecordField.Create('Multiplier', TDataType.Float)]);
TDataType.RecordOf([TDataRecordField.Create('Period', TDataType.Ordinal), TDataRecordField.Create('Multiplier', TDataType.Float)]);
var ohlcType :=
TDataType.RecordOf(
[
TRecordField.Create('Open', TDataType.Float),
TRecordField.Create('High', TDataType.Float),
TRecordField.Create('Low', TDataType.Float),
TRecordField.Create('Close', TDataType.Float),
TRecordField.Create('Volume', TDataType.Float)
TDataRecordField.Create('Open', TDataType.Float),
TDataRecordField.Create('High', TDataType.Float),
TDataRecordField.Create('Low', TDataType.Float),
TDataRecordField.Create('Close', TDataType.Float),
TDataRecordField.Create('Volume', TDataType.Float)
]
);
var argsType := ohlcType;
var resultType :=
TDataType.RecordOf(
[
TRecordField.Create('UpperBand', TDataType.Float),
TRecordField.Create('MiddleBand', TDataType.Float),
TRecordField.Create('LowerBand', TDataType.Float)
TDataRecordField.Create('UpperBand', TDataType.Float),
TDataRecordField.Create('MiddleBand', TDataType.Float),
TDataRecordField.Create('LowerBand', TDataType.Float)
]
);
+2 -2
View File
@@ -191,11 +191,11 @@ begin
tkRecord:
begin
var rttiRecord := rttiType as TRttiRecordType;
var recordFields := TArray<TRecordField>.Create();
var recordFields := TArray<TDataRecordField>.Create();
for var rttiField in rttiRecord.GetFields do
begin
var fieldType := DataTypeFromRttiType(Ctx, rttiField.FieldType);
recordFields := recordFields + [TRecordField.Create(rttiField.Name, fieldType)];
recordFields := recordFields + [TDataRecordField.Create(rttiField.Name, fieldType)];
end;
Result := TDataType.RecordOf(recordFields);
end;