friendship ended with social-app. php is my new best friend
1<?php
2
3namespace React\EventLoop\Tick;
4
5use SplQueue;
6
7/**
8 * A tick queue implementation that can hold multiple callback functions
9 *
10 * This class should only be used internally, see LoopInterface instead.
11 *
12 * @see LoopInterface
13 * @internal
14 */
15final class FutureTickQueue
16{
17 private $queue;
18
19 public function __construct()
20 {
21 $this->queue = new SplQueue();
22 }
23
24 /**
25 * Add a callback to be invoked on a future tick of the event loop.
26 *
27 * Callbacks are guaranteed to be executed in the order they are enqueued.
28 *
29 * @param callable $listener The callback to invoke.
30 */
31 public function add($listener)
32 {
33 $this->queue->enqueue($listener);
34 }
35
36 /**
37 * Flush the callback queue.
38 */
39 public function tick()
40 {
41 // Only invoke as many callbacks as were on the queue when tick() was called.
42 $count = $this->queue->count();
43
44 while ($count--) {
45 \call_user_func(
46 $this->queue->dequeue()
47 );
48 }
49 }
50
51 /**
52 * Check if the next tick queue is empty.
53 *
54 * @return boolean
55 */
56 public function isEmpty()
57 {
58 return $this->queue->isEmpty();
59 }
60}