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: IDataValue): TDataType.TValue; overload; inline;
|
||||||
class operator Implicit(const A: TDataType.TValue): IDataValue; 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 DataValue: IDataValue read FDataValue;
|
||||||
property DataType: IDataType read GetDataType;
|
property DataType: IDataType read GetDataType;
|
||||||
end;
|
end;
|
||||||
@@ -1656,66 +1644,11 @@ begin
|
|||||||
Result := A.FDataValue;
|
Result := A.FDataValue;
|
||||||
end;
|
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;
|
class operator TDataType.TValue.Implicit(const A: IDataValue): TDataType.TValue;
|
||||||
begin
|
begin
|
||||||
Result.FDataValue := A;
|
Result.FDataValue := A;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class operator TDataType.TValue.Implicit(const A: IDataVoidValue): TDataType.TValue;
|
|
||||||
begin
|
|
||||||
Result.FDataValue := A;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TDataType.AsArray: TDataType.TArray;
|
function TDataType.AsArray: TDataType.TArray;
|
||||||
begin
|
begin
|
||||||
if (FDataType.Kind <> dkArray) then
|
if (FDataType.Kind <> dkArray) then
|
||||||
|
|||||||
@@ -797,18 +797,18 @@ begin
|
|||||||
var paramsType :=
|
var paramsType :=
|
||||||
TDataType.RecordOf(
|
TDataType.RecordOf(
|
||||||
[
|
[
|
||||||
TRecordField.Create('FastPeriod', TDataType.Ordinal),
|
TDataRecordField.Create('FastPeriod', TDataType.Ordinal),
|
||||||
TRecordField.Create('SlowPeriod', TDataType.Ordinal),
|
TDataRecordField.Create('SlowPeriod', TDataType.Ordinal),
|
||||||
TRecordField.Create('SignalPeriod', TDataType.Ordinal)
|
TDataRecordField.Create('SignalPeriod', TDataType.Ordinal)
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
var argsType := TDataType.Float;
|
var argsType := TDataType.Float;
|
||||||
var resultType :=
|
var resultType :=
|
||||||
TDataType.RecordOf(
|
TDataType.RecordOf(
|
||||||
[
|
[
|
||||||
TRecordField.Create('MacdLine', TDataType.Float),
|
TDataRecordField.Create('MacdLine', TDataType.Float),
|
||||||
TRecordField.Create('SignalLine', TDataType.Float),
|
TDataRecordField.Create('SignalLine', TDataType.Float),
|
||||||
TRecordField.Create('Histogram', TDataType.Float)
|
TDataRecordField.Create('Histogram', TDataType.Float)
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -962,21 +962,21 @@ end;
|
|||||||
class constructor TStochastic.CreateClass;
|
class constructor TStochastic.CreateClass;
|
||||||
begin
|
begin
|
||||||
var paramsType :=
|
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 :=
|
var ohlcType :=
|
||||||
TDataType.RecordOf(
|
TDataType.RecordOf(
|
||||||
[
|
[
|
||||||
TRecordField.Create('Open', TDataType.Float),
|
TDataRecordField.Create('Open', TDataType.Float),
|
||||||
TRecordField.Create('High', TDataType.Float),
|
TDataRecordField.Create('High', TDataType.Float),
|
||||||
TRecordField.Create('Low', TDataType.Float),
|
TDataRecordField.Create('Low', TDataType.Float),
|
||||||
TRecordField.Create('Close', TDataType.Float),
|
TDataRecordField.Create('Close', TDataType.Float),
|
||||||
TRecordField.Create('Volume', TDataType.Float)
|
TDataRecordField.Create('Volume', TDataType.Float)
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
var argsType := ohlcType;
|
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 indicatorMethodType := TDataType.MethodOf(argsType, resultType);
|
||||||
var factoryMethodType := TDataType.MethodOf(paramsType, indicatorMethodType);
|
var factoryMethodType := TDataType.MethodOf(paramsType, indicatorMethodType);
|
||||||
@@ -1218,14 +1218,14 @@ end;
|
|||||||
class constructor TBollingerBands.CreateClass;
|
class constructor TBollingerBands.CreateClass;
|
||||||
begin
|
begin
|
||||||
var paramsType :=
|
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 argsType := TDataType.Float;
|
||||||
var resultType :=
|
var resultType :=
|
||||||
TDataType.RecordOf(
|
TDataType.RecordOf(
|
||||||
[
|
[
|
||||||
TRecordField.Create('UpperBand', TDataType.Float),
|
TDataRecordField.Create('UpperBand', TDataType.Float),
|
||||||
TRecordField.Create('MiddleBand', TDataType.Float),
|
TDataRecordField.Create('MiddleBand', TDataType.Float),
|
||||||
TRecordField.Create('LowerBand', TDataType.Float)
|
TDataRecordField.Create('LowerBand', TDataType.Float)
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -1316,11 +1316,11 @@ begin
|
|||||||
var ohlcType :=
|
var ohlcType :=
|
||||||
TDataType.RecordOf(
|
TDataType.RecordOf(
|
||||||
[
|
[
|
||||||
TRecordField.Create('Open', TDataType.Float),
|
TDataRecordField.Create('Open', TDataType.Float),
|
||||||
TRecordField.Create('High', TDataType.Float),
|
TDataRecordField.Create('High', TDataType.Float),
|
||||||
TRecordField.Create('Low', TDataType.Float),
|
TDataRecordField.Create('Low', TDataType.Float),
|
||||||
TRecordField.Create('Close', TDataType.Float),
|
TDataRecordField.Create('Close', TDataType.Float),
|
||||||
TRecordField.Create('Volume', TDataType.Float)
|
TDataRecordField.Create('Volume', TDataType.Float)
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
var argsType := ohlcType;
|
var argsType := ohlcType;
|
||||||
@@ -1405,24 +1405,24 @@ end;
|
|||||||
class constructor TKeltnerChannels.CreateClass;
|
class constructor TKeltnerChannels.CreateClass;
|
||||||
begin
|
begin
|
||||||
var paramsType :=
|
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 :=
|
var ohlcType :=
|
||||||
TDataType.RecordOf(
|
TDataType.RecordOf(
|
||||||
[
|
[
|
||||||
TRecordField.Create('Open', TDataType.Float),
|
TDataRecordField.Create('Open', TDataType.Float),
|
||||||
TRecordField.Create('High', TDataType.Float),
|
TDataRecordField.Create('High', TDataType.Float),
|
||||||
TRecordField.Create('Low', TDataType.Float),
|
TDataRecordField.Create('Low', TDataType.Float),
|
||||||
TRecordField.Create('Close', TDataType.Float),
|
TDataRecordField.Create('Close', TDataType.Float),
|
||||||
TRecordField.Create('Volume', TDataType.Float)
|
TDataRecordField.Create('Volume', TDataType.Float)
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
var argsType := ohlcType;
|
var argsType := ohlcType;
|
||||||
var resultType :=
|
var resultType :=
|
||||||
TDataType.RecordOf(
|
TDataType.RecordOf(
|
||||||
[
|
[
|
||||||
TRecordField.Create('UpperBand', TDataType.Float),
|
TDataRecordField.Create('UpperBand', TDataType.Float),
|
||||||
TRecordField.Create('MiddleBand', TDataType.Float),
|
TDataRecordField.Create('MiddleBand', TDataType.Float),
|
||||||
TRecordField.Create('LowerBand', TDataType.Float)
|
TDataRecordField.Create('LowerBand', TDataType.Float)
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -191,11 +191,11 @@ begin
|
|||||||
tkRecord:
|
tkRecord:
|
||||||
begin
|
begin
|
||||||
var rttiRecord := rttiType as TRttiRecordType;
|
var rttiRecord := rttiType as TRttiRecordType;
|
||||||
var recordFields := TArray<TRecordField>.Create();
|
var recordFields := TArray<TDataRecordField>.Create();
|
||||||
for var rttiField in rttiRecord.GetFields do
|
for var rttiField in rttiRecord.GetFields do
|
||||||
begin
|
begin
|
||||||
var fieldType := DataTypeFromRttiType(Ctx, rttiField.FieldType);
|
var fieldType := DataTypeFromRttiType(Ctx, rttiField.FieldType);
|
||||||
recordFields := recordFields + [TRecordField.Create(rttiField.Name, fieldType)];
|
recordFields := recordFields + [TDataRecordField.Create(rttiField.Name, fieldType)];
|
||||||
end;
|
end;
|
||||||
Result := TDataType.RecordOf(recordFields);
|
Result := TDataType.RecordOf(recordFields);
|
||||||
end;
|
end;
|
||||||
|
|||||||
Reference in New Issue
Block a user