Version 1
[yaffs-website] / web / core / lib / Drupal / Core / Queue / Memory.php
diff --git a/web/core/lib/Drupal/Core/Queue/Memory.php b/web/core/lib/Drupal/Core/Queue/Memory.php
new file mode 100644 (file)
index 0000000..2e4ac0f
--- /dev/null
@@ -0,0 +1,107 @@
+<?php
+
+namespace Drupal\Core\Queue;
+
+/**
+ * Static queue implementation.
+ *
+ * This allows "undelayed" variants of processes relying on the Queue
+ * interface. The queue data resides in memory. It should only be used for
+ * items that will be queued and dequeued within a given page request.
+ *
+ * @ingroup queue
+ */
+class Memory implements QueueInterface {
+  /**
+   * The queue data.
+   *
+   * @var array
+   */
+  protected $queue;
+
+  /**
+   * Counter for item ids.
+   *
+   * @var int
+   */
+  protected $idSequence;
+
+  /**
+   * Constructs a Memory object.
+   *
+   * @param string $name
+   *   An arbitrary string. The name of the queue to work with.
+   */
+  public function __construct($name) {
+    $this->queue = [];
+    $this->idSequence = 0;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function createItem($data) {
+    $item = new \stdClass();
+    $item->item_id = $this->idSequence++;
+    $item->data = $data;
+    $item->created = time();
+    $item->expire = 0;
+    $this->queue[$item->item_id] = $item;
+    return $item->item_id;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function numberOfItems() {
+    return count($this->queue);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function claimItem($lease_time = 30) {
+    foreach ($this->queue as $key => $item) {
+      if ($item->expire == 0) {
+        $item->expire = time() + $lease_time;
+        $this->queue[$key] = $item;
+        return $item;
+      }
+    }
+    return FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function deleteItem($item) {
+    unset($this->queue[$item->item_id]);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function releaseItem($item) {
+    if (isset($this->queue[$item->item_id]) && $this->queue[$item->item_id]->expire != 0) {
+      $this->queue[$item->item_id]->expire = 0;
+      return TRUE;
+    }
+    return FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function createQueue() {
+    // Nothing needed here.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function deleteQueue() {
+    $this->queue = [];
+    $this->idSequence = 0;
+  }
+
+}