first commit
This commit is contained in:
189
wp-includes/sodium_compat/src/PHP52/SplFixedArray.php
Normal file
189
wp-includes/sodium_compat/src/PHP52/SplFixedArray.php
Normal file
@ -0,0 +1,189 @@
|
||||
<?php
|
||||
|
||||
if (class_exists('SplFixedArray')) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* The SplFixedArray class provides the main functionalities of array. The
|
||||
* main differences between a SplFixedArray and a normal PHP array is that
|
||||
* the SplFixedArray is of fixed length and allows only integers within
|
||||
* the range as indexes. The advantage is that it allows a faster array
|
||||
* implementation.
|
||||
*/
|
||||
class SplFixedArray implements Iterator, ArrayAccess, Countable
|
||||
{
|
||||
/** @var array<int, mixed> */
|
||||
private $internalArray = array();
|
||||
|
||||
/** @var int $size */
|
||||
private $size = 0;
|
||||
|
||||
/**
|
||||
* SplFixedArray constructor.
|
||||
* @param int $size
|
||||
*/
|
||||
public function __construct($size = 0)
|
||||
{
|
||||
$this->size = $size;
|
||||
$this->internalArray = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function count()
|
||||
{
|
||||
return count($this->internalArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function toArray()
|
||||
{
|
||||
ksort($this->internalArray);
|
||||
return (array) $this->internalArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $array
|
||||
* @param bool $save_indexes
|
||||
* @return SplFixedArray
|
||||
* @psalm-suppress MixedAssignment
|
||||
*/
|
||||
public static function fromArray(array $array, $save_indexes = true)
|
||||
{
|
||||
$self = new SplFixedArray(count($array));
|
||||
if($save_indexes) {
|
||||
foreach($array as $key => $value) {
|
||||
$self[(int) $key] = $value;
|
||||
}
|
||||
} else {
|
||||
$i = 0;
|
||||
foreach (array_values($array) as $value) {
|
||||
$self[$i] = $value;
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
return $self;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getSize()
|
||||
{
|
||||
return $this->size;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $size
|
||||
* @return bool
|
||||
*/
|
||||
public function setSize($size)
|
||||
{
|
||||
$this->size = $size;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|int $index
|
||||
* @return bool
|
||||
*/
|
||||
public function offsetExists($index)
|
||||
{
|
||||
return array_key_exists((int) $index, $this->internalArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|int $index
|
||||
* @return mixed
|
||||
*/
|
||||
public function offsetGet($index)
|
||||
{
|
||||
/** @psalm-suppress MixedReturnStatement */
|
||||
return $this->internalArray[(int) $index];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|int $index
|
||||
* @param mixed $newval
|
||||
* @psalm-suppress MixedAssignment
|
||||
*/
|
||||
public function offsetSet($index, $newval)
|
||||
{
|
||||
$this->internalArray[(int) $index] = $newval;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|int $index
|
||||
*/
|
||||
public function offsetUnset($index)
|
||||
{
|
||||
unset($this->internalArray[(int) $index]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rewind iterator back to the start
|
||||
* @link https://php.net/manual/en/splfixedarray.rewind.php
|
||||
* @return void
|
||||
* @since 5.3.0
|
||||
*/
|
||||
public function rewind()
|
||||
{
|
||||
reset($this->internalArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return current array entry
|
||||
* @link https://php.net/manual/en/splfixedarray.current.php
|
||||
* @return mixed The current element value.
|
||||
* @since 5.3.0
|
||||
*/
|
||||
public function current()
|
||||
{
|
||||
/** @psalm-suppress MixedReturnStatement */
|
||||
return current($this->internalArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return current array index
|
||||
* @return int The current array index.
|
||||
*/
|
||||
public function key()
|
||||
{
|
||||
return key($this->internalArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function next()
|
||||
{
|
||||
next($this->internalArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the array contains more elements
|
||||
* @link https://php.net/manual/en/splfixedarray.valid.php
|
||||
* @return bool true if the array contains any more elements, false otherwise.
|
||||
*/
|
||||
public function valid()
|
||||
{
|
||||
if (empty($this->internalArray)) {
|
||||
return false;
|
||||
}
|
||||
$result = next($this->internalArray) !== false;
|
||||
prev($this->internalArray);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Do nothing.
|
||||
*/
|
||||
public function __wakeup()
|
||||
{
|
||||
// NOP
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user