Mercurial > hg > isophonics-drupal-site
diff vendor/zendframework/zend-stdlib/src/SplPriorityQueue.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 7a779792577d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/zendframework/zend-stdlib/src/SplPriorityQueue.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,91 @@ +<?php +/** + * Zend Framework (http://framework.zend.com/) + * + * @link http://github.com/zendframework/zf2 for the canonical source repository + * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + */ + +namespace Zend\Stdlib; + +use Serializable; + +/** + * Serializable version of SplPriorityQueue + * + * Also, provides predictable heap order for datums added with the same priority + * (i.e., they will be emitted in the same order they are enqueued). + */ +class SplPriorityQueue extends \SplPriorityQueue implements Serializable +{ + /** + * @var int Seed used to ensure queue order for items of the same priority + */ + protected $serial = PHP_INT_MAX; + + /** + * Insert a value with a given priority + * + * Utilizes {@var $serial} to ensure that values of equal priority are + * emitted in the same order in which they are inserted. + * + * @param mixed $datum + * @param mixed $priority + * @return void + */ + public function insert($datum, $priority) + { + if (!is_array($priority)) { + $priority = [$priority, $this->serial--]; + } + parent::insert($datum, $priority); + } + + /** + * Serialize to an array + * + * Array will be priority => data pairs + * + * @return array + */ + public function toArray() + { + $array = []; + foreach (clone $this as $item) { + $array[] = $item; + } + return $array; + } + + /** + * Serialize + * + * @return string + */ + public function serialize() + { + $clone = clone $this; + $clone->setExtractFlags(self::EXTR_BOTH); + + $data = []; + foreach ($clone as $item) { + $data[] = $item; + } + + return serialize($data); + } + + /** + * Deserialize + * + * @param string $data + * @return void + */ + public function unserialize($data) + { + foreach (unserialize($data) as $item) { + $this->insert($item['data'], $item['priority']); + } + } +}