Enabled forEach for const Mats

pull/9577/head
Maksim Shabunin 7 years ago
parent 2ac57a2b1f
commit c92c99ed0b
  1. 2
      modules/core/include/opencv2/core/mat.inl.hpp
  2. 18
      modules/core/test/test_mat.cpp

@ -1214,7 +1214,7 @@ void Mat::forEach(const Functor& operation) {
template<typename _Tp, typename Functor> inline
void Mat::forEach(const Functor& operation) const {
// call as not const
(const_cast<Mat*>(this))->forEach<const _Tp>(operation);
(const_cast<Mat*>(this))->forEach<_Tp>(operation);
}
template<typename _Tp> inline

@ -671,6 +671,13 @@ struct InitializerFunctor5D{
}
};
template<typename Pixel>
struct EmptyFunctor
{
void operator()(const Pixel &, const int *) const {}
};
void Core_ArrayOpTest::run( int /* start_from */)
{
int errcount = 0;
@ -799,6 +806,17 @@ void Core_ArrayOpTest::run( int /* start_from */)
}
}
// test const cv::Mat::forEach
{
const Mat a(10, 10, CV_32SC3);
Mat b(10, 10, CV_32SC3);
const Mat & c = b;
a.forEach<Point3i>(EmptyFunctor<Point3i>());
b.forEach<Point3i>(EmptyFunctor<const Point3i>());
c.forEach<Point3i>(EmptyFunctor<Point3i>());
// tests compilation, no runtime check is needed
}
RNG rng;
const int MAX_DIM = 5, MAX_DIM_SZ = 10;
// sparse matrix operations

Loading…
Cancel
Save