| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- <?php
- namespace React\EventLoop\Tick;
- use SplQueue;
- /**
- * A tick queue implementation that can hold multiple callback functions
- *
- * This class should only be used internally, see LoopInterface instead.
- *
- * @see LoopInterface
- * @internal
- */
- final class FutureTickQueue
- {
- private $queue;
- public function __construct()
- {
- $this->queue = new SplQueue();
- }
- /**
- * Add a callback to be invoked on a future tick of the event loop.
- *
- * Callbacks are guaranteed to be executed in the order they are enqueued.
- *
- * @param callable $listener The callback to invoke.
- */
- public function add($listener)
- {
- $this->queue->enqueue($listener);
- }
- /**
- * Flush the callback queue.
- */
- public function tick()
- {
- // Only invoke as many callbacks as were on the queue when tick() was called.
- $count = $this->queue->count();
- while ($count--) {
- \call_user_func(
- $this->queue->dequeue()
- );
- }
- }
- /**
- * Check if the next tick queue is empty.
- *
- * @return boolean
- */
- public function isEmpty()
- {
- return $this->queue->isEmpty();
- }
- }
|