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