Вход Регистрация
Файл: vendor/brick/math/src/Internal/CalculatorRegistry.php
Строк: 93
<?php

declare(strict_types=1);

namespace 
BrickMathInternal;

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 
CalculatorGmpCalculator();
        }

        if (
extension_loaded('bcmath')) {
            return new 
CalculatorBcMathCalculator();
        }

        return new 
CalculatorNativeCalculator();
    }
}
Онлайн: 2
Реклама