Annotation of embedaddon/php/ext/spl/internal/splobjectstorage.inc, revision 1.1.1.1
1.1 misho 1: <?php
2:
3: /** @file splobjectstorage.inc
4: * @ingroup SPL
5: * @brief class SplObjectStorage
6: * @author Marcus Boerger
7: * @date 2003 - 2009
8: *
9: * SPL - Standard PHP Library
10: */
11:
12: /**
13: * @brief Object storage
14: * @author Marcus Boerger
15: * @version 1.1
16: * @since PHP 5.1.2
17: *
18: * This container allows to store objects uniquly without the need to compare
19: * them one by one. This is only possible internally. The code represenation
20: * here therefore has a complexity of O(n) while the actual implementation has
21: * complexity O(1).
22: */
23: class SplObjectStorage implements Iterator, Countable, ArrayAccess
24: {
25: private $storage = array();
26: private $index = 0;
27:
28: /** Rewind to top iterator as set in constructor
29: */
30: function rewind()
31: {
32: rewind($this->storage);
33: }
34:
35: /** @return whether iterator is valid
36: */
37: function valid()
38: {
39: return key($this->storage) !== false;
40: }
41:
42: /** @return current key
43: */
44: function key()
45: {
46: return $this->index;
47: }
48:
49: /** @return current object
50: */
51: function current()
52: {
53: $element = current($this->storage);
54: return $element ? $element[0] : NULL
55: }
56:
57: /** @return get current object's associated information
58: * @since 5.3.0
59: */
60: function getInfo()
61: {
62: $element = current($this->storage);
63: return $element ? $element[1] : NULL
64: }
65:
66: /** @return set current object's associated information
67: * @since 5.3.0
68: */
69: function setInfo($inf = NULL)
70: {
71: if ($this->valid()) {
72: $this->storage[$this->index][1] = $inf;
73: }
74: }
75:
76: /** Forward to next element
77: */
78: function next()
79: {
80: next($this->storage);
81: $this->index++;
82: }
83:
84: /** @return number of objects in storage
85: */
86: function count()
87: {
88: return count($this->storage);
89: }
90:
91: /** @param $obj object to look for
92: * @return whether $obj is contained in storage
93: */
94: function contains($obj)
95: {
96: if (is_object($obj))
97: {
98: foreach($this->storage as $element)
99: {
100: if ($object === $element[0])
101: {
102: return true;
103: }
104: }
105: }
106: return false;
107: }
108:
109: /** @param $obj new object to attach to storage or object whose
110: * associative information is to be replaced
111: * @param $inf associative information stored along the object
112: */
113: function attach($obj, $inf = NULL)
114: {
115: if (is_object($obj) && !$this->contains($obj))
116: {
117: $this->storage[] = array($obj, $inf);
118: }
119: }
120:
121: /** @param $obj object to remove from storage
122: */
123: function detach($obj)
124: {
125: if (is_object($obj))
126: {
127: foreach($this->storage as $idx => $element)
128: {
129: if ($object === $element[0])
130: {
131: unset($this->storage[$idx]);
132: $this->rewind();
133: return;
134: }
135: }
136: }
137: }
138:
139: /** @param $obj new object to attach to storage or object whose
140: * associative information is to be replaced
141: * @param $inf associative information stored along the object
142: * @since 5.3.0
143: */
144: function offsetSet($obj, $inf)
145: {
146: $this->attach($obj, $inf);
147: }
148:
149: /** @param $obj Exising object to look for
150: * @return associative information stored with object
151: * @throw UnexpectedValueException if Object $obj is not contained in
152: * storage
153: * @since 5.3.0
154: */
155: function offsetGet($obj)
156: {
157: if (is_object($obj))
158: {
159: foreach($this->storage as $idx => $element)
160: {
161: if ($object === $element[0])
162: {
163: return $element[1];
164: }
165: }
166: }
167: throw new UnexpectedValueException('Object not found');
168: }
169:
170: /** @param $obj Exising object to look for
171: * @return associative information stored with object
172: * @since 5.3.0
173: */
174: function offsetUnset($obj)
175: {
176: $this->detach($obj);
177: }
178:
179: /** @param $obj object to look for
180: * @return whether $obj is contained in storage
181: */
182: function offsetEsists($obj)
183: {
184: return $this->contains($obj);
185: }
186: }
187:
188: ?>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>