annotate vendor/zendframework/zend-stdlib/src/SplPriorityQueue.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2 /**
Chris@0 3 * Zend Framework (http://framework.zend.com/)
Chris@0 4 *
Chris@0 5 * @link http://github.com/zendframework/zf2 for the canonical source repository
Chris@0 6 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
Chris@0 7 * @license http://framework.zend.com/license/new-bsd New BSD License
Chris@0 8 */
Chris@0 9
Chris@0 10 namespace Zend\Stdlib;
Chris@0 11
Chris@0 12 use Serializable;
Chris@0 13
Chris@0 14 /**
Chris@0 15 * Serializable version of SplPriorityQueue
Chris@0 16 *
Chris@0 17 * Also, provides predictable heap order for datums added with the same priority
Chris@0 18 * (i.e., they will be emitted in the same order they are enqueued).
Chris@0 19 */
Chris@0 20 class SplPriorityQueue extends \SplPriorityQueue implements Serializable
Chris@0 21 {
Chris@0 22 /**
Chris@0 23 * @var int Seed used to ensure queue order for items of the same priority
Chris@0 24 */
Chris@0 25 protected $serial = PHP_INT_MAX;
Chris@0 26
Chris@0 27 /**
Chris@0 28 * Insert a value with a given priority
Chris@0 29 *
Chris@0 30 * Utilizes {@var $serial} to ensure that values of equal priority are
Chris@0 31 * emitted in the same order in which they are inserted.
Chris@0 32 *
Chris@0 33 * @param mixed $datum
Chris@0 34 * @param mixed $priority
Chris@0 35 * @return void
Chris@0 36 */
Chris@0 37 public function insert($datum, $priority)
Chris@0 38 {
Chris@12 39 if (! is_array($priority)) {
Chris@0 40 $priority = [$priority, $this->serial--];
Chris@0 41 }
Chris@0 42 parent::insert($datum, $priority);
Chris@0 43 }
Chris@0 44
Chris@0 45 /**
Chris@0 46 * Serialize to an array
Chris@0 47 *
Chris@0 48 * Array will be priority => data pairs
Chris@0 49 *
Chris@0 50 * @return array
Chris@0 51 */
Chris@0 52 public function toArray()
Chris@0 53 {
Chris@0 54 $array = [];
Chris@0 55 foreach (clone $this as $item) {
Chris@0 56 $array[] = $item;
Chris@0 57 }
Chris@0 58 return $array;
Chris@0 59 }
Chris@0 60
Chris@0 61 /**
Chris@0 62 * Serialize
Chris@0 63 *
Chris@0 64 * @return string
Chris@0 65 */
Chris@0 66 public function serialize()
Chris@0 67 {
Chris@0 68 $clone = clone $this;
Chris@0 69 $clone->setExtractFlags(self::EXTR_BOTH);
Chris@0 70
Chris@0 71 $data = [];
Chris@0 72 foreach ($clone as $item) {
Chris@0 73 $data[] = $item;
Chris@0 74 }
Chris@0 75
Chris@0 76 return serialize($data);
Chris@0 77 }
Chris@0 78
Chris@0 79 /**
Chris@0 80 * Deserialize
Chris@0 81 *
Chris@0 82 * @param string $data
Chris@0 83 * @return void
Chris@0 84 */
Chris@0 85 public function unserialize($data)
Chris@0 86 {
Chris@17 87 $this->serial = PHP_INT_MAX;
Chris@0 88 foreach (unserialize($data) as $item) {
Chris@17 89 $this->serial--;
Chris@0 90 $this->insert($item['data'], $item['priority']);
Chris@0 91 }
Chris@0 92 }
Chris@0 93 }