From 75160b12821f7f4299cce7f0b69c83c1502ae071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=20Luka=20=C5=A0ijanec?= Date: Mon, 27 May 2024 13:08:29 +0200 Subject: 2024-02-19 upstream --- .../src/PhpSpreadsheet/HashTable.php | 175 +++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/HashTable.php (limited to 'vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/HashTable.php') diff --git a/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/HashTable.php b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/HashTable.php new file mode 100644 index 0000000..d51c551 --- /dev/null +++ b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/HashTable.php @@ -0,0 +1,175 @@ +addFromSource($pSource); + } + } + + /** + * Add HashTable items from source. + * + * @param IComparable[] $pSource Source array to create HashTable from + */ + public function addFromSource(?array $pSource = null): void + { + // Check if an array was passed + if ($pSource == null) { + return; + } + + foreach ($pSource as $item) { + $this->add($item); + } + } + + /** + * Add HashTable item. + * + * @param IComparable $pSource Item to add + */ + public function add(IComparable $pSource): void + { + $hash = $pSource->getHashCode(); + if (!isset($this->items[$hash])) { + $this->items[$hash] = $pSource; + $this->keyMap[count($this->items) - 1] = $hash; + } + } + + /** + * Remove HashTable item. + * + * @param IComparable $pSource Item to remove + */ + public function remove(IComparable $pSource): void + { + $hash = $pSource->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 + */ + public function getIndexForHashCode($pHashCode) + { + return array_search($pHashCode, $this->keyMap); + } + + /** + * Get by index. + * + * @param int $pIndex + * + * @return IComparable + */ + public function getByIndex($pIndex) + { + if (isset($this->keyMap[$pIndex])) { + return $this->getByHashCode($this->keyMap[$pIndex]); + } + + return null; + } + + /** + * Get by hashcode. + * + * @param string $pHashCode + * + * @return IComparable + */ + public function getByHashCode($pHashCode) + { + if (isset($this->items[$pHashCode])) { + return $this->items[$pHashCode]; + } + + return null; + } + + /** + * HashTable to array. + * + * @return IComparable[] + */ + 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; + } + } + } +} -- cgit v1.2.3