123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- <?php
- /**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2014 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 = array($priority, $this->serial--);
- }
- parent::insert($datum, $priority);
- }
- /**
- * Serialize to an array
- *
- * Array will be priority => data pairs
- *
- * @return array
- */
- public function toArray()
- {
- $array = 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 = array();
- 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']);
- }
- }
- }
|