summaryrefslogtreecommitdiffstats
path: root/vendor/markbaker/matrix/classes/src/Operators/Operator.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/markbaker/matrix/classes/src/Operators/Operator.php')
-rw-r--r--vendor/markbaker/matrix/classes/src/Operators/Operator.php78
1 files changed, 78 insertions, 0 deletions
diff --git a/vendor/markbaker/matrix/classes/src/Operators/Operator.php b/vendor/markbaker/matrix/classes/src/Operators/Operator.php
new file mode 100644
index 0000000..b7f4025
--- /dev/null
+++ b/vendor/markbaker/matrix/classes/src/Operators/Operator.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace Matrix\Operators;
+
+use Matrix\Matrix;
+use Matrix\Exception;
+
+abstract class Operator
+{
+ /**
+ * Stored internally as a 2-dimension array of values
+ *
+ * @property mixed[][] $matrix
+ **/
+ protected $matrix;
+
+ /**
+ * Number of rows in the matrix
+ *
+ * @property integer $rows
+ **/
+ protected $rows;
+
+ /**
+ * Number of columns in the matrix
+ *
+ * @property integer $columns
+ **/
+ protected $columns;
+
+ /**
+ * Create an new handler object for the operation
+ *
+ * @param Matrix $matrix The base Matrix object on which the operation will be performed
+ */
+ public function __construct(Matrix $matrix)
+ {
+ $this->rows = $matrix->rows;
+ $this->columns = $matrix->columns;
+ $this->matrix = $matrix->toArray();
+ }
+
+ /**
+ * Compare the dimensions of the matrices being operated on to see if they are valid for addition/subtraction
+ *
+ * @param Matrix $matrix The second Matrix object on which the operation will be performed
+ * @throws Exception
+ */
+ protected function validateMatchingDimensions(Matrix $matrix): void
+ {
+ if (($this->rows != $matrix->rows) || ($this->columns != $matrix->columns)) {
+ throw new Exception('Matrices have mismatched dimensions');
+ }
+ }
+
+ /**
+ * Compare the dimensions of the matrices being operated on to see if they are valid for multiplication/division
+ *
+ * @param Matrix $matrix The second Matrix object on which the operation will be performed
+ * @throws Exception
+ */
+ protected function validateReflectingDimensions(Matrix $matrix): void
+ {
+ if ($this->columns != $matrix->rows) {
+ throw new Exception('Matrices have mismatched dimensions');
+ }
+ }
+
+ /**
+ * Return the result of the operation
+ *
+ * @return Matrix
+ */
+ public function result(): Matrix
+ {
+ return new Matrix($this->matrix);
+ }
+}