Skip to content

Commit aec22a8

Browse files
committed
removed my beautiful subscripts
1 parent eb81819 commit aec22a8

2 files changed

Lines changed: 31 additions & 48 deletions

File tree

ZEngine/ZEngine/Core/Maths/Matrix.h

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,18 @@ namespace ZEngine::Core::Maths
66
template <typename T, size_t R, size_t C, typename = std::enable_if_t<std::is_arithmetic_v<T> && (R >= 1) && (C >= 1)>>
77
struct Matrix
88
{
9-
T m_data[R * C];
9+
T m_data[R * C];
1010

11-
struct RowProxy
11+
T& operator()(size_t row, size_t col)
1212
{
13-
T* row_data;
14-
15-
T& operator[](size_t col)
16-
{
17-
ZENGINE_VALIDATE_ASSERT(col < C, "Column index out of range");
18-
return row_data[col];
19-
}
20-
21-
const T& operator[](size_t col) const
22-
{
23-
ZENGINE_VALIDATE_ASSERT(col < C, "Column index out of range");
24-
return row_data[col];
25-
}
26-
};
27-
28-
RowProxy operator[](size_t row)
29-
{
30-
ZENGINE_VALIDATE_ASSERT(row < R, "Row index out of range");
31-
return RowProxy{&m_data[row * C]};
13+
ZENGINE_VALIDATE_ASSERT(row < R && col < C, "Index out of range");
14+
return m_data[row * C + col];
3215
}
3316

34-
const RowProxy operator[](size_t row) const
17+
const T& operator()(size_t row, size_t col) const
3518
{
36-
ZENGINE_VALIDATE_ASSERT(row < R, "Row index out of range");
37-
return RowProxy{const_cast<T*>(&m_data[row * C])};
19+
ZENGINE_VALIDATE_ASSERT(row < R && col < C, "Index out of range");
20+
return m_data[row * C + col];
3821
}
3922

4023
Matrix<T, R, C> operator+(Matrix<T, R, C>& other)
@@ -489,9 +472,9 @@ namespace ZEngine::Core::Maths
489472
T sum = T{};
490473
for (size_t k = 0; k < K; ++k)
491474
{
492-
sum += a[i][k] * b[k][j];
475+
sum += a(i, k) * b(k, j);
493476
}
494-
result[i][j] = sum;
477+
result(i, j) = sum;
495478
}
496479
}
497480
return result;

ZEngine/tests/Maths/Matrix_test.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,40 +8,40 @@ constexpr float EPSILON = 1e-5f;
88
TEST(MatrixTest, ConstructionAndIndexingFloat)
99
{
1010
Mat2f m2(1.1f, 2.2f, 3.3f, 4.4f);
11-
EXPECT_NEAR(m2[0][0], 1.1f, EPSILON);
12-
EXPECT_NEAR(m2[0][1], 2.2f, EPSILON);
13-
EXPECT_NEAR(m2[1][0], 3.3f, EPSILON);
14-
EXPECT_NEAR(m2[1][1], 4.4f, EPSILON);
11+
EXPECT_NEAR(m2(0, 0), 1.1f, EPSILON);
12+
EXPECT_NEAR(m2(0,1), 2.2f, EPSILON);
13+
EXPECT_NEAR(m2(1,0), 3.3f, EPSILON);
14+
EXPECT_NEAR(m2(1,1), 4.4f, EPSILON);
1515

1616
Mat3f m3(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f);
17-
EXPECT_NEAR(m3[0][0], 1.0f, EPSILON);
18-
EXPECT_NEAR(m3[1][1], 5.0f, EPSILON);
19-
EXPECT_NEAR(m3[2][2], 9.0f, EPSILON);
17+
EXPECT_NEAR(m3(0,0), 1.0f, EPSILON);
18+
EXPECT_NEAR(m3(1,1), 5.0f, EPSILON);
19+
EXPECT_NEAR(m3(2,2), 9.0f, EPSILON);
2020

2121
Mat4f m4(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f);
22-
EXPECT_NEAR(m4[0][0], 1.0f, EPSILON);
23-
EXPECT_NEAR(m4[1][2], 7.0f, EPSILON);
24-
EXPECT_NEAR(m4[3][3], 16.0f, EPSILON);
22+
EXPECT_NEAR(m4(0,0), 1.0f, EPSILON);
23+
EXPECT_NEAR(m4(1,2), 7.0f, EPSILON);
24+
EXPECT_NEAR(m4(3,3), 16.0f, EPSILON);
2525
}
2626

2727
TEST(MatrixTest, ArithmeticOpsFloat)
2828
{
2929
Mat2f a2(1, 2, 3, 4);
3030
Mat2f b2(0.5f, 0.5f, 0.5f, 0.5f);
3131
Mat2f c2 = a2 + b2;
32-
EXPECT_NEAR(c2[0][0], 1.5f, EPSILON);
33-
EXPECT_NEAR(c2[1][1], 4.5f, EPSILON);
32+
EXPECT_NEAR(c2(0,0), 1.5f, EPSILON);
33+
EXPECT_NEAR(c2(1,1), 4.5f, EPSILON);
3434

3535
Mat2f d2 = a2 * 2.0f;
36-
EXPECT_NEAR(d2[0][1], 4.0f, EPSILON);
36+
EXPECT_NEAR(d2(0,1), 4.0f, EPSILON);
3737
Mat2f e2 = a2 / 2.0f;
38-
EXPECT_NEAR(e2[1][0], 1.5f, EPSILON);
38+
EXPECT_NEAR(e2(1,0), 1.5f, EPSILON);
3939

4040
Mat3f a3(1, 2, 3, 4, 5, 6, 7, 8, 9);
4141
Mat3f b3(9, 8, 7, 6, 5, 4, 3, 2, 1);
4242
Mat3f c3 = a3 + b3;
43-
EXPECT_NEAR(c3[0][0], 10.0f, EPSILON);
44-
EXPECT_NEAR(c3[2][2], 10.0f, EPSILON);
43+
EXPECT_NEAR(c3(0,0), 10.0f, EPSILON);
44+
EXPECT_NEAR(c3(2,2), 10.0f, EPSILON);
4545
}
4646

4747
TEST(MatrixTest, DeterminantFloat)
@@ -64,15 +64,15 @@ TEST(MatrixTest, Identity)
6464

6565
for (int i = 0; i < 2; ++i)
6666
for (int j = 0; j < 2; ++j)
67-
EXPECT_NEAR(I2[i][j], (i == j ? 1.0f : 0.0f), EPSILON);
67+
EXPECT_NEAR(I2(i,j), (i == j ? 1.0f : 0.0f), EPSILON);
6868

6969
for (int i = 0; i < 3; ++i)
7070
for (int j = 0; j < 3; ++j)
71-
EXPECT_NEAR(I3[i][j], (i == j ? 1.0f : 0.0f), EPSILON);
71+
EXPECT_NEAR(I3(i,j), (i == j ? 1.0f : 0.0f), EPSILON);
7272

7373
for (int i = 0; i < 4; ++i)
7474
for (int j = 0; j < 4; ++j)
75-
EXPECT_NEAR(I4[i][j], (i == j ? 1.0f : 0.0f), EPSILON);
75+
EXPECT_NEAR(I4(i,j), (i == j ? 1.0f : 0.0f), EPSILON);
7676
}
7777

7878
TEST(MatrixTest, Inverse)
@@ -82,19 +82,19 @@ TEST(MatrixTest, Inverse)
8282
Mat2f shouldBeIdentity2 = m2 * inv2;
8383
for (int i = 0; i < 2; ++i)
8484
for (int j = 0; j < 2; ++j)
85-
EXPECT_NEAR(shouldBeIdentity2[i][j], (i == j ? 1.0f : 0.0f), EPSILON);
85+
EXPECT_NEAR(shouldBeIdentity2(i,j), (i == j ? 1.0f : 0.0f), EPSILON);
8686

8787
Mat3f m3(1, 2, 3, 0, 1, 4, 5, 6, 0);
8888
Mat3f inv3 = m3.Inverse();
8989
Mat3f shouldBeIdentity3 = m3 * inv3;
9090
for (int i = 0; i < 3; ++i)
9191
for (int j = 0; j < 3; ++j)
92-
EXPECT_NEAR(shouldBeIdentity3[i][j], (i == j ? 1.0f : 0.0f), EPSILON);
92+
EXPECT_NEAR(shouldBeIdentity3(i,j), (i == j ? 1.0f : 0.0f), EPSILON);
9393

9494
Mat4f m4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
9595
Mat4f inv4 = m4.Inverse();
9696
Mat4f shouldBeIdentity4 = m4 * inv4;
9797
for (int i = 0; i < 4; ++i)
9898
for (int j = 0; j < 4; ++j)
99-
EXPECT_NEAR(shouldBeIdentity4[i][j], (i == j ? 1.0f : 0.0f), EPSILON);
99+
EXPECT_NEAR(shouldBeIdentity4(i,j), (i == j ? 1.0f : 0.0f), EPSILON);
100100
}

0 commit comments

Comments
 (0)