You are here

SplPriorityQueue.php in Zircon Profile 8

Same filename and directory in other branches
  1. 8.0 vendor/zendframework/zend-stdlib/src/SplPriorityQueue.php

Namespace

Zend\Stdlib

File

vendor/zendframework/zend-stdlib/src/SplPriorityQueue.php
View source
<?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']);
    }
  }

}

Classes

Namesort descending Description
SplPriorityQueue Serializable version of SplPriorityQueue