Skip to content

Commit

Permalink
Drop SplStack polyfill for php < 5.3
Browse files Browse the repository at this point in the history
  • Loading branch information
glensc committed Feb 5, 2021
1 parent 96d03fa commit b7279be
Showing 1 changed file with 4 additions and 333 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,335 +18,6 @@
* @license http://framework.zend.com/license/new-bsd New BSD License
*/

if (version_compare(PHP_VERSION, '5.3.0', '<')) {
class SplStack implements Iterator, ArrayAccess, Countable
{
/**
* Delete items during iteration
*/
const IT_MODE_DELETE = 1;

/**
* Keep items during iteration
*/
const IT_MODE_KEEP = 0;

/**
* Mode used when iterating
* @var int
*/
protected $mode = self::IT_MODE_KEEP;

/**
* Count of elements in the stack
*
* @var int
*/
protected $count = 0;

/**
* Data represented by this stack
*
* @var array
*/
protected $data = array();

/**
* Sorted stack of values
*
* @var false|array
*/
protected $stack = false;

/**
* Set the iterator mode
*
* Must be set to one of IT_MODE_DELETE or IT_MODE_KEEP
*
* @todo Currently, IteratorMode is ignored, as we use the default (keep); should this be implemented?
* @param int $mode
* @return void
* @throws InvalidArgumentException
*/
public function setIteratorMode($mode)
{
$expected = array(
self::IT_MODE_DELETE => true,
self::IT_MODE_KEEP => true,
);

if (!isset($expected[$mode])) {
throw new InvalidArgumentException(sprintf('Invalid iterator mode specified ("%s")', $mode));
}

$this->mode = $mode;
}

/**
* Return last element in the stack
*
* @return mixed
*/
public function bottom()
{
$this->rewind();
$value = array_pop($this->stack);
array_push($this->stack, $value);
return $value;
}

/**
* Countable: return count of items in the stack
*
* @return int
*/
public function count()
{
return $this->count;
}

/**
* Iterator: return current item in the stack
*
* @return mixed
*/
public function current()
{
if (!$this->stack) {
$this->rewind();
}
return current($this->stack);
}

/**
* Get iteration mode
*
* @return int
*/
public function getIteratorMode()
{
return $this->mode;
}

/**
* Is the stack empty?
*
* @return bool
*/
public function isEmpty()
{
return ($this->count === 0);
}

/**
* Iterator: return key of current item in the stack
*
* @return mixed
*/
public function key()
{
if (!$this->stack) {
$this->rewind();
}
return key($this->stack);
}

/**
* Iterator: advance pointer to next item in the stack
*
* @return void
*/
public function next()
{
if (!$this->stack) {
$this->rewind();
}
return next($this->stack);
}

/**
* ArrayAccess: does an item exist at the specified offset?
*
* @param mixed $index
* @return bool
*/
public function offsetExists($index)
{
return array_key_exists($index, $this->data);
}

/**
* ArrayAccess: get the item at the specified offset
*
* @param mixed $index
* @return mixed
* @throws OutOfRangeException
*/
public function offsetGet($index)
{
if (!$this->offsetExists($index)) {
throw OutOfRangeException(sprintf('Invalid index ("%s") specified', $index));
}
return $this->data[$index];
}

/**
* ArrayAccess: add an item at the specified offset
*
* @param mixed $index
* @param mixed $newval
* @return void
*/
public function offsetSet($index, $newval)
{
$this->data[$index] = $newval;
$this->stack = false;
$this->count++;
}

/**
* ArrayAccess: unset the item at the specified offset
*
* @param mixed $index
* @return void
* @throws OutOfRangeException
*/
public function offsetUnset($index)
{
if (!$this->offsetExists($index)) {
throw OutOfRangeException(sprintf('Invalid index ("%s") specified', $index));
}
unset($this->data[$index]);
$this->stack = false;
$this->count--;
}

/**
* Pop a node from the end of the stack
*
* @return mixed
* @throws RuntimeException
*/
public function pop()
{
$val = array_pop($this->data);
$this->stack = false;
$this->count--;
return $val;
}

/**
* Move the iterator to the previous node
*
* @todo Does this need to be implemented?
* @return void
*/
public function prev()
{
}

/**
* Push an element to the list
*
* @param mixed $value
* @return void
*/
public function push($value)
{
array_push($this->data, $value);
$this->count++;
$this->stack = false;
}

/**
* Iterator: rewind to beginning of stack
*
* @return void
*/
public function rewind()
{
if (is_array($this->stack)) {
return reset($this->stack);
}
$this->stack = array_reverse($this->data, true);
}

/**
* Serialize the storage
*
* @return string
*/
public function serialize()
{
return serialize($this->data);
}

/**
* Shifts a node from the beginning of the list
*
* @return mixed
* @throws RuntimeException
*/
public function shift()
{
$val = array_shift($this->data);
$this->stack = false;
$this->count--;
return $val;
}

/**
* Peek at the top node of the stack
*
* @return mixed
*/
public function top()
{
$this->rewind();
$value = array_shift($this->stack);
array_unshift($this->stack, $value);
return $value;
}

/**
* Unserialize the storage
*
* @param string
* @return void
*/
public function unserialize($serialized)
{
$this->data = unserialize($serialized);
$this->stack = false;
}

/**
* Unshift a node onto the beginning of the list
*
* @param mixed $value
* @return void
*/
public function unshift($value)
{
array_unshift($this->data, $value);
$this->count++;
$this->stack = false;
}

/**
* Iterator: is the current pointer valid?
*
* @return bool
*/
public function valid()
{
$key = key($this->stack);
$var = ($key !== null && $key !== false);
return $var;
}
}
}

/**
* Collection of signal handler return values
*
Expand All @@ -355,13 +26,13 @@ public function valid()
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_EventManager_ResponseCollection extends SplStack
class Zend_EventManager_ResponseCollection extends SplStack
{
protected $stopped = false;

/**
* Did the last response provided trigger a short circuit of the stack?
*
*
* @return bool
*/
public function stopped()
Expand All @@ -371,8 +42,8 @@ public function stopped()

/**
* Mark the collection as stopped (or its opposite)
*
* @param bool $flag
*
* @param bool $flag
* @return Zend_EventManager_ResponseCollection
*/
public function setStopped($flag)
Expand Down

0 comments on commit b7279be

Please sign in to comment.