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

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