Verzeichnisstruktur phpBB-3.3.15
- Veröffentlicht
- 28.08.2024
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
FilterIterator.php
001 <?php
002 /**
003 * Zend Framework (http://framework.zend.com/)
004 *
005 * @link http://github.com/zendframework/zend-eventmanager for the canonical source repository
006 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
007 * @license https://github.com/zendframework/zend-eventmanager/blob/master/LICENSE.md
008 */
009
010 namespace Zend\EventManager\Filter;
011
012 use Zend\EventManager\Exception;
013 use Zend\Stdlib\FastPriorityQueue;
014
015 /**
016 * Specialized priority queue implementation for use with an intercepting
017 * filter chain.
018 *
019 * Allows removal
020 */
021 class FilterIterator extends FastPriorityQueue
022 {
023 /**
024 * Does the queue contain a given value?
025 *
026 * @param mixed $datum
027 * @return bool
028 */
029 public function contains($datum)
030 {
031 foreach ($this as $item) {
032 if ($item === $datum) {
033 return true;
034 }
035 }
036 return false;
037 }
038
039 /**
040 * Insert a value into the queue.
041 *
042 * Requires a callable.
043 *
044 * @param callable $value
045 * @param mixed $priority
046 * @return void
047 * @throws Exception\InvalidArgumentException for non-callable $value.
048 */
049 public function insert($value, $priority)
050 {
051 if (! is_callable($value)) {
052 throw new Exception\InvalidArgumentException(sprintf(
053 '%s can only aggregate callables; received %s',
054 __CLASS__,
055 (is_object($value) ? get_class($value) : gettype($value))
056 ));
057 }
058 parent::insert($value, $priority);
059 }
060
061 /**
062 * Remove a value from the queue
063 *
064 * This is an expensive operation. It must first iterate through all values,
065 * and then re-populate itself. Use only if absolutely necessary.
066 *
067 * @param mixed $datum
068 * @return bool
069 */
070 public function remove($datum)
071 {
072 $this->setExtractFlags(self::EXTR_BOTH);
073
074 // Iterate and remove any matches
075 $removed = false;
076 $items = [];
077 $this->rewind();
078 while (! $this->isEmpty()) {
079 $item = $this->extract();
080 if ($item['data'] === $datum) {
081 $removed = true;
082 continue;
083 }
084 $items[] = $item;
085 }
086
087 // Repopulate
088 foreach ($items as $item) {
089 $this->insert($item['data'], $item['priority']);
090 }
091
092 $this->setExtractFlags(self::EXTR_DATA);
093 return $removed;
094 }
095
096 /**
097 * Iterate the next filter in the chain
098 *
099 * Iterates and calls the next filter in the chain.
100 *
101 * @param mixed $context
102 * @param array $params
103 * @param FilterIterator $chain
104 * @return mixed
105 */
106 public function next($context = null, array $params = [], $chain = null)
107 {
108 if (empty($context) || ($chain instanceof FilterIterator && $chain->isEmpty())) {
109 return;
110 }
111
112 //We can't extract from an empty heap
113 if ($this->isEmpty()) {
114 return;
115 }
116
117 $next = $this->extract();
118 return $next($context, $params, $chain);
119 }
120 }
121