Annotation of embedaddon/php/ext/spl/internal/splobjectstorage.inc, revision 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>