From fc9401f04a3aca5abb22f87ebc210de8afe11d32 Mon Sep 17 00:00:00 2001 From: marvin-borner@live.com Date: Tue, 10 Apr 2018 21:50:16 +0200 Subject: Initial Commit --- .../vendor/react/event-loop/src/Timer/Timer.php | 55 +++++++++++ .../vendor/react/event-loop/src/Timer/Timers.php | 109 +++++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 assets/php/vendor/react/event-loop/src/Timer/Timer.php create mode 100644 assets/php/vendor/react/event-loop/src/Timer/Timers.php (limited to 'assets/php/vendor/react/event-loop/src/Timer') diff --git a/assets/php/vendor/react/event-loop/src/Timer/Timer.php b/assets/php/vendor/react/event-loop/src/Timer/Timer.php new file mode 100644 index 0000000..da3602a --- /dev/null +++ b/assets/php/vendor/react/event-loop/src/Timer/Timer.php @@ -0,0 +1,55 @@ +interval = (float) $interval; + $this->callback = $callback; + $this->periodic = (bool) $periodic; + } + + public function getInterval() + { + return $this->interval; + } + + public function getCallback() + { + return $this->callback; + } + + public function isPeriodic() + { + return $this->periodic; + } +} diff --git a/assets/php/vendor/react/event-loop/src/Timer/Timers.php b/assets/php/vendor/react/event-loop/src/Timer/Timers.php new file mode 100644 index 0000000..17bbdac --- /dev/null +++ b/assets/php/vendor/react/event-loop/src/Timer/Timers.php @@ -0,0 +1,109 @@ +timers = new SplObjectStorage(); + $this->scheduler = new SplPriorityQueue(); + } + + public function updateTime() + { + return $this->time = microtime(true); + } + + public function getTime() + { + return $this->time ?: $this->updateTime(); + } + + public function add(TimerInterface $timer) + { + $interval = $timer->getInterval(); + $scheduledAt = $interval + microtime(true); + + $this->timers->attach($timer, $scheduledAt); + $this->scheduler->insert($timer, -$scheduledAt); + } + + public function contains(TimerInterface $timer) + { + return $this->timers->contains($timer); + } + + public function cancel(TimerInterface $timer) + { + $this->timers->detach($timer); + } + + public function getFirst() + { + while ($this->scheduler->count()) { + $timer = $this->scheduler->top(); + + if ($this->timers->contains($timer)) { + return $this->timers[$timer]; + } + + $this->scheduler->extract(); + } + + return null; + } + + public function isEmpty() + { + return count($this->timers) === 0; + } + + public function tick() + { + $time = $this->updateTime(); + $timers = $this->timers; + $scheduler = $this->scheduler; + + while (!$scheduler->isEmpty()) { + $timer = $scheduler->top(); + + if (!isset($timers[$timer])) { + $scheduler->extract(); + $timers->detach($timer); + + continue; + } + + if ($timers[$timer] >= $time) { + break; + } + + $scheduler->extract(); + call_user_func($timer->getCallback(), $timer); + + if ($timer->isPeriodic() && isset($timers[$timer])) { + $timers[$timer] = $scheduledAt = $timer->getInterval() + $time; + $scheduler->insert($timer, -$scheduledAt); + } else { + $timers->detach($timer); + } + } + } +} -- cgit v1.2.3