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>