Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-devel / 2005-05

Duplicate code in TDatasource.DistributeEvent implementation

5 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Luiz Américo

take a implementation (datasource.inc):

With FDatalinks do
     begin
     For I:=0 to Count-1 do
       With TDatalink(Items[i]) do
         If Not VisualControl Then
           DataEvent(Event,Info);
     For I:=0 to Count-1 do
       With TDatalink(Items[i]) do
         If VisualControl Then
           DataEvent(Event,Info);
     end;

Am I missimg something or the check to VisualControl doesnt make sense? As far as i can see the code below has the same effect

With FDatalinks do
     begin
     For I:=0 to Count-1 do
       With TDatalink(Items[i]) do
         DataEvent(Event,Info);
     end;

Luiz

Reply by email

Luiz Américo

take a implementation (datasource.inc):

With FDatalinks do
     begin
     For I:=0 to Count-1 do
       With TDatalink(Items[i]) do
         If Not VisualControl Then
           DataEvent(Event,Info);
     For I:=0 to Count-1 do
       With TDatalink(Items[i]) do
         If VisualControl Then
           DataEvent(Event,Info);
     end;

Am I missimg something or the check to VisualControl doesnt make sense? As far as i can see the code below has the same effect

With FDatalinks do
     begin
     For I:=0 to Count-1 do
       With TDatalink(Items[i]) do
         DataEvent(Event,Info);
     end;

Luiz

Reply by email

Michael Van Canneyt
to Luiz Américo
Luiz Américo wrote 23 lines
take a implementation (datasource.inc): With FDatalinks do begin For I:=0 to Count-1 do With TDatalink(Items[i]) do If Not VisualControl Then DataEvent(Event,Info); For I:=0 to Count-1 do With TDatalink(Items[i]) do If VisualControl Then DataEvent(Event,Info); end; Am I missimg something or the check to VisualControl doesnt make sense? As far as i can see the code below has the same effect With FDatalinks do begin For I:=0 to Count-1 do With TDatalink(Items[i]) do DataEvent(Event,Info); end;

No. First non visual components (such as detail datasets, lookup datasets) must get their event, and only then visual controls get an event.

The double loop is intentional.

Michael.

Reply by email

Luiz Américo
to Michael Van Canneyt
Michael Van Canneyt wrote 9 lines
On Sat, 7 May 2005, Luiz Américo wrote: No. First non visual components (such as detail datasets, lookup datasets) must get their event, and only then visual controls get an event. The double loop is intentional.

Thank you.
Now I can see the intention.

It seens that this procedure is called quite often. One approach to optimize could be inserting the items in FDataLinks in the appropriate order (Non visual first, visual in the end) and doing a simple loop without checks in DistributeEvent.
This would be done inside RegisterDataLink with a simple and safe alghoritm.

If you agree with the cited approach i can send the patch.

Luiz

Reply by email

Jesus Reyes
to Luiz Américo

----- Original Message -----

Earlier message 34 lines
From: "Luiz Américo" To: "FPC developers' list" Sent: Sunday, May 08, 2005 6:45 PM Subject: Re: [fpc-devel] Duplicate code inTDatasource.DistributeEvent implementation > Michael Van Canneyt wrote: > > > > On Sat, 7 May 2005, Luiz Américo wrote: > > > > > > No. First non visual components (such as detail datasets, lookup datasets) > > must get their event, and only then visual controls get an event. > > > > The double loop is intentional. > > > > Thank you. > Now I can see the intention. > > It seens that this procedure is called quite often. > One approach to optimize could be inserting the items in FDataLinks in > the appropriate order (Non visual first, visual in the end) and doing a > simple loop without checks in DistributeEvent. > This would be done inside RegisterDataLink with a simple and safe alghoritm. > > If you agree with the cited approach i can send the patch. > > Luiz > I doubt that you will get any improvement. Probably what target components do inside the event handling is potentially more slower (if speed is in this case the concern) than iterating through the list of datalinks. Jesus Reyes A.

Reply by email