File Source for HashTable.php

PHPExcel

# Source for file HashTable.php

Documentation is available at HashTable.php

1. <?php
2. /**
3. * PHPExcel
4. *
5. * Copyright (c) 2006 - 2011 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 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
24. * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25. * @version 1.7.6, 2011-02-27
26. */
29. /**
30. * PHPExcel_HashTable
31. *
32. * @category PHPExcel
33. * @package PHPExcel
34. * @copyright Copyright (c) 2006 - 2011 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();
45. /**
46. * HashTable key map
47. *
48. * @var array
49. */
50. public $_keyMap = array();
52. /**
53. * Create a new PHPExcel_HashTable
54. *
55. * @param PHPExcel_IComparable[] $pSource Optional source array to create HashTable from
56. * @throws Exception
57. */
58. public function __construct($pSource = null)
59. {
60. if (! is_null($pSource)) {
61. // Create HashTable
62. $this-> addFromSource($pSource);
63. }
64. }
66. /**
67. * Add HashTable items from source
68. *
69. * @param PHPExcel_IComparable[] $pSource Source array to create HashTable from
70. * @throws 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 Exception('Invalid array parameter passed.');
78. }
80. foreach ($pSource as $item) {
81. $this-> add($item);
82. }
83. }
85. /**
86. * Add HashTable item
87. *
88. * @param PHPExcel_IComparable $pSource Item to add
89. * @throws 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. }
99. /**
100. * Remove HashTable item
101. *
102. * @param PHPExcel_IComparable $pSource Item to remove
103. * @throws 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]);
110. $deleteKey = -1;
111. foreach ($this->_keyMap as $key => $value) {
112. if ($deleteKey >= 0) {
113. $this->_keyMap[$key - 1] = $value;
114. }
116. if ($value == $hash) {
117. $deleteKey = $key;
118. }
119. }
120. unset($this->_keyMap[ count($this->_keyMap) - 1]);
121. }
122. }
124. /**
125. * Clear HashTable
126. *
127. */
128. public function clear() {
129. $this->_items = array();
130. $this->_keyMap = array();
131. }
133. /**
134. * Count
135. *
136. * @return int
137. */
138. public function count() {
139. return count($this->_items);
140. }
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. }
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. }
164. return null;
165. }
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. }
179. return null;
180. }
182. /**
183. * HashTable to array
184. *
185. * @return PHPExcel_IComparable[]
186. */
187. public function toArray() {
188. return $this->_items;
189. }
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. }

Documentation generated on Sun, 27 Feb 2011 16:32:13 -0800 by phpDocumentor 1.4.3