mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-18 14:50:24 +02:00
* Applied and expanded patch from Luiz Americo to implement faster notifyobservers (bug ID 23419)
git-svn-id: trunk@23089 -
This commit is contained in:
parent
e3b48d6eb2
commit
66553a253e
@ -667,7 +667,7 @@ begin
|
||||
Raise EObserver.CreateFmt(SErrNotObserver,[AObserver.ClassName]);
|
||||
If not Assigned(FObservers) then
|
||||
FObservers:=TFPList.Create;
|
||||
FObservers.Add(AObserver);
|
||||
FObservers.Add(I);
|
||||
end;
|
||||
|
||||
procedure TList.FPODetachObserver(AObserver: TObject);
|
||||
@ -679,7 +679,7 @@ begin
|
||||
Raise EObserver.CreateFmt(SErrNotObserver,[AObserver.ClassName]);
|
||||
If Assigned(FObservers) then
|
||||
begin
|
||||
FObservers.Remove(AObserver);
|
||||
FObservers.Remove(I);
|
||||
If (FObservers.Count=0) then
|
||||
FreeAndNil(FObservers);
|
||||
end;
|
||||
@ -689,7 +689,6 @@ procedure TList.FPONotifyObservers(ASender: TObject;
|
||||
AOperation: TFPObservedOperation; Data : Pointer);
|
||||
|
||||
Var
|
||||
O : TObject;
|
||||
I : Integer;
|
||||
Obs : IFPObserver;
|
||||
|
||||
@ -697,9 +696,8 @@ begin
|
||||
If Assigned(FObservers) then
|
||||
For I:=FObservers.Count-1 downto 0 do
|
||||
begin
|
||||
O:=TObject(FObservers[i]);
|
||||
If O.GetInterface(SGUIDObserver,Obs) then
|
||||
Obs.FPOObservedChanged(Self,AOperation,Data);
|
||||
Obs:=IFPObserver(FObservers[i]);
|
||||
Obs.FPOObservedChanged(ASender,AOperation,Data);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -68,7 +68,7 @@ begin
|
||||
Raise EObserver.CreateFmt(SErrNotObserver,[AObserver.ClassName]);
|
||||
If not Assigned(FObservers) then
|
||||
FObservers:=TFPList.Create;
|
||||
FObservers.Add(AObserver);
|
||||
FObservers.Add(I);
|
||||
end;
|
||||
|
||||
procedure TPersistent.FPODetachObserver(AObserver: TObject);
|
||||
@ -80,7 +80,7 @@ begin
|
||||
Raise EObserver.CreateFmt(SErrNotObserver,[AObserver.ClassName]);
|
||||
If Assigned(FObservers) then
|
||||
begin
|
||||
FObservers.Remove(AObserver);
|
||||
FObservers.Remove(I);
|
||||
If (FObservers.Count=0) then
|
||||
FreeAndNil(FObservers);
|
||||
end;
|
||||
@ -89,7 +89,6 @@ end;
|
||||
procedure TPersistent.FPONotifyObservers(ASender: TObject;
|
||||
AOperation: TFPObservedOperation; Data : Pointer);
|
||||
Var
|
||||
O : TObject;
|
||||
I : Integer;
|
||||
Obs : IFPObserver;
|
||||
|
||||
@ -97,9 +96,8 @@ begin
|
||||
If Assigned(FObservers) then
|
||||
For I:=FObservers.Count-1 downto 0 do
|
||||
begin
|
||||
O:=TObject(FObservers[i]);
|
||||
If O.GetInterface(SGUIDObserver,Obs) then
|
||||
Obs.FPOObservedChanged(ASender,AOperation,Data);
|
||||
Obs:=IFPObserver(FObservers[i]);
|
||||
Obs.FPOObservedChanged(Self,AOperation,Data);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user