You are here

public function PHPExcel_Shared_JAMA_Matrix::__construct in Loft Data Grids 7.2

Same name and namespace in other branches
  1. 6.2 vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/JAMA/Matrix.php \PHPExcel_Shared_JAMA_Matrix::__construct()

* Polymorphic constructor * * As PHP has no support for polymorphic constructors, we hack our own sort of polymorphism using func_num_args, func_get_arg, and gettype. In essence, we're just implementing a simple RTTI filter and calling the appropriate constructor.

File

vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/JAMA/Matrix.php, line 66

Class

PHPExcel_Shared_JAMA_Matrix

Code

public function __construct() {
  if (func_num_args() > 0) {
    $args = func_get_args();
    $match = implode(",", array_map('gettype', $args));
    switch ($match) {

      //Rectangular matrix - m x n initialized from 2D array
      case 'array':
        $this->m = count($args[0]);
        $this->n = count($args[0][0]);
        $this->A = $args[0];
        break;

      //Square matrix - n x n
      case 'integer':
        $this->m = $args[0];
        $this->n = $args[0];
        $this->A = array_fill(0, $this->m, array_fill(0, $this->n, 0));
        break;

      //Rectangular matrix - m x n
      case 'integer,integer':
        $this->m = $args[0];
        $this->n = $args[1];
        $this->A = array_fill(0, $this->m, array_fill(0, $this->n, 0));
        break;

      //Rectangular matrix - m x n initialized from packed array
      case 'array,integer':
        $this->m = $args[1];
        if ($this->m != 0) {
          $this->n = count($args[0]) / $this->m;
        }
        else {
          $this->n = 0;
        }
        if ($this->m * $this->n == count($args[0])) {
          for ($i = 0; $i < $this->m; ++$i) {
            for ($j = 0; $j < $this->n; ++$j) {
              $this->A[$i][$j] = $args[0][$i + $j * $this->m];
            }
          }
        }
        else {
          throw new PHPExcel_Calculation_Exception(self::ArrayLengthException);
        }
        break;
      default:
        throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
        break;
    }
  }
  else {
    throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException);
  }
}