Reworking DataRecords and DataFlow
This commit is contained in:
+23
-11
@@ -124,6 +124,8 @@ type
|
||||
class function FieldToRecord<T>(const Layout: TDataRecord.TLayout; const Name: String): TConverter<T, TDataRecord>; static;
|
||||
class function FieldOfRecord<T>(const Layout: TDataRecord.TLayout; const Name: String): TConverter<TDataRecord, T>; static;
|
||||
|
||||
class function Join<T>(const DataProviders: TArray<TDataProvider<T>>): TDataProvider<TArray<T>>; static;
|
||||
|
||||
type
|
||||
TRecordMapping = record
|
||||
Layout: TDataRecord.TLayout;
|
||||
@@ -137,7 +139,11 @@ type
|
||||
const Output: TDataRecord.TLayout
|
||||
): TConverter<TArray<TDataRecord>, TDataRecord>; static;
|
||||
|
||||
class function Join<T>(const DataProviders: TArray<TDataProvider<T>>): TDataProvider<TArray<T>>; static;
|
||||
class function JoinRecords(
|
||||
const TargetLayout: TDataRecord.TLayout;
|
||||
const Mapping: TArray<TRecordMapping>;
|
||||
const DataProviders: TArray<TDataProvider<TDataRecord>>
|
||||
): TConverter<TArray<TDataRecord>, TDataRecord>; static;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@@ -357,18 +363,11 @@ begin
|
||||
Result :=
|
||||
TConverter<TArray<TDataRecord>, TDataRecord>.CreateGeneric(
|
||||
function(const Inputs: TArray<TDataRecord>): TDataRecord
|
||||
var
|
||||
tmp: array[0..63] of Byte;
|
||||
begin
|
||||
Result := TDataRecord.CreateFrom(Output);
|
||||
Result := TDataRecord.Create(Output);
|
||||
for var i := 0 to High(Idxs) do
|
||||
begin
|
||||
for var j := 0 to High(Idxs[i]) do
|
||||
begin
|
||||
Inputs[i].GetValue(Idxs[i][j].FromIdx, tmp);
|
||||
Result.SetValue(Idxs[i][j].ToIdx, tmp);
|
||||
end;
|
||||
end;
|
||||
Inputs[i].CopyField(Idxs[i][j].FromIdx, Result, Idxs[i][j].ToIdx);
|
||||
end
|
||||
);
|
||||
end;
|
||||
@@ -386,7 +385,7 @@ begin
|
||||
TConverter<T, TDataRecord>.CreateGeneric(
|
||||
function(const Value: T): TDataRecord
|
||||
begin
|
||||
Result := TDataRecord.CreateFrom(Layout);
|
||||
Result := TDataRecord.Create(Layout);
|
||||
Result.SetValue(idx, Value);
|
||||
end
|
||||
);
|
||||
@@ -397,6 +396,19 @@ begin
|
||||
Result := TMycDataJoin<T>.Create(DataProviders);
|
||||
end;
|
||||
|
||||
class function TConverter.JoinRecords(
|
||||
const TargetLayout: TDataRecord.TLayout;
|
||||
const Mapping: TArray<TRecordMapping>;
|
||||
const DataProviders: TArray<TDataProvider<TDataRecord>>
|
||||
): TConverter<TArray<TDataRecord>, TDataRecord>;
|
||||
begin
|
||||
var RecProvider := Join<TDataRecord>(DataProviders);
|
||||
|
||||
Result := DataMapping(Mapping, TargetLayout);
|
||||
|
||||
RecProvider.Link(Result);
|
||||
end;
|
||||
|
||||
class function TConverter.Parallel<T>(Parent: TDataProvider<T>): TConverter<T, T>;
|
||||
begin
|
||||
Result := TMycParallelConverter<T>.Create;
|
||||
|
||||
Reference in New Issue
Block a user