summaryrefslogtreecommitdiff
path: root/server/vendor/guzzlehttp/promises/src/TaskQueue.php
diff options
context:
space:
mode:
authorLoic GUEGAN <loic@Manzerbredes>2016-01-23 14:37:24 +0100
committerLoic GUEGAN <loic@Manzerbredes>2016-01-23 14:37:24 +0100
commit189f7a9ef4c6265dbac232e5c5685aebbbfc7c53 (patch)
treed397facc1e45cee4713ea95b0eaa4ffa9cbf0921 /server/vendor/guzzlehttp/promises/src/TaskQueue.php
parent2984adf171c49940e683fa997e8cdc60fcf1d60b (diff)
parenta44cc1d2e3c0f147e91a5c052ac7fd879e34e706 (diff)
Merge branch 'develop' of github.com:manzerbredes/istic-openstack into develop
Diffstat (limited to 'server/vendor/guzzlehttp/promises/src/TaskQueue.php')
-rw-r--r--server/vendor/guzzlehttp/promises/src/TaskQueue.php79
1 files changed, 79 insertions, 0 deletions
diff --git a/server/vendor/guzzlehttp/promises/src/TaskQueue.php b/server/vendor/guzzlehttp/promises/src/TaskQueue.php
new file mode 100644
index 0000000..5026363
--- /dev/null
+++ b/server/vendor/guzzlehttp/promises/src/TaskQueue.php
@@ -0,0 +1,79 @@
+<?php
+namespace GuzzleHttp\Promise;
+
+/**
+ * A task queue that executes tasks in a FIFO order.
+ *
+ * This task queue class is used to settle promises asynchronously and
+ * maintains a constant stack size. You can use the task queue asynchronously
+ * by calling the `run()` function of the global task queue in an event loop.
+ *
+ * GuzzleHttp\Promise\queue()->run();
+ */
+class TaskQueue
+{
+ private $enableShutdown = true;
+ private $queue = [];
+
+ public function __construct($withShutdown = true)
+ {
+ if ($withShutdown) {
+ register_shutdown_function(function () {
+ if ($this->enableShutdown) {
+ // Only run the tasks if an E_ERROR didn't occur.
+ $err = error_get_last();
+ if (!$err || ($err['type'] ^ E_ERROR)) {
+ $this->run();
+ }
+ }
+ });
+ }
+ }
+
+ /**
+ * Returns true if the queue is empty.
+ *
+ * @return bool
+ */
+ public function isEmpty()
+ {
+ return !$this->queue;
+ }
+
+ /**
+ * Adds a task to the queue that will be executed the next time run is
+ * called.
+ *
+ * @param callable $task
+ */
+ public function add(callable $task)
+ {
+ $this->queue[] = $task;
+ }
+
+ /**
+ * Execute all of the pending task in the queue.
+ */
+ public function run()
+ {
+ while ($task = array_shift($this->queue)) {
+ $task();
+ }
+ }
+
+ /**
+ * The task queue will be run and exhausted by default when the process
+ * exits IFF the exit is not the result of a PHP E_ERROR error.
+ *
+ * You can disable running the automatic shutdown of the queue by calling
+ * this function. If you disable the task queue shutdown process, then you
+ * MUST either run the task queue (as a result of running your event loop
+ * or manually using the run() method) or wait on each outstanding promise.
+ *
+ * Note: This shutdown will occur before any destructors are triggered.
+ */
+ public function disableShutdown()
+ {
+ $this->enableShutdown = false;
+ }
+}