Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/updater.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/amphp/amp/lib/Loop/Internal/TimerQueue.php')
-rw-r--r--vendor/amphp/amp/lib/Loop/Internal/TimerQueue.php169
1 files changed, 0 insertions, 169 deletions
diff --git a/vendor/amphp/amp/lib/Loop/Internal/TimerQueue.php b/vendor/amphp/amp/lib/Loop/Internal/TimerQueue.php
deleted file mode 100644
index f2be704..0000000
--- a/vendor/amphp/amp/lib/Loop/Internal/TimerQueue.php
+++ /dev/null
@@ -1,169 +0,0 @@
-<?php
-
-namespace Amp\Loop\Internal;
-
-use Amp\Loop\Watcher;
-
-/**
- * Uses a binary tree stored in an array to implement a heap.
- */
-final class TimerQueue
-{
- /** @var Watcher[] */
- private $data = [];
-
- /** @var int[] */
- private $pointers = [];
-
- /**
- * @param int $node Rebuild the data array from the given node upward.
- *
- * @return void
- */
- private function heapifyUp(int $node)
- {
- $entry = $this->data[$node];
- while ($node !== 0 && $entry->expiration < $this->data[$parent = ($node - 1) >> 1]->expiration) {
- $this->swap($node, $parent);
- $node = $parent;
- }
- }
-
- /**
- * @param int $node Rebuild the data array from the given node downward.
- *
- * @return void
- */
- private function heapifyDown(int $node)
- {
- $length = \count($this->data);
- while (($child = ($node << 1) + 1) < $length) {
- if ($this->data[$child]->expiration < $this->data[$node]->expiration
- && ($child + 1 >= $length || $this->data[$child]->expiration < $this->data[$child + 1]->expiration)
- ) {
- // Left child is less than parent and right child.
- $swap = $child;
- } elseif ($child + 1 < $length && $this->data[$child + 1]->expiration < $this->data[$node]->expiration) {
- // Right child is less than parent and left child.
- $swap = $child + 1;
- } else { // Left and right child are greater than parent.
- break;
- }
-
- $this->swap($node, $swap);
- $node = $swap;
- }
- }
-
- private function swap(int $left, int $right)
- {
- $temp = $this->data[$left];
-
- $this->data[$left] = $this->data[$right];
- $this->pointers[$this->data[$right]->id] = $left;
-
- $this->data[$right] = $temp;
- $this->pointers[$temp->id] = $right;
- }
-
- /**
- * Inserts the watcher into the queue. Time complexity: O(log(n)).
- *
- * @param Watcher $watcher
- *
- * @psalm-param Watcher<int> $watcher
- *
- * @return void
- */
- public function insert(Watcher $watcher)
- {
- \assert($watcher->expiration !== null);
- \assert(!isset($this->pointers[$watcher->id]));
-
- $node = \count($this->data);
- $this->data[$node] = $watcher;
- $this->pointers[$watcher->id] = $node;
-
- $this->heapifyUp($node);
- }
-
- /**
- * Removes the given watcher from the queue. Time complexity: O(log(n)).
- *
- * @param Watcher $watcher
- *
- * @psalm-param Watcher<int> $watcher
- *
- * @return void
- */
- public function remove(Watcher $watcher)
- {
- $id = $watcher->id;
-
- if (!isset($this->pointers[$id])) {
- return;
- }
-
- $this->removeAndRebuild($this->pointers[$id]);
- }
-
- /**
- * Deletes and returns the Watcher on top of the heap if it has expired, otherwise null is returned.
- * Time complexity: O(log(n)).
- *
- * @param int $now Current loop time.
- *
- * @return Watcher|null Expired watcher at the top of the heap or null if the watcher has not expired.
- *
- * @psalm-return Watcher<int>|null
- */
- public function extract(int $now)
- {
- if (empty($this->data)) {
- return null;
- }
-
- $watcher = $this->data[0];
-
- if ($watcher->expiration > $now) {
- return null;
- }
-
- $this->removeAndRebuild(0);
-
- return $watcher;
- }
-
- /**
- * Returns the expiration time value at the top of the heap. Time complexity: O(1).
- *
- * @return int|null Expiration time of the watcher at the top of the heap or null if the heap is empty.
- */
- public function peek()
- {
- return isset($this->data[0]) ? $this->data[0]->expiration : null;
- }
-
- /**
- * @param int $node Remove the given node and then rebuild the data array.
- *
- * @return void
- */
- private function removeAndRebuild(int $node)
- {
- $length = \count($this->data) - 1;
- $id = $this->data[$node]->id;
- $left = $this->data[$node] = $this->data[$length];
- $this->pointers[$left->id] = $node;
- unset($this->data[$length], $this->pointers[$id]);
-
- if ($node < $length) { // don't need to do anything if we removed the last element
- $parent = ($node - 1) >> 1;
- if ($parent >= 0 && $this->data[$node]->expiration < $this->data[$parent]->expiration) {
- $this->heapifyUp($node);
- } else {
- $this->heapifyDown($node);
- }
- }
- }
-}