[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Sc-devel] RFC: Pbind redesign?
Hi Ron,
thinking a bit while implementing a simplification to cleanup
(attached) I wondered whether it is such a good idea to move all the
responsibility for cleaning up to an inner state of a consumer
stream. This seems like calling for trouble later, as most people
would not bother to implement it if they have a stream they want to
end somehow. Also we don't want to create responsibility in places
that don't relate directly to the cleanup.
we seem to have the trade off:
# Problem 1: calling more values from upstream than actually played
# Problem 2: having to check every single event for whether it
contains things to be done. Difficult implementation.
What about this: any stream that needs to be released adds some hook
to itself (or a cleanup event) to every _downstream_ event. Then all
we have to call is some finish function in this event, and remove the
hook. I think this would solve both problems.
// may not be needed:
//////////////////////////////////
EventCleanup {
var functions;
*new {
^super.newCopyArgs(IdentitySet.new) // btw far more efficient!
}
add { arg event;
event[\addToCleanup].do { | f | functions.add(f) };
event[\removeFromCleanup].do { | f | functions.remove(f) };
}
cleanup { arg inevent, outevent;
functions.do { | f | f.value(inevent) };
outevent[\removeFromCleanup] =
functions.union(outevent[\removeFromCleanup]);
^outevent
}
}
--
.