Source of file BigInteger.php
Size: 3,150 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/Math/BigInteger/BigInteger.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Math\BigInteger; abstract class BigInteger { /** * Plugin manager for loading adapters * * @var null|AdapterPluginManager */ protected static $adapters = null; /** * The default adapter. * * @var Adapter\AdapterInterface */ protected static $defaultAdapter = null; /** * Create a BigInteger adapter instance * * @param string|Adapter\AdapterInterface|null $adapterName * @return Adapter\AdapterInterface */ public static function factory($adapterName = null) { if (null === $adapterName) { return static::getAvailableAdapter(); } elseif ($adapterName instanceof Adapter\AdapterInterface) { return $adapterName; } return static::getAdapterPluginManager()->get($adapterName); } /** * Set adapter plugin manager * * @param AdapterPluginManager $adapters */ public static function setAdapterPluginManager(AdapterPluginManager $adapters) { static::$adapters = $adapters; } /** * Get the adapter plugin manager * * @return AdapterPluginManager */ public static function getAdapterPluginManager() { if (static::$adapters === null) { static::$adapters = new AdapterPluginManager(); } return static::$adapters; } /** * Set default BigInteger adapter * * @param string|Adapter\AdapterInterface $adapter */ public static function setDefaultAdapter($adapter) { static::$defaultAdapter = static::factory($adapter); } /** * Get default BigInteger adapter * * @return null|Adapter\AdapterInterface */ public static function getDefaultAdapter() { if (null === static::$defaultAdapter) { static::$defaultAdapter = static::getAvailableAdapter(); } return static::$defaultAdapter; } /** * Determine and return available adapter * * @return Adapter\AdapterInterface * @throws Exception\RuntimeException */ public static function getAvailableAdapter() { if (extension_loaded('gmp')) { $adapterName = 'Gmp'; } elseif (extension_loaded('bcmath')) { $adapterName = 'Bcmath'; } else { throw new Exception\RuntimeException('Big integer math support is not detected'); } return static::factory($adapterName); } /** * Call adapter methods statically * * @param string $method * @param mixed $args * @return mixed */ public static function __callStatic($method, $args) { $adapter = static::getDefaultAdapter(); return call_user_func_array(array($adapter, $method), $args); } } |