Viewing file: CalculatorRegistry.php (1.84 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
declare(strict_types=1);
namespace Brick\Math\Internal;
use function extension_loaded;
/** * Stores the current Calculator instance used by BigNumber classes. * * @internal */ final class CalculatorRegistry { /** * The Calculator instance in use. */ private static ?Calculator $instance = null;
/** * Sets the Calculator instance to use. * * An instance is typically set only in unit tests: autodetect is usually the best option. * * @param Calculator|null $calculator The calculator instance, or null to revert to autodetect. */ final public static function set(?Calculator $calculator) : void { self::$instance = $calculator; }
/** * Returns the Calculator instance to use. * * If none has been explicitly set, the fastest available implementation will be returned. * * Note: even though this method is not technically pure, it is considered pure when used in a normal context, when * only relying on autodetect. * * @pure */ final public static function get() : Calculator { /** @phpstan-ignore impure.staticPropertyAccess */ if (self::$instance === null) { /** @phpstan-ignore impure.propertyAssign */ self::$instance = self::detect(); }
/** @phpstan-ignore impure.staticPropertyAccess */ return self::$instance; }
/** * Returns the fastest available Calculator implementation. * * @pure * @codeCoverageIgnore */ private static function detect() : Calculator { if (extension_loaded('gmp')) { return new Calculator\GmpCalculator(); }
if (extension_loaded('bcmath')) { return new Calculator\BcMathCalculator(); }
return new Calculator\NativeCalculator(); } }
|