4 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
22 TYPE_ROW_COL matrix<TYPE, ROW, COL>::matrix(void)
24 for (int i = 0; i < ROW; i++)
25 for (int j = 0; j < COL; j++)
29 TYPE_ROW_COL matrix<TYPE, ROW, COL>::matrix(const matrix<TYPE, ROW, COL>& m)
31 for (int p = 0; p < ROW; p++)
32 for (int q = 0; q < COL; q++)
33 m_mat[p][q] = m.m_mat[p][q];
36 TYPE_ROW_COL matrix<TYPE, ROW, COL>::matrix(TYPE mat_data[ROW][COL])
38 for (int i = 0; i < ROW; i++)
39 for (int j = 0; j < COL; j++)
40 m_mat[i][j] = mat_data[i][j];
43 TYPE_ROW_COL matrix<TYPE, ROW, COL>::~matrix()
47 TYPE_ROW_COL matrix<TYPE, ROW, COL> matrix<TYPE, ROW, COL>::operator =(const matrix<TYPE, ROW, COL>& m)
54 for (int i = 0; i < ROW; i++)
55 for (int j = 0; j < COL; j++)
56 m_mat[i][j] = m.m_mat[i][j];
61 T_R_C ostream& operator <<(ostream& dout, matrix<T, R, C>& m)
63 for (int i = 0; i < R; i++)
65 for (int j = 0; j < C; j++)
67 dout << m.m_mat[i][j] << "\t";
74 T_R_C matrix<T, R, C> operator +(const matrix<T, R, C> m1, const matrix<T, R, C> m2)
78 for (int i = 0; i < R; i++)
79 for (int j = 0; j < C; j++)
80 m3.m_mat[i][j] = m1.m_mat[i][j] + m2.m_mat[i][j];
85 T_R_C matrix<T, R, C> operator +(const matrix<T, R, C> m, const T val)
89 for (int i = 0; i < R; i++)
90 for (int j = 0; j < C; j++)
91 m1.m_mat[i][j] = m.m_mat[i][j] + val;
96 T_R_C matrix<T, R, C> operator -(const matrix<T, R, C> m1, const matrix<T, R, C> m2)
100 for (int i = 0; i < R; i++)
101 for (int j = 0; j < C; j++)
102 m3.m_mat[i][j] = m1.m_mat[i][j] - m2.m_mat[i][j];
107 T_R_C matrix<T, R, C> operator -(const matrix<T, R, C> m, const T val)
111 for (int i = 0; i < R; i++)
112 for (int j = 0; j < C; j++)
113 m1.m_mat[i][j] = m.m_mat[i][j] - val;
118 T_R_C_C2 matrix<T, R, C2> operator *(const matrix<T, R, C> m1, const matrix<T, C, C2> m2)
122 for (int i = 0; i < R; i++)
124 for (int j = 0; j < C2; j++)
127 for (int k = 0; k < C; k++)
128 m3.m_mat[i][j] += m1.m_mat[i][k] * m2.m_mat[k][j];
135 T_R_C matrix<T, R, C> operator *(const matrix<T, R, C> m, const T val)
139 for (int i = 0; i < R; i++)
140 for (int j = 0; j < C; j++)
141 m1.m_mat[i][j] = m.m_mat[i][j] * val;
146 T_R_C matrix<T, R, C> operator /(const matrix<T, R, C> m1, const T val)
150 for (int i = 0; i < R; i++)
151 for (int j = 0; j < C; j++)
152 m3.m_mat[i][j] = m1.m_mat[i][j] / val;
157 T_R1_C1_R2_C2 bool operator ==(const matrix<T, R1, C1> m1, const matrix<T, R2, C2> m2)
159 if ((R1 == R2) && (C1 == C2)) {
160 for (int i = 0; i < R1; i++)
161 for (int j = 0; j < C2; j++)
162 if (m1.m_mat[i][j] != m2.m_mat[i][j])
170 T_R1_C1_R2_C2 bool operator !=(const matrix<T, R1, C1> m1, const matrix<T, R2, C2> m2)
172 return (!(m1 == m2));
175 T_R_C matrix<T, R, C> tran(const matrix<T, R, C> m)
179 for (int i = 0; i < R; i++)
180 for (int j = 0; j < C; j++)
181 m1.m_mat[j][i] = m.m_mat[i][j];