summaryrefslogtreecommitdiff
path: root/modules/system/system.queue.inc
diff options
context:
space:
mode:
Diffstat (limited to 'modules/system/system.queue.inc')
-rw-r--r--modules/system/system.queue.inc73
1 files changed, 73 insertions, 0 deletions
diff --git a/modules/system/system.queue.inc b/modules/system/system.queue.inc
index 5174a0a65..bac1ff26e 100644
--- a/modules/system/system.queue.inc
+++ b/modules/system/system.queue.inc
@@ -254,5 +254,78 @@ class SystemQueue implements DrupalQueueInterface {
}
/**
+ * 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.
+ */
+class MemoryQueue implements DrupalQueueInterface {
+ /**
+ * The queue data.
+ *
+ * @var array
+ */
+ protected $queue;
+
+ /**
+ * Counter for item ids.
+ *
+ * @var int
+ */
+ protected $id_sequence;
+
+ public function __construct($name) {
+ $this->queue = array();
+ $this->id_sequence = 0;
+ }
+
+ public function createItem($data) {
+ $item = new stdClass();
+ $item->item_id = $this->id_sequence++;
+ $item->data = $data;
+ $item->created = time();
+ $item->expire = 0;
+ $this->queue[$item->item_id] = $item;
+ }
+
+ public function numberOfItems() {
+ return count($this->queue);
+ }
+
+ 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;
+ }
+
+ public function deleteItem($item) {
+ unset($this->queue[$item->item_id]);
+ }
+
+ 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;
+ }
+
+ public function createQueue() {
+ // Nothing needed here.
+ }
+
+ public function deleteQueue() {
+ $this->queue = array();
+ $this->id_sequence = 0;
+ }
+}
+
+/**
* @} End of "defgroup queue".
*/