Mattias Gärtner wrote 35 lines
Zitat von Michael Van Canneyt :
>
>
> On Fri, 28 Mar 2008, Micha Nelissen wrote:
>
> > Michael Van Canneyt wrote:
> > > It is used in streaming in the classes unit; the streaming mechanism
> checks
> > > the actual
> > > value against this value: if it is the same, the value is not streamed.
> >
> > FYI: so before streaming, the "streamer" has to reset the values to their
> > defaults to stream properly. Unfortenately, there is no function to do
> this,
> > and it's usually done in constructor. Therefore streaming twice does not
> work
> > properly.
>
> This is not correct.
>
> The default value is the value at create time and remains fixed during the
> lifetime of the component. It has no influence on the number of times you
> stream a component.
Theoretically yes.
Practically it works this way:
TWriter writes a value if it differs from the 'default'. The 'default' is
1. if there is a stored function, and it returns false, then the current value
is a default.
2. if there is an ancestor, then the current value of the ancestor
3. the 'default' constant of the property.
So, it is not always possible to find out if _a_ value is default.
You can only find out if the _current_ value is default.
Yes, but now you are juggling with terms, and mixing concepts:
- The "default" keyword means the value when the class was created. Nothing more, nothing less.
As such the current implementation does what it needs to do.
- Stored is a mechanism, separate from default, to determine whether a property should be stored at all, regardless of the value, be it default or not.
- The ancestor never acts as 'default'. Visual inheritance is a diff mechanism, nothing else: only the differences between ancestor and child should be streamed.
The streaming mechanism uses these 3 concepts to minimalize the size of the stream that it creates. It couldn't care less about resetting the component or whatever.
If a 'reset to defaults' mechanism is required, then a different set of concepts must be developed and used.
Michael.