diff --git a/src/lol/base/array.h b/src/lol/base/array.h index 655b0be8..2903bf8d 100644 --- a/src/lol/base/array.h +++ b/src/lol/base/array.h @@ -47,7 +47,7 @@ public: { } - inline ArrayBase(std::initializer_list list) + inline ArrayBase(std::initializer_list const &list) : m_data(0), m_count(0), m_reserved(0) diff --git a/src/lol/math/array2d.h b/src/lol/math/array2d.h index 4a7f10fe..07e55b0f 100644 --- a/src/lol/math/array2d.h +++ b/src/lol/math/array2d.h @@ -44,6 +44,17 @@ public: { } + inline Array2D(std::initializer_list< + std::initializer_list> const &list) + : m_size(list.size() ? (*list.begin()).size() : 0, + list.size()) + { + Super::Reserve(m_size.x * m_size.y); + for (auto l : list) + for (auto elem : l) + Super::Push(elem); + } + inline Array2D(int w, int h) { SetSize(ivec2(w, h)); diff --git a/src/lol/math/array3d.h b/src/lol/math/array3d.h index 391bec9c..444bbdae 100644 --- a/src/lol/math/array3d.h +++ b/src/lol/math/array3d.h @@ -44,6 +44,21 @@ public: { } + inline Array3D(std::initializer_list< + std::initializer_list< + std::initializer_list>> const &list) + : m_size(list.size() && (*list.begin()).size() ? + (*(*list.begin()).begin()).size() : 0, + list.size() ? (*list.begin()).size() : 0, + list.size()) + { + Super::Reserve(m_size.x * m_size.y * m_size.z); + for (auto ll : list) + for (auto l : ll) + for (auto elem : l) + Super::Push(elem); + } + inline Array3D(int w, int h, int d) { SetSize(ivec3(w, h, d)); diff --git a/test/unit/array2d.cpp b/test/unit/array2d.cpp index 22eead3b..4e32bb1e 100644 --- a/test/unit/array2d.cpp +++ b/test/unit/array2d.cpp @@ -45,6 +45,31 @@ LOLUNIT_FIXTURE(Array2DTest) LOLUNIT_ASSERT_EQUAL(b[0][9], 6); LOLUNIT_ASSERT_EQUAL(b[9][9], 8); } + + LOLUNIT_TEST(Array2DInit) + { + Array2D a = { { 1, 2, 3, 4 }, + { 5, 6, 7, 8 }, + { 9, 8, 7, 6 } }; + + LOLUNIT_ASSERT_EQUAL(a.GetSize().x, 4); + LOLUNIT_ASSERT_EQUAL(a.GetSize().y, 3); + + LOLUNIT_ASSERT_EQUAL(a[0][0], 1); + LOLUNIT_ASSERT_EQUAL(a[1][0], 2); + LOLUNIT_ASSERT_EQUAL(a[2][0], 3); + LOLUNIT_ASSERT_EQUAL(a[3][0], 4); + + LOLUNIT_ASSERT_EQUAL(a[0][1], 5); + LOLUNIT_ASSERT_EQUAL(a[1][1], 6); + LOLUNIT_ASSERT_EQUAL(a[2][1], 7); + LOLUNIT_ASSERT_EQUAL(a[3][1], 8); + + LOLUNIT_ASSERT_EQUAL(a[0][2], 9); + LOLUNIT_ASSERT_EQUAL(a[1][2], 8); + LOLUNIT_ASSERT_EQUAL(a[2][2], 7); + LOLUNIT_ASSERT_EQUAL(a[3][2], 6); + } }; } /* namespace lol */ diff --git a/test/unit/array3d.cpp b/test/unit/array3d.cpp index 727e3e3e..198f60f3 100644 --- a/test/unit/array3d.cpp +++ b/test/unit/array3d.cpp @@ -45,6 +45,50 @@ LOLUNIT_FIXTURE(Array3DTest) LOLUNIT_ASSERT_EQUAL(b[0][9][9], 6); LOLUNIT_ASSERT_EQUAL(b[9][9][9], 8); } + + LOLUNIT_TEST(Array3DInit) + { + Array3D a = { { { 1, 2, 3, 4 }, + { 5, 6, 7, 8 }, + { 9, 8, 7, 6 } }, + { { -1, -2, -3, -4 }, + { -5, -6, -7, -8 }, + { -9, -8, -7, -6 } } }; + + LOLUNIT_ASSERT_EQUAL(a.GetSize().x, 4); + LOLUNIT_ASSERT_EQUAL(a.GetSize().y, 3); + LOLUNIT_ASSERT_EQUAL(a.GetSize().z, 2); + + LOLUNIT_ASSERT_EQUAL(a[0][0][0], 1); + LOLUNIT_ASSERT_EQUAL(a[1][0][0], 2); + LOLUNIT_ASSERT_EQUAL(a[2][0][0], 3); + LOLUNIT_ASSERT_EQUAL(a[3][0][0], 4); + + LOLUNIT_ASSERT_EQUAL(a[0][1][0], 5); + LOLUNIT_ASSERT_EQUAL(a[1][1][0], 6); + LOLUNIT_ASSERT_EQUAL(a[2][1][0], 7); + LOLUNIT_ASSERT_EQUAL(a[3][1][0], 8); + + LOLUNIT_ASSERT_EQUAL(a[0][2][0], 9); + LOLUNIT_ASSERT_EQUAL(a[1][2][0], 8); + LOLUNIT_ASSERT_EQUAL(a[2][2][0], 7); + LOLUNIT_ASSERT_EQUAL(a[3][2][0], 6); + + LOLUNIT_ASSERT_EQUAL(a[0][0][1], -1); + LOLUNIT_ASSERT_EQUAL(a[1][0][1], -2); + LOLUNIT_ASSERT_EQUAL(a[2][0][1], -3); + LOLUNIT_ASSERT_EQUAL(a[3][0][1], -4); + + LOLUNIT_ASSERT_EQUAL(a[0][1][1], -5); + LOLUNIT_ASSERT_EQUAL(a[1][1][1], -6); + LOLUNIT_ASSERT_EQUAL(a[2][1][1], -7); + LOLUNIT_ASSERT_EQUAL(a[3][1][1], -8); + + LOLUNIT_ASSERT_EQUAL(a[0][2][1], -9); + LOLUNIT_ASSERT_EQUAL(a[1][2][1], -8); + LOLUNIT_ASSERT_EQUAL(a[2][2][1], -7); + LOLUNIT_ASSERT_EQUAL(a[3][2][1], -6); + } }; } /* namespace lol */