QuickNote: Sending Events & Machinery
Depending on the The Machinery (ToDo), the generated code to send an events will alter. However, only a little bit as we will see in this study.
See also
QuickNote: Sending Events (generated code) for the generic part
.../SIEVE/2.GCD-work/CC-event-sieve.Castle-handCompiled.c
(not yet on OSDN)
The generated code depends on The Machinery (ToDo). For sending an event, this however only a minor change. In this quick-note, we study the difference, for just one case: CC_E_Generator__StartSieve_runTo__controll
Castle Code
self.outlet.input(i);
DirectCall (generated C)
{
struct CC_B_OutPort outport = self->outlet;
CC_ComponentType receiver = outport.connection;
CC_B_eDispatchTable handlers = outport.handlers;
CC_E_SimpleSieve_input_FT signal = (CC_E_SimpleSieve_input_FT)handlers[CC_P_SimpleSieve_input];
signal(receiver, (CC_selfType)self, i);
}
LibDispatch (generated C)
{
struct CC_B_OutPort outport = self->outlet;
CC_ComponentType receiver = outport.connection;
CC_B_eDispatchTable handlers = outport.handlers;
CC_E_SimpleSieve_input_FT signal = (CC_E_SimpleSieve_input_FT)handlers[CC_P_SimpleSieve_input];
dispatch_queue_t queue = receiver->queue;
dispatch_async(queue, ^{
signal(receiver, (CC_selfType)self, i);
});
}
Most of the code is the same, but the call the eventhandler: That line ( signal(receiver, (CC_selfType)self, i);
) is the same, but embedded in a dispatch_queue plumbing
Comments
comments powered by Disqus