[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/lib/phpexcel/PHPExcel/ -> HashTable.php (source)

   1  <?php
   2  /**
   3   * PHPExcel
   4   *
   5   * Copyright (c) 2006 - 2014 PHPExcel
   6   *
   7   * This library is free software; you can redistribute it and/or
   8   * modify it under the terms of the GNU Lesser General Public
   9   * License as published by the Free Software Foundation; either
  10   * version 2.1 of the License, or (at your option) any later version.
  11   *
  12   * This library is distributed in the hope that it will be useful,
  13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15   * Lesser General Public License for more details.
  16   *
  17   * You should have received a copy of the GNU Lesser General Public
  18   * License along with this library; if not, write to the Free Software
  19   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  20   *
  21   * @category   PHPExcel
  22   * @package    PHPExcel
  23   * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
  24   * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
  25   * @version    ##VERSION##, ##DATE##
  26   */
  27  
  28  
  29  /**
  30   * PHPExcel_HashTable
  31   *
  32   * @category   PHPExcel
  33   * @package    PHPExcel
  34   * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
  35   */
  36  class PHPExcel_HashTable
  37  {
  38      /**
  39       * HashTable elements
  40       *
  41       * @var array
  42       */
  43      public $_items = array();
  44  
  45      /**
  46       * HashTable key map
  47       *
  48       * @var array
  49       */
  50      public $_keyMap = array();
  51  
  52      /**
  53       * Create a new PHPExcel_HashTable
  54       *
  55       * @param    PHPExcel_IComparable[] $pSource    Optional source array to create HashTable from
  56       * @throws    PHPExcel_Exception
  57       */
  58  	public function __construct($pSource = null)
  59      {
  60          if ($pSource !== NULL) {
  61              // Create HashTable
  62              $this->addFromSource($pSource);
  63          }
  64      }
  65  
  66      /**
  67       * Add HashTable items from source
  68       *
  69       * @param    PHPExcel_IComparable[] $pSource    Source array to create HashTable from
  70       * @throws    PHPExcel_Exception
  71       */
  72  	public function addFromSource($pSource = null) {
  73          // Check if an array was passed
  74          if ($pSource == null) {
  75              return;
  76          } else if (!is_array($pSource)) {
  77              throw new PHPExcel_Exception('Invalid array parameter passed.');
  78          }
  79  
  80          foreach ($pSource as $item) {
  81              $this->add($item);
  82          }
  83      }
  84  
  85      /**
  86       * Add HashTable item
  87       *
  88       * @param    PHPExcel_IComparable $pSource    Item to add
  89       * @throws    PHPExcel_Exception
  90       */
  91  	public function add(PHPExcel_IComparable $pSource = null) {
  92          $hash = $pSource->getHashCode();
  93          if (!isset($this->_items[$hash])) {
  94              $this->_items[$hash] = $pSource;
  95              $this->_keyMap[count($this->_items) - 1] = $hash;
  96          }
  97      }
  98  
  99      /**
 100       * Remove HashTable item
 101       *
 102       * @param    PHPExcel_IComparable $pSource    Item to remove
 103       * @throws    PHPExcel_Exception
 104       */
 105  	public function remove(PHPExcel_IComparable $pSource = null) {
 106          $hash = $pSource->getHashCode();
 107          if (isset($this->_items[$hash])) {
 108              unset($this->_items[$hash]);
 109  
 110              $deleteKey = -1;
 111              foreach ($this->_keyMap as $key => $value) {
 112                  if ($deleteKey >= 0) {
 113                      $this->_keyMap[$key - 1] = $value;
 114                  }
 115  
 116                  if ($value == $hash) {
 117                      $deleteKey = $key;
 118                  }
 119              }
 120              unset($this->_keyMap[count($this->_keyMap) - 1]);
 121          }
 122      }
 123  
 124      /**
 125       * Clear HashTable
 126       *
 127       */
 128  	public function clear() {
 129          $this->_items = array();
 130          $this->_keyMap = array();
 131      }
 132  
 133      /**
 134       * Count
 135       *
 136       * @return int
 137       */
 138  	public function count() {
 139          return count($this->_items);
 140      }
 141  
 142      /**
 143       * Get index for hash code
 144       *
 145       * @param    string    $pHashCode
 146       * @return    int    Index
 147       */
 148  	public function getIndexForHashCode($pHashCode = '') {
 149          return array_search($pHashCode, $this->_keyMap);
 150      }
 151  
 152      /**
 153       * Get by index
 154       *
 155       * @param    int    $pIndex
 156       * @return    PHPExcel_IComparable
 157       *
 158       */
 159  	public function getByIndex($pIndex = 0) {
 160          if (isset($this->_keyMap[$pIndex])) {
 161              return $this->getByHashCode( $this->_keyMap[$pIndex] );
 162          }
 163  
 164          return null;
 165      }
 166  
 167      /**
 168       * Get by hashcode
 169       *
 170       * @param    string    $pHashCode
 171       * @return    PHPExcel_IComparable
 172       *
 173       */
 174  	public function getByHashCode($pHashCode = '') {
 175          if (isset($this->_items[$pHashCode])) {
 176              return $this->_items[$pHashCode];
 177          }
 178  
 179          return null;
 180      }
 181  
 182      /**
 183       * HashTable to array
 184       *
 185       * @return PHPExcel_IComparable[]
 186       */
 187  	public function toArray() {
 188          return $this->_items;
 189      }
 190  
 191      /**
 192       * Implement PHP __clone to create a deep clone, not just a shallow copy.
 193       */
 194  	public function __clone() {
 195          $vars = get_object_vars($this);
 196          foreach ($vars as $key => $value) {
 197              if (is_object($value)) {
 198                  $this->$key = clone $value;
 199              }
 200          }
 201      }
 202  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1