This engine handles two sets of queues. The first sets of queues manages 'fine events' (that is, calls to `propagate(int,int)' and considers three different subsets: UNARY, BINARY, TERNARY propagators are stored in the top-priority queue, LINEAR propagators are stored in the mid-priority queue, QUADRATIC, CUBIC, VERY_SLOW propagators are stored in the low priority queue.
Then, managing coarse events (that is, delayed calls to `propagate(int)') is made thanks to 4 additional queues: UNARY, BINARY, TERNARY propagators cannot be delayed! LINEAR propagators are in the top-priority queue, QUADRATIC propagators are in the second-priority queue, CUBIC propagators are in the second-priority queue, VERY_SLOW propagators are in the second-priority queue.
The engine empties the first queue, then propagates one event from the following one, and check the first queue again, etc.
@author Charles Prud'homme
@since 05/07/12