[fpc-devel] Reading empty collection from stream

Flávio Etrusco flavio.etrusco at gmail.com
Fri Sep 8 09:05:24 CEST 2006


Agreed, this is one of the weird Delphi misfeatures...

In later SynEdit versions I implemented custom streameing functions
which only store the "diff" from default keystrokes (i.e. the removed
and added keystrokes compared to the default list).

-Flávio

On 9/7/06, Marc Weustink <marc.weustink at cuperus.nl> wrote:
> Vincent Snijders wrote:
> > Hi,
> >
> > I am investigating Lazarus issue 7305. The TSynEdit class has a
> > KeyStrokes property of the type TSynEditKeyStrokes, which is a
> > TCollection descendant. The TSynEdit constructor fills the collection
> > with some default items. If I remove the items and stream the TSynEdit,
> > the following line is shown in the lfm:
> >     Keystrokes = <>
> >
> > If I read this lfm, I don't get a empty KeyStrokes collection, but one
> > filled with the default value.
> >
> > I suspect the following lines in TReader.ReadCollection cause this
> > behaviour:
> >     if not EndOfList then
> >       Collection.Clear;
> >
> > Is this a bug or by design? How do I load an empty collection from a
> > stream, if the collection has a default value?
>
> Delphi has the same construction, which is IMO a design flaw.
> IMO when a collection is "default" is shouldn't be streamed, so there
> would be nothing written.
> I don't know why it is there, since when a "default" collection is
> written, all elements are written. So it never will be <>.
>
> > Note, if I remove the 'Keystrokes = <>' line from the lfm, I will get
> > the default collection too, so I wonder why there are two ways to get
> > the default collection.
>
> I propose to remove the "if not EndOfList then Collection.Clear;" line.
>
>
>
> Marc
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel
>



More information about the fpc-devel mailing list