New type system
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
]
|
||||
);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user