Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

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.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

functions.php

Zuletzt modifiziert: 09.10.2024, 12:56 - Dateigröße: 8.46 KiB


001  <?php
002   
003  namespace React\Promise;
004   
005  function resolve($promiseOrValue = null)
006  {
007      if ($promiseOrValue instanceof ExtendedPromiseInterface) {
008          return $promiseOrValue;
009      }
010   
011      if (method_exists($promiseOrValue, 'then')) {
012          $canceller = null;
013   
014          if (method_exists($promiseOrValue, 'cancel')) {
015              $canceller = [$promiseOrValue, 'cancel'];
016          }
017   
018          return new Promise(function ($resolve, $reject, $notify) use ($promiseOrValue) {
019              $promiseOrValue->then($resolve, $reject, $notify);
020          }, $canceller);
021      }
022   
023      return new FulfilledPromise($promiseOrValue);
024  }
025   
026  function reject($promiseOrValue = null)
027  {
028      if ($promiseOrValue instanceof PromiseInterface) {
029          return resolve($promiseOrValue)->then(function ($value) {
030              return new RejectedPromise($value);
031          });
032      }
033   
034      return new RejectedPromise($promiseOrValue);
035  }
036   
037  function all($promisesOrValues)
038  {
039      return map($promisesOrValues, function ($val) {
040          return $val;
041      });
042  }
043   
044  function race($promisesOrValues)
045  {
046      $cancellationQueue = new CancellationQueue();
047      $cancellationQueue->enqueue($promisesOrValues);
048   
049      return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $cancellationQueue) {
050          resolve($promisesOrValues)
051              ->done(function ($array) use ($cancellationQueue, $resolve, $reject, $notify) {
052                  if (!is_array($array) || !$array) {
053                      $resolve();
054                      return;
055                  }
056   
057                  $fulfiller = function ($value) use ($cancellationQueue, $resolve) {
058                      $cancellationQueue();
059                      $resolve($value);
060                  };
061   
062                  $rejecter = function ($reason) use ($cancellationQueue, $reject) {
063                      $cancellationQueue();
064                      $reject($reason);
065                  };
066   
067                  foreach ($array as $promiseOrValue) {
068                      $cancellationQueue->enqueue($promiseOrValue);
069   
070                      resolve($promiseOrValue)
071                          ->done($fulfiller, $rejecter, $notify);
072                  }
073              }, $reject, $notify);
074      }, $cancellationQueue);
075  }
076   
077  function any($promisesOrValues)
078  {
079      return some($promisesOrValues, 1)
080          ->then(function ($val) {
081              return array_shift($val);
082          });
083  }
084   
085  function some($promisesOrValues, $howMany)
086  {
087      $cancellationQueue = new CancellationQueue();
088      $cancellationQueue->enqueue($promisesOrValues);
089   
090      return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $howMany, $cancellationQueue) {
091          resolve($promisesOrValues)
092              ->done(function ($array) use ($howMany, $cancellationQueue, $resolve, $reject, $notify) {
093                  if (!is_array($array) || $howMany < 1) {
094                      $resolve([]);
095                      return;
096                  }
097   
098                  $len = count($array);
099   
100                  if ($len < $howMany) {
101                      throw new Exception\LengthException(
102                          sprintf(
103                              'Input array must contain at least %d item%s but contains only %s item%s.',
104                              $howMany,
105                              1 === $howMany ? '' : 's',
106                              $len,
107                              1 === $len ? '' : 's'
108                          )
109                      );
110                  }
111   
112                  $toResolve = $howMany;
113                  $toReject  = ($len - $toResolve) + 1;
114                  $values    = [];
115                  $reasons   = [];
116   
117                  foreach ($array as $i => $promiseOrValue) {
118                      $fulfiller = function ($val) use ($i, &$values, &$toResolve, $toReject, $resolve, $cancellationQueue) {
119                          if ($toResolve < 1 || $toReject < 1) {
120                              return;
121                          }
122   
123                          $values[$i] = $val;
124   
125                          if (0 === --$toResolve) {
126                              $cancellationQueue();
127                              $resolve($values);
128                          }
129                      };
130   
131                      $rejecter = function ($reason) use ($i, &$reasons, &$toReject, $toResolve, $reject, $cancellationQueue) {
132                          if ($toResolve < 1 || $toReject < 1) {
133                              return;
134                          }
135   
136                          $reasons[$i] = $reason;
137   
138                          if (0 === --$toReject) {
139                              $cancellationQueue();
140                              $reject($reasons);
141                          }
142                      };
143   
144                      $cancellationQueue->enqueue($promiseOrValue);
145   
146                      resolve($promiseOrValue)
147                          ->done($fulfiller, $rejecter, $notify);
148                  }
149              }, $reject, $notify);
150      }, $cancellationQueue);
151  }
152   
153  function map($promisesOrValues, callable $mapFunc)
154  {
155      $cancellationQueue = new CancellationQueue();
156      $cancellationQueue->enqueue($promisesOrValues);
157   
158      return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $mapFunc, $cancellationQueue) {
159          resolve($promisesOrValues)
160              ->done(function ($array) use ($mapFunc, $cancellationQueue, $resolve, $reject, $notify) {
161                  if (!is_array($array) || !$array) {
162                      $resolve([]);
163                      return;
164                  }
165   
166                  $toResolve = count($array);
167                  $values    = [];
168   
169                  foreach ($array as $i => $promiseOrValue) {
170                      $cancellationQueue->enqueue($promiseOrValue);
171   
172                      resolve($promiseOrValue)
173                          ->then($mapFunc)
174                          ->done(
175                              function ($mapped) use ($i, &$values, &$toResolve, $resolve) {
176                                  $values[$i] = $mapped;
177   
178                                  if (0 === --$toResolve) {
179                                      $resolve($values);
180                                  }
181                              },
182                              $reject,
183                              $notify
184                          );
185                  }
186              }, $reject, $notify);
187      }, $cancellationQueue);
188  }
189   
190  function reduce($promisesOrValues, callable $reduceFunc, $initialValue = null)
191  {
192      $cancellationQueue = new CancellationQueue();
193      $cancellationQueue->enqueue($promisesOrValues);
194   
195      return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $reduceFunc, $initialValue, $cancellationQueue) {
196          resolve($promisesOrValues)
197              ->done(function ($array) use ($reduceFunc, $initialValue, $cancellationQueue, $resolve, $reject, $notify) {
198                  if (!is_array($array)) {
199                      $array = [];
200                  }
201   
202                  $total = count($array);
203                  $i = 0;
204   
205                  // Wrap the supplied $reduceFunc with one that handles promises and then
206                  // delegates to the supplied.
207                  $wrappedReduceFunc = function ($current, $val) use ($reduceFunc, $cancellationQueue, $total, &$i) {
208                      $cancellationQueue->enqueue($val);
209   
210                      return $current
211                          ->then(function ($c) use ($reduceFunc, $total, &$i, $val) {
212                              return resolve($val)
213                                  ->then(function ($value) use ($reduceFunc, $total, &$i, $c) {
214                                      return $reduceFunc($c, $value, $i++, $total);
215                                  });
216                          });
217                  };
218   
219                  $cancellationQueue->enqueue($initialValue);
220   
221                  array_reduce($array, $wrappedReduceFunc, resolve($initialValue))
222                      ->done($resolve, $reject, $notify);
223              }, $reject, $notify);
224      }, $cancellationQueue);
225  }
226   
227  // Internal functions
228  function _checkTypehint(callable $callback, $object)
229  {
230      if (!is_object($object)) {
231          return true;
232      }
233   
234      if (is_array($callback)) {
235          $callbackReflection = new \ReflectionMethod($callback[0], $callback[1]);
236      } elseif (is_object($callback) && !$callback instanceof \Closure) {
237          $callbackReflection = new \ReflectionMethod($callback, '__invoke');
238      } else {
239          $callbackReflection = new \ReflectionFunction($callback);
240      }
241   
242      $parameters = $callbackReflection->getParameters();
243   
244      if (!isset($parameters[0])) {
245          return true;
246      }
247   
248      $expectedException = $parameters[0];
249   
250      if (!$expectedException->getClass()) {
251          return true;
252      }
253   
254      return $expectedException->getClass()->isInstance($object);
255  }
256