lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Project - Eliminating grob parents and outside-staff-priority


From: Han-Wen Nienhuys
Subject: Re: Project - Eliminating grob parents and outside-staff-priority
Date: Sat, 29 Sep 2012 10:59:53 +0200

On Wed, Sep 26, 2012 at 10:40 PM, David Kastrup <address@hidden> wrote:
> Han-Wen Nienhuys <address@hidden> writes:
>
>> In order to do cache invalidation, you will have to construct the
>> reverse graph. If A.x depends on B.y, now A points to B. For proper
>> cache invalidation, if B.y changes, then A.x becomes invalid. This
>> means that A has to store a back-reference to B. Hence all pointers
>> have to be stored both ways (including inverting 1-N relations into
>> N-1 relations), and the both-way links have to be rewritten correctly
>> during line breaking.
>
> You can assign a generational count to properties.  If the generational
> count of any dependency is higher than that of the dependent property,
> it needs to get regenerated.  As long as the dependencies don't get lost
> (and we use arbitrary size integers, resetting for each session), this
> should be pretty straightforward and not require backwards links.  It
> "just" requires double-checking your dependencies for change.

But since the dependencies are also properties that could be
invalidated, you'd have to recurse , so each property access would
potentially expand into an almost infinite number of get_property
calls.

I think it is a much clearer abstraction to decide that each property
can only be evaluated once, and that everything should be driven by
callbacks. In fact, one thing I would suggest looking at is removing
{before,after}_line_breaking which breaks this model somewhat.

-- 
Han-Wen Nienhuys - address@hidden - http://www.xs4all.nl/~hanwen



reply via email to

[Prev in Thread] Current Thread [Next in Thread]