Fixed concurrent processing

This commit is contained in:
Michael Schimmel
2025-07-16 14:12:07 +02:00
parent bc75f08477
commit 342eb07c42
8 changed files with 192 additions and 105 deletions
+3 -35
View File
@@ -15,27 +15,13 @@ uses
Myc.Fmx.Chart;
type
TChartSeriesReceiver<T> = class(TMycProcessor<T>)
strict private
FCurrData: TSeries<T>;
FLookback: TMutable<Int64>;
private
FData: TWriteable<TSeries<T>>;
protected
function ProcessData(const Value: T): TState; override;
public
constructor Create(const ALookback: TMutable<Int64>);
property Data: TWriteable<TSeries<T>> read FData;
end;
TChartSeriesProcessor<T> = class(TMycChart.TSeries)
strict private
FDataSeries: TSeries<T>;
private
FData: TSeries<T>;
FDataProvider: TDataProvider<T>;
FReceiver: TChartSeriesReceiver<T>;
FReceiverTag: TDataProvider<T>.TTag;
FReceiver: TMutable<TSeries<T>>;
protected
function GetCount: Int64; override;
function GetTotalCount: Int64; override;
@@ -140,22 +126,6 @@ uses
System.Math,
FMX.Types;
{ TChartSeriesReceiver<T> }
constructor TChartSeriesReceiver<T>.Create(const ALookback: TMutable<Int64>);
begin
inherited Create;
FLookback := ALookback;
FData := TWriteable<TSeries<T>>.CreateWriteable(FCurrData).Protect;
end;
function TChartSeriesReceiver<T>.ProcessData(const Value: T): TState;
begin
Result := TState.Null;
FCurrData := FCurrData.Add(Value, FLookback.Value);
FData.Value := FCurrData;
end;
{ TChartSeriesProcessor<T> }
constructor TChartSeriesProcessor<T>.Create(const ADataProvider: TDataProvider<T>; const ALookback: TMutable<Int64>);
@@ -164,13 +134,11 @@ begin
FDataProvider := ADataProvider;
FData := FDataSeries;
FReceiver := TChartSeriesReceiver<T>.Create(ALookback);
FReceiverTag := FDataProvider.Link(FReceiver);
FReceiver := TConverter.CreateEndpoint<T>(FDataProvider, ALookback.Value);
end;
destructor TChartSeriesProcessor<T>.Destroy;
begin
FDataProvider.Unlink(FReceiverTag);
inherited;
end;
@@ -186,7 +154,7 @@ end;
procedure TChartSeriesProcessor<T>.Update;
begin
FData := FReceiver.Data.Value;
FData := FReceiver.Value;
end;
{ TChartLineLayer }