diff --git a/Account/Account.php b/Account/Account.php index 09d0a7f4d..fd40e379f 100644 --- a/Account/Account.php +++ b/Account/Account.php @@ -94,18 +94,18 @@ class Account implements ArrayableInterface, \JsonSerializable /** * Last activity. * - * @var null|\DateTime + * @var \DateTime * @since 1.0.0 */ - protected ?\DateTime $lastActive = null; + protected \DateTime $lastActive; /** * Last activity. * - * @var null|\DateTime + * @var \DateTime * @since 1.0.0 */ - protected ?\DateTime $createdAt = null; + protected \DateTime $createdAt; /** * Groups. @@ -145,7 +145,7 @@ class Account implements ArrayableInterface, \JsonSerializable * @var Localization * @since 1.0.0 */ - protected ?Localization $l11n = null; + protected Localization $l11n; use PermissionHandlingTrait; diff --git a/Algorithm/Sort/BucketSort.php b/Algorithm/Sort/BucketSort.php index ae8cfdb8b..383f1ba7e 100644 --- a/Algorithm/Sort/BucketSort.php +++ b/Algorithm/Sort/BucketSort.php @@ -29,6 +29,10 @@ class BucketSort $buckets = []; $M = $list[0]::max($list); + if ($bucketCount < 1) { + return []; + } + foreach ($list as $element) { $buckets[(int) \floor(($bucketCount - 1) * $element->getValue() / $M)][] = $element; } diff --git a/Algorithm/Sort/CycleSort.php b/Algorithm/Sort/CycleSort.php index f68b98517..1c0d07a39 100644 --- a/Algorithm/Sort/CycleSort.php +++ b/Algorithm/Sort/CycleSort.php @@ -77,6 +77,6 @@ class CycleSort implements SortInterface } } - return $order === SortOrder::ASC ? $list : \array_reverse($list, false);; + return $order === SortOrder::ASC ? $list : \array_reverse($list, false); } } diff --git a/Algorithm/Sort/FlashSort.php b/Algorithm/Sort/FlashSort.php index e69de29bb..14ab8e464 100644 --- a/Algorithm/Sort/FlashSort.php +++ b/Algorithm/Sort/FlashSort.php @@ -0,0 +1,117 @@ + 262143) { + $m = 262143; + } + + $l = \array_fill(0, $n, 0); + $anmin = $list[0]; + $anmax = $anmin; + $nmax = 0; + $nmove = 0; + $lk = 0; + + $kmin = null; + $kmax = null; + + // todo: replace >>> with Numeric::uRightShift + + for ($i = 0; (($i += 2) - $n) >>> 31;) { + if ((($kmax = $list[$i - 1])->getValue() - ($kmin = $list[$i])->getValue()) >>> 31) { + if (($kmax->getValue() - $anmin->getValue()) >>> 31) { + $anmin = $list[$i - 1]; + } + + if (($anmax->getValue() - $kmin->getValue()) >>> 31) { + $anmax = $list[$i]; + $nmax = $i; + } + } else { + if (($kmin->getValue() - $anmin->getValue()) >>> 31) { + $anmin = $list[$i]; + } + + if (($anmax->getValue() - $kmin->getValue()) >>> 31) { + $anmax = $list[$i - 1]; + $nmax = $i - 1; + } + } + } + + if ((--$i - $n) >>> 31) { + if ((($k = $list[$i])->getValue() - $anmin->getValue()) >>> 31) { + $anmin = $list[$i]; + } elseif (($anmax->getValue() - $k->getValue()) >>> 31) { + $anmax = $list[$i]; + $nmax = $i; + } + } + + if ($anmin->getValue() === $anmax->getValue()) { + return $list; + } + + $c1 = (($m - 1) << 13) / ($anmax->getValue() - $anmin->getValue()); + + for ($i = -1; (++$i - $n) >>> 31;) { + ++$l[($c1 * ($list[$i]->getValue() - $anmin->getValue())) >> 13]; + } + + $lk = $l[0]; + for ($k = 0; (++$k - $m) >>> 31;) { + $lk = ($l[$k] += $lk); + } + + $hold = $anmax; + $list[$nmax] = $list[0]; + $list[0] = $hold; + + $flash = null; + $j = 0; + $k = ($m - 1); + $i = ($n - 1); + + while (($nmove - $i) >>> 31) { + while ($j !== $lk) { + $k = ($c1 * ($list[(++$j)]->getValue() - $anmin->getValue())) >> 13; + } + + $flash = $a[$j]; + $lk = $l[$k]; + + while ($j !== $lk) + } + } +} diff --git a/ApplicationAbstract.php b/ApplicationAbstract.php index 2bc5ef5c8..06540556f 100644 --- a/ApplicationAbstract.php +++ b/ApplicationAbstract.php @@ -14,18 +14,19 @@ declare(strict_types=1); namespace phpOMS; -use phpOMS\DataStorage\Database\DatabasePool; -use phpOMS\Localization\L11nManager; +use Model\CoreSettings; use phpOMS\Router\Router; -use phpOMS\DataStorage\Session\SessionInterface; -use phpOMS\DataStorage\Cookie\CookieJar; +use phpOMS\Log\FileLogger; +use phpOMS\Event\EventManager; use phpOMS\Module\ModuleManager; use phpOMS\Dispatcher\Dispatcher; -use phpOMS\DataStorage\Cache\CachePool; -use Model\CoreSettings; -use phpOMS\Event\EventManager; use phpOMS\Account\AccountManager; -use phpOMS\Log\FileLogger; +use phpOMS\Localization\L11nManager; +use phpOMS\Localization\Localization; +use phpOMS\DataStorage\Cache\CachePool; +use phpOMS\DataStorage\Cookie\CookieJar; +use phpOMS\DataStorage\Database\DatabasePool; +use phpOMS\DataStorage\Session\SessionInterface; /** * Application class. diff --git a/Event/EventManager.php b/Event/EventManager.php index 031a0374a..66672f9b7 100644 --- a/Event/EventManager.php +++ b/Event/EventManager.php @@ -52,10 +52,10 @@ final class EventManager implements \Countable /** * Dispatcher. * - * @var DispatcherInterface|Object + * @var DispatcherInterface * @since 1.0.0 */ - private ?DispatcherInterface $dispatcher = null; + private DispatcherInterface $dispatcher; /** * Constructor. diff --git a/Message/Http/Request.php b/Message/Http/Request.php index 144e5fbc8..50339aa67 100644 --- a/Message/Http/Request.php +++ b/Message/Http/Request.php @@ -89,7 +89,7 @@ final class Request extends RequestAbstract */ private function init() : void { - if ($this->uri === null) { + if (!isset($this->uri)) { $this->initCurrentRequest(); $this->lock(); $this->cleanupGlobals(); diff --git a/Message/RequestAbstract.php b/Message/RequestAbstract.php index a14cb5bd5..fb3ad4c9f 100644 --- a/Message/RequestAbstract.php +++ b/Message/RequestAbstract.php @@ -29,10 +29,10 @@ abstract class RequestAbstract implements MessageInterface /** * Uri. * - * @var null|UriInterface + * @var UriInterface * @since 1.0.0 */ - protected ?UriInterface $uri = null; + protected UriInterface $uri; /** * Request method. @@ -85,10 +85,10 @@ abstract class RequestAbstract implements MessageInterface /** * Request header. * - * @var null|HeaderAbstract + * @var HeaderAbstract * @since 1.0.0 */ - protected ?HeaderAbstract $header = null; + protected HeaderAbstract $header; /** * Get request uri. diff --git a/Message/ResponseAbstract.php b/Message/ResponseAbstract.php index c361cb783..3c733f3ed 100644 --- a/Message/ResponseAbstract.php +++ b/Message/ResponseAbstract.php @@ -35,10 +35,10 @@ abstract class ResponseAbstract implements MessageInterface, \JsonSerializable /** * Header. * - * @var null|HeaderAbstract + * @var HeaderAbstract * @since 1.0.0 */ - protected ?HeaderAbstract $header = null; + protected HeaderAbstract $header; /** * Get response by ID. diff --git a/Model/Html/Head.php b/Model/Html/Head.php index c47d55166..9ef80b373 100644 --- a/Model/Html/Head.php +++ b/Model/Html/Head.php @@ -66,10 +66,10 @@ class Head implements RenderableInterface /** * Page meta. * - * @var null|Meta + * @var Meta * @since 1.0.0 */ - private ?Meta $meta = null; + private Meta $meta; /** * html style. diff --git a/tests/Algorithm/PathFinding/JumpPointSearchTest.php b/tests/Algorithm/PathFinding/JumpPointSearchTest.php new file mode 100644 index 000000000..0808e9b94 --- /dev/null +++ b/tests/Algorithm/PathFinding/JumpPointSearchTest.php @@ -0,0 +1,59 @@ +gridArray, JumpPointNode::class); + $path = JumpPointSearch::findPath( + 2, 5, + 11, 11, + $grid, HeuristicType::EUCLIDEAN, MovementType::DIAGONAL + ); + } +}