Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2388 jpm 1
<?php
2
/**
3
 * PHPExcel
4
 *
5
 * Copyright (c) 2006 - 2013 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 - 2013 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 - 2013 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
}