Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.
<?php

namespace PhpOffice\PhpSpreadsheet;

> /** class HashTable > * @template T of IComparable { > */
/** * HashTable elements. *
< * @var IComparable[]
> * @var array<string, T>
*/ protected $items = []; /** * HashTable key map. *
< * @var string[]
> * @var array<int, string>
*/ protected $keyMap = []; /**
< * Create a new \PhpOffice\PhpSpreadsheet\HashTable.
> * Create a new HashTable.
*
< * @param IComparable[] $pSource Optional source array to create HashTable from
> * @param T[] $source Optional source array to create HashTable from
*/
< public function __construct($pSource = null)
> public function __construct($source = null)
{
< if ($pSource !== null) {
> if ($source !== null) {
// Create HashTable
< $this->addFromSource($pSource);
> $this->addFromSource($source);
} } /** * Add HashTable items from source. *
< * @param IComparable[] $pSource Source array to create HashTable from
> * @param T[] $source Source array to create HashTable from
*/
< public function addFromSource(?array $pSource = null): void
> public function addFromSource(?array $source = null): void
{ // Check if an array was passed
< if ($pSource == null) {
> if ($source === null) {
return; }
< foreach ($pSource as $item) {
> foreach ($source as $item) {
$this->add($item); } } /** * Add HashTable item. *
< * @param IComparable $pSource Item to add
> * @param T $source Item to add
*/
< public function add(IComparable $pSource): void
> public function add(IComparable $source): void
{
< $hash = $pSource->getHashCode();
> $hash = $source->getHashCode();
if (!isset($this->items[$hash])) {
< $this->items[$hash] = $pSource;
> $this->items[$hash] = $source;
$this->keyMap[count($this->items) - 1] = $hash; } } /** * Remove HashTable item. *
< * @param IComparable $pSource Item to remove
> * @param T $source Item to remove
*/
< public function remove(IComparable $pSource): void
> public function remove(IComparable $source): void
{
< $hash = $pSource->getHashCode();
> $hash = $source->getHashCode();
if (isset($this->items[$hash])) { unset($this->items[$hash]); $deleteKey = -1; foreach ($this->keyMap as $key => $value) { if ($deleteKey >= 0) { $this->keyMap[$key - 1] = $value; } if ($value == $hash) { $deleteKey = $key; } } unset($this->keyMap[count($this->keyMap) - 1]); } } /** * Clear HashTable. */ public function clear(): void { $this->items = []; $this->keyMap = []; } /** * Count. * * @return int */ public function count() { return count($this->items); } /** * Get index for hash code. *
< * @param string $pHashCode < * < * @return int Index
> * @return false|int Index
*/
< public function getIndexForHashCode($pHashCode)
> public function getIndexForHashCode(string $hashCode)
{
< return array_search($pHashCode, $this->keyMap);
> // Scrutinizer thinks the following could return string. It is wrong. > return array_search($hashCode, $this->keyMap, true);
} /** * Get by index. *
< * @param int $pIndex < * < * @return IComparable
> * @return null|T
*/
< public function getByIndex($pIndex)
> public function getByIndex(int $index)
{
< if (isset($this->keyMap[$pIndex])) { < return $this->getByHashCode($this->keyMap[$pIndex]);
> if (isset($this->keyMap[$index])) { > return $this->getByHashCode($this->keyMap[$index]);
} return null; } /** * Get by hashcode. *
< * @param string $pHashCode < * < * @return IComparable
> * @return null|T
*/
< public function getByHashCode($pHashCode)
> public function getByHashCode(string $hashCode)
{
< if (isset($this->items[$pHashCode])) { < return $this->items[$pHashCode];
> if (isset($this->items[$hashCode])) { > return $this->items[$hashCode];
} return null; } /** * HashTable to array. *
< * @return IComparable[]
> * @return T[]
*/ public function toArray() { return $this->items; } /** * Implement PHP __clone to create a deep clone, not just a shallow copy. */ public function __clone() { $vars = get_object_vars($this); foreach ($vars as $key => $value) {
< if (is_object($value)) { < $this->$key = clone $value;
> // each member of this class is an array > if (is_array($value)) { > $array1 = $value; > foreach ($array1 as $key1 => $value1) { > if (is_object($value1)) { > $array1[$key1] = clone $value1; > } > } > $this->$key = $array1;
} } } }