1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-30 07:43:03 +04:00

Merge pull request #9017 from sovrasov:parallel_for_cxx11

This commit is contained in:
Vadim Pisarevsky
2017-06-29 11:12:57 +00:00
4 changed files with 71 additions and 1 deletions
+14
View File
@@ -354,6 +354,20 @@ Cv64suf;
#endif
/****************************************************************************************\
* C++ 11 *
\****************************************************************************************/
#ifndef CV_CXX_11
# if __cplusplus >= 201103L || defined(_MSC_VER) && _MSC_VER >= 1600
# define CV_CXX_11 1
# endif
#else
# if CV_CXX_11 == 0
# undef CV_CXX_11
# endif
#endif
/****************************************************************************************\
* C++ Move semantics *
\****************************************************************************************/
@@ -56,6 +56,10 @@
#include "opencv2/core.hpp"
#include <ostream>
#ifdef CV_CXX_11
#include <functional>
#endif
namespace cv
{
@@ -478,6 +482,28 @@ public:
*/
CV_EXPORTS void parallel_for_(const Range& range, const ParallelLoopBody& body, double nstripes=-1.);
#ifdef CV_CXX_11
class ParallelLoopBodyLambdaWrapper : public ParallelLoopBody
{
private:
std::function<void(const Range&)> m_functor;
public:
ParallelLoopBodyLambdaWrapper(std::function<void(const Range&)> functor) :
m_functor(functor)
{ }
virtual void operator() (const cv::Range& range) const
{
m_functor(range);
}
};
inline void parallel_for_(const Range& range, std::function<void(const Range&)> functor, double nstripes=-1.)
{
parallel_for_(range, ParallelLoopBodyLambdaWrapper(functor), nstripes);
}
#endif
/////////////////////////////// forEach method of cv::Mat ////////////////////////////
template<typename _Tp, typename Functor> inline
void Mat::forEach_impl(const Functor& operation) {