[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/include/Zend/Crypt/Math/ -> BigInteger.php (source)

   1  <?php
   2  /**
   3   * Zend Framework
   4   *
   5   * LICENSE
   6   *
   7   * This source file is subject to the new BSD license that is bundled
   8   * with this package in the file LICENSE.txt.
   9   * It is also available through the world-wide-web at this URL:
  10   * http://framework.zend.com/license/new-bsd
  11   * If you did not receive a copy of the license and are unable to
  12   * obtain it through the world-wide-web, please send an email
  13   * to [email protected] so we can send you a copy immediately.
  14   *
  15   * @category   Zend
  16   * @package    Zend_Crypt
  17   * @subpackage Math
  18   * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  19   * @license    http://framework.zend.com/license/new-bsd     New BSD License
  20   * @version    $Id: BigInteger.php 24593 2012-01-05 20:35:02Z matthew $
  21   */
  22  
  23  /**
  24   * Support for arbitrary precision mathematics in PHP.
  25   *
  26   * Zend_Crypt_Math_BigInteger is a wrapper across three PHP extensions: bcmath, gmp
  27   * and big_int. Since each offer similar functionality, but availability of
  28   * each differs across installations of PHP, this wrapper attempts to select
  29   * the fastest option available and encapsulate a subset of its functionality
  30   * which all extensions share in common.
  31   *
  32   * This class requires one of the three extensions to be available. BCMATH
  33   * while the slowest, is available by default under Windows, and under Unix
  34   * if PHP is compiled with the flag "--enable-bcmath". GMP requires the gmp
  35   * library from http://www.swox.com/gmp/ and PHP compiled with the "--with-gmp"
  36   * flag. BIG_INT support is available from a big_int PHP library available from
  37   * only from PECL (a Windows port is not available).
  38   *
  39   * @category   Zend
  40   * @package    Zend_Crypt
  41   * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  42   * @license    http://framework.zend.com/license/new-bsd     New BSD License
  43   */
  44  class Zend_Crypt_Math_BigInteger
  45  {
  46  
  47      /**
  48       * Holds an instance of one of the three arbitrary precision wrappers.
  49       *
  50       * @var Zend_Crypt_Math_BigInteger_Interface
  51       */
  52      protected $_math = null;
  53  
  54      /**
  55       * Constructor; a Factory which detects a suitable PHP extension for
  56       * arbitrary precision math and instantiates the suitable wrapper
  57       * object.
  58       *
  59       * @param string $extension
  60       * @throws  Zend_Crypt_Math_BigInteger_Exception
  61       */
  62      public function __construct($extension = null)
  63      {
  64          if ($extension !== null && !in_array($extension, array('bcmath', 'gmp', 'bigint'))) {
  65              require_once ('Zend/Crypt/Math/BigInteger/Exception.php');
  66              throw new Zend_Crypt_Math_BigInteger_Exception('Invalid extension type; please use one of bcmath, gmp or bigint');
  67          }
  68          $this->_loadAdapter($extension);
  69      }
  70  
  71      /**
  72       * Redirect all public method calls to the wrapped extension object.
  73       *
  74       * @param   string $methodName
  75       * @param   array $args
  76       * @throws  Zend_Crypt_Math_BigInteger_Exception
  77       */
  78      public function __call($methodName, $args)
  79      {
  80          if(!method_exists($this->_math, $methodName)) {
  81              require_once  'Zend/Crypt/Math/BigInteger/Exception.php';
  82              throw new Zend_Crypt_Math_BigInteger_Exception('invalid method call: ' . get_class($this->_math) . '::' . $methodName . '() does not exist');
  83          }
  84          return call_user_func_array(array($this->_math, $methodName), $args);
  85      }
  86  
  87      /**
  88       * @param string $extension
  89       * @throws  Zend_Crypt_Math_BigInteger_Exception
  90       */
  91      protected function _loadAdapter($extension = null)
  92      {
  93          if ($extension === null) {
  94              if (extension_loaded('gmp')) {
  95                  $extension = 'gmp';
  96              //} elseif (extension_loaded('big_int')) {
  97              //    $extension = 'big_int';
  98              } else {
  99                  $extension = 'bcmath';
 100              }
 101          }
 102          if($extension == 'gmp' && extension_loaded('gmp')) {
 103              require_once  'Zend/Crypt/Math/BigInteger/Gmp.php';
 104              $this->_math = new Zend_Crypt_Math_BigInteger_Gmp();
 105          //} elseif($extension == 'bigint' && extension_loaded('big_int')) {
 106          //    require_once 'Zend/Crypt_Math/BigInteger/Bigint.php';
 107          //    $this->_math = new Zend_Crypt_Math_BigInteger_Bigint();
 108          } elseif ($extension == 'bcmath' && extension_loaded('bcmath')) {
 109              require_once  'Zend/Crypt/Math/BigInteger/Bcmath.php';
 110              $this->_math = new Zend_Crypt_Math_BigInteger_Bcmath();
 111          } else {
 112              require_once  'Zend/Crypt/Math/BigInteger/Exception.php';
 113              throw new Zend_Crypt_Math_BigInteger_Exception($extension . ' big integer precision math support not detected');
 114          }
 115      }
 116  
 117  }


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1