Rev 2388 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** PHPExcel** Copyright (c) 2006 - 2013 PHPExcel** This library is free software; you can redistribute it and/or* modify it under the terms of the GNU Lesser General Public* License as published by the Free Software Foundation; either* version 2.1 of the License, or (at your option) any later version.** This library is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU* Lesser General Public License for more details.** You should have received a copy of the GNU Lesser General Public* License along with this library; if not, write to the Free Software* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA** @category PHPExcel* @package PHPExcel* @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL* @version ##VERSION##, ##DATE##*//*** PHPExcel_HashTable** @category PHPExcel* @package PHPExcel* @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)*/class PHPExcel_HashTable{/*** HashTable elements** @var array*/public $_items = array();/*** HashTable key map** @var array*/public $_keyMap = array();/*** Create a new PHPExcel_HashTable** @param PHPExcel_IComparable[] $pSource Optional source array to create HashTable from* @throws PHPExcel_Exception*/public function __construct($pSource = null){if ($pSource !== NULL) {// Create HashTable$this->addFromSource($pSource);}}/*** Add HashTable items from source** @param PHPExcel_IComparable[] $pSource Source array to create HashTable from* @throws PHPExcel_Exception*/public function addFromSource($pSource = null) {// Check if an array was passedif ($pSource == null) {return;} else if (!is_array($pSource)) {throw new PHPExcel_Exception('Invalid array parameter passed.');}foreach ($pSource as $item) {$this->add($item);}}/*** Add HashTable item** @param PHPExcel_IComparable $pSource Item to add* @throws PHPExcel_Exception*/public function add(PHPExcel_IComparable $pSource = null) {$hash = $pSource->getHashCode();if (!isset($this->_items[$hash])) {$this->_items[$hash] = $pSource;$this->_keyMap[count($this->_items) - 1] = $hash;}}/*** Remove HashTable item** @param PHPExcel_IComparable $pSource Item to remove* @throws PHPExcel_Exception*/public function remove(PHPExcel_IComparable $pSource = null) {$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() {$this->_items = array();$this->_keyMap = array();}/*** 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 PHPExcel_IComparable**/public function getByIndex($pIndex = 0) {if (isset($this->_keyMap[$pIndex])) {return $this->getByHashCode( $this->_keyMap[$pIndex] );}return null;}/*** Get by hashcode** @param string $pHashCode* @return PHPExcel_IComparable**/public function getByHashCode($pHashCode = '') {if (isset($this->_items[$pHashCode])) {return $this->_items[$pHashCode];}return null;}/*** HashTable to array** @return PHPExcel_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;}}}}