Commit 6b041c8a authored by Vadim Pisarevsky's avatar Vadim Pisarevsky

Merge pull request #11137 from alalek:core_fix_mat_ctor

parents 8388b630 4378e8fc
...@@ -577,11 +577,9 @@ Mat::Mat(const std::vector<_Tp>& vec, bool copyData) ...@@ -577,11 +577,9 @@ Mat::Mat(const std::vector<_Tp>& vec, bool copyData)
#ifdef CV_CXX11 #ifdef CV_CXX11
template<typename _Tp, typename> inline template<typename _Tp, typename> inline
Mat::Mat(const std::initializer_list<_Tp> list) Mat::Mat(const std::initializer_list<_Tp> list)
: flags(MAGIC_VAL | traits::Type<_Tp>::value | CV_MAT_CONT_FLAG), dims(2), rows((int)list.size()), : Mat()
cols(1), data(0), datastart(0), dataend(0), datalimit(0), allocator(0), u(0), size(&rows), step(0)
{ {
if(list.size() == 0) CV_Assert(list.size() != 0);
return;
Mat((int)list.size(), 1, traits::Type<_Tp>::value, (uchar*)list.begin()).copyTo(*this); Mat((int)list.size(), 1, traits::Type<_Tp>::value, (uchar*)list.begin()).copyTo(*this);
} }
...@@ -590,11 +588,11 @@ Mat::Mat(const std::initializer_list<int> sizes, const std::initializer_list<_Tp ...@@ -590,11 +588,11 @@ Mat::Mat(const std::initializer_list<int> sizes, const std::initializer_list<_Tp
: Mat() : Mat()
{ {
size_t size_total = 1; size_t size_total = 1;
int *sz = (int*)sizes.begin();
for(auto s : sizes) for(auto s : sizes)
size_total *= s; size_total *= s;
CV_Assert(list.size() != 0 || size_total == list.size()); CV_Assert(list.size() != 0);
Mat((int)sizes.size(), sz, traits::Type<_Tp>::value, (uchar*)list.begin()).copyTo(*this); CV_Assert(size_total == list.size());
Mat((int)sizes.size(), (int*)sizes.begin(), traits::Type<_Tp>::value, (uchar*)list.begin()).copyTo(*this);
} }
#endif #endif
......
...@@ -1724,6 +1724,10 @@ TEST(Mat, from_initializer_list) ...@@ -1724,6 +1724,10 @@ TEST(Mat, from_initializer_list)
ASSERT_DOUBLE_EQ(cvtest::norm(A, B, NORM_INF), 0.); ASSERT_DOUBLE_EQ(cvtest::norm(A, B, NORM_INF), 0.);
ASSERT_DOUBLE_EQ(cvtest::norm(A, C, NORM_INF), 0.); ASSERT_DOUBLE_EQ(cvtest::norm(A, C, NORM_INF), 0.);
ASSERT_DOUBLE_EQ(cvtest::norm(B, C, NORM_INF), 0.); ASSERT_DOUBLE_EQ(cvtest::norm(B, C, NORM_INF), 0.);
auto D = Mat_<double>({2, 3}, {1, 2, 3, 4, 5, 6});
EXPECT_EQ(2, D.rows);
EXPECT_EQ(3, D.cols);
} }
TEST(Mat_, from_initializer_list) TEST(Mat_, from_initializer_list)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment