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