1d86ed7fbStbbdev /* 2*b15aabb3Stbbdev Copyright (c) 2005-2021 Intel Corporation 3d86ed7fbStbbdev 4d86ed7fbStbbdev Licensed under the Apache License, Version 2.0 (the "License"); 5d86ed7fbStbbdev you may not use this file except in compliance with the License. 6d86ed7fbStbbdev You may obtain a copy of the License at 7d86ed7fbStbbdev 8d86ed7fbStbbdev http://www.apache.org/licenses/LICENSE-2.0 9d86ed7fbStbbdev 10d86ed7fbStbbdev Unless required by applicable law or agreed to in writing, software 11d86ed7fbStbbdev distributed under the License is distributed on an "AS IS" BASIS, 12d86ed7fbStbbdev WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d86ed7fbStbbdev See the License for the specific language governing permissions and 14d86ed7fbStbbdev limitations under the License. 15d86ed7fbStbbdev */ 16d86ed7fbStbbdev 17d86ed7fbStbbdev #ifndef TBB_examples_parallel_preorder_matrix_H 18d86ed7fbStbbdev #define TBB_examples_parallel_preorder_matrix_H 19d86ed7fbStbbdev 20d86ed7fbStbbdev class Matrix { 21d86ed7fbStbbdev static const int n = 20; 22d86ed7fbStbbdev float array[n][n]; 23d86ed7fbStbbdev 24d86ed7fbStbbdev public: Matrix()25d86ed7fbStbbdev Matrix() {} Matrix(float z)26d86ed7fbStbbdev Matrix(float z) { 27d86ed7fbStbbdev for (int i = 0; i < n; ++i) 28d86ed7fbStbbdev for (int j = 0; j < n; ++j) 29d86ed7fbStbbdev array[i][j] = i == j ? z : 0; 30d86ed7fbStbbdev } operator -(const Matrix & x)31d86ed7fbStbbdev friend Matrix operator-(const Matrix& x) { 32d86ed7fbStbbdev Matrix result; 33d86ed7fbStbbdev for (int i = 0; i < n; ++i) 34d86ed7fbStbbdev for (int j = 0; j < n; ++j) 35d86ed7fbStbbdev result.array[i][j] = -x.array[i][j]; 36d86ed7fbStbbdev return result; 37d86ed7fbStbbdev } operator +(const Matrix & x,const Matrix & y)38d86ed7fbStbbdev friend Matrix operator+(const Matrix& x, const Matrix& y) { 39d86ed7fbStbbdev Matrix result; 40d86ed7fbStbbdev for (int i = 0; i < n; ++i) 41d86ed7fbStbbdev for (int j = 0; j < n; ++j) 42d86ed7fbStbbdev result.array[i][j] = x.array[i][j] + y.array[i][j]; 43d86ed7fbStbbdev return result; 44d86ed7fbStbbdev } operator -(const Matrix & x,const Matrix & y)45d86ed7fbStbbdev friend Matrix operator-(const Matrix& x, const Matrix& y) { 46d86ed7fbStbbdev Matrix result; 47d86ed7fbStbbdev for (int i = 0; i < n; ++i) 48d86ed7fbStbbdev for (int j = 0; j < n; ++j) 49d86ed7fbStbbdev result.array[i][j] = x.array[i][j] - y.array[i][j]; 50d86ed7fbStbbdev return result; 51d86ed7fbStbbdev } operator *(const Matrix & x,const Matrix & y)52d86ed7fbStbbdev friend Matrix operator*(const Matrix& x, const Matrix& y) { 53d86ed7fbStbbdev Matrix result(0); 54d86ed7fbStbbdev for (int i = 0; i < n; ++i) 55d86ed7fbStbbdev for (int k = 0; k < n; ++k) 56d86ed7fbStbbdev for (int j = 0; j < n; ++j) 57d86ed7fbStbbdev result.array[i][j] += x.array[i][k] * y.array[k][j]; 58d86ed7fbStbbdev return result; 59d86ed7fbStbbdev } 60d86ed7fbStbbdev }; 61d86ed7fbStbbdev 62d86ed7fbStbbdev #endif /* TBB_examples_parallel_preorder_matrix_H */ 63