Merge pull request #9577 from mshabunin:const-foreach

This commit is contained in:
Vadim Pisarevsky 2017-09-07 11:12:45 +00:00
commit 4970a56341
2 changed files with 19 additions and 1 deletions

View File

@ -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

View File

@ -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