nareshmlx/opencv-pr huggingface dataset:
**File:** modules/core/include/opencv2/core/mat.hpp
**Change Type:** modified
**Context:** PR #8616: dnn refactoring - **WIP** some changes in the core to assist refactoring of opencv_contrib's dnn module; see https://github.com/opencv/openc...
**Review Line:** 1727

**Code Changes:**
```diff
 
+    /** @brief Returns the total number of array elements.
+
+     The method returns the number of elements within a certain sub-array slice with startDim <= dim < endDim
+     */
+    size_t total(int startDim, int endDim=INT_MAX) const;
+
     //! returns N if the matrix is 1-channel (N x ptdim) or ptdim-channel (1 x N) or (N x 1); negative number otherwise
     int checkVector(int elemChannels, int depth=-1, bool requireContinuous=true) const;
 
```

Review comment:
`sliceSize` is no better than `total`, `sliceTotal` does not sound right either. The method is small, but may be useful when you operate on tensors, in dnn this method is used several times
**File:** modules/core/test/test_arithm.cpp
**Change Type:** modified
**Context:** PR #8779: resolves https://github.com/opencv/opencv/issues/7792 - replaces https://github.com/opencv/opencv/pull/7874
**Review Line:** 1920

**Code Changes:**
```diff
+
+TEST(Compare, empty)
+{
+    cv::Mat temp, dst1, dst2;
+    cv::compare(temp, temp, dst1, cv::CMP_EQ);
+    dst2 = temp > 5;
+
+    EXPECT_TRUE(dst1.empty());
+    EXPECT_TRUE(dst2.empty());
+}
```

Review comment:
I still believe that these cases are not normal, because most of them is a result of program logic error. So we should not eat such errors silently. See comment of original issue: https://github.com/opencv/opencv/issues/7792#issuecomment-265123281
**File:** modules/imgproc/src/smooth.cpp
**Change Type:** modified
**Context:** PR #7262: seriously improved performance of blur function, especially 3x3 and 5x5 cases - this commit temporarily disables IPP implementation of the b...

**Code Changes:**
```diff
@@ -86,18 +86,93 @@ struct RowSum :
         int i = 0, k, ksz_cn = ksize*cn;
 
         width = (width - 1)*cn;
-        for( k = 0; k < cn; k++, S++, D++ )
+        if( ksize == 3 )
+        {
+            for( i = 0; i < width + cn; i++ )
+            {
+                D[i] = (ST)(S[i] + S[i+cn] + S[i+cn*2]);
```

Review comment:
You should [use](https://github.com/opencv/opencv/search?utf8=%E2%9C%93&q=IPP_DISABLE_BLOCK) [IPP_DISABLE_BLOCK](https://github.com/opencv/opencv/blob/ca4b7e1e0fdd064ea39e14c7b9b51cae54db5dfe/modules/core/include/opencv2/core/private.hpp#L214) instead of 0 to disable IPP optimized code for performance or accuracy reason (but this code should be able to compile). It is useful to run all test cases with enabled IPP to track progress in case of updating IPPICV.
**File:** modules/core/include/opencv2/core/utility.hpp
**Change Type:** modified
**Context:** PR #9017: core: add an ability to use c++ 11 lambda expression as a parallel_for_ body

**Code Changes:**
```diff
@@ -56,6 +56,10 @@
 #include "opencv2/core.hpp"
 #include <ostream>
 
+#ifdef CV_CXX_11
+#include <functional>
+#endif
+
 namespace cv
 {
```

Review comment:
MSVC defines `__cplusplus` to 199711 Probably we should target for MSVS 2013+ too. Check [this condition](https://github.com/opencv/opencv/blob/master/modules/core/include/opencv2/core/cvdef.h#L366).
**File:** modules/core/include/opencv2/core/utility.hpp
**Change Type:** modified
**Context:** PR #9017: core: add an ability to use c++ 11 lambda expression as a parallel_for_ body

**Code Changes:**
```diff
@@ -56,6 +56,10 @@
 #include "opencv2/core.hpp"
 #include <ostream>
 
+#ifdef CV_CXX_11
+#include <functional>
+#endif
+
 namespace cv
 {
```

Review comment:
May be we should replace separate c++ 11 features detection with common `CV_CXX11` in `cvdef.h`
**File:** modules/core/include/opencv2/core/utility.hpp
**Change Type:** modified
**Context:** PR #9017: core: add an ability to use c++ 11 lambda expression as a parallel_for_ body

**Code Changes:**
```diff
@@ -56,6 +56,10 @@
 #include "opencv2/core.hpp"
 #include <ostream>
 
+#ifdef CV_CXX_11
+#include <functional>
+#endif
+
 namespace cv
 {
```

Review comment:
`#ifdef` should be used here with current macro implementation.
**File:** modules/core/src/copy.cpp
**Change Type:** modified
**Context:** PR #8988: core: forbid handling of the case when src=dst in cv::repeat

**Code Changes:**
```diff
@@ -856,6 +856,7 @@ void repeat(InputArray _src, int ny, int nx, OutputArray _dst)
 {
     CV_INSTRUMENT_REGION()
 
+    CV_Assert(_src.getObj() != _dst.getObj());
     CV_Assert( _src.dims() <= 2 );
     CV_Assert( ny > 0 && nx > 0 );
 
```

Review comment:
It is bad idea to fetch data into `cv::Mat` before `CV_OCL_RUN` statements.
**File:** modules/core/src/copy.cpp
**Change Type:** modified
**Context:** PR #8988: core: forbid handling of the case when src=dst in cv::repeat

**Code Changes:**
```diff
@@ -856,6 +856,7 @@ void repeat(InputArray _src, int ny, int nx, OutputArray _dst)
 {
     CV_INSTRUMENT_REGION()
 
+    CV_Assert(_src.getObj() != _dst.getObj());
     CV_Assert( _src.dims() <= 2 );
     CV_Assert( ny > 0 && nx > 0 );
 
```

Review comment:
`_dst.isUMat()` check is required for `CV_OCL_RUN` macro. Also OpenCL(UMat) path doesn't support "inplace" mode. Please take a look here: #8352 - it can't be resolved in general.
**File:** modules/core/include/opencv2/core/cuda.hpp
**Change Type:** modified
**Context:** PR #8404: Support for creating streams with custom allocator - The patch helps specify custom allocator for Stream, similar to GpuMat taking custom al...

**Code Changes:**
```diff
@@ -507,6 +507,9 @@ class CV_EXPORTS Stream
     //! creates a new asynchronous stream
     Stream();
 
+    //! creates a new asynchronous stream with custom allocator
+    Stream(const Ptr<GpuMat::Allocator>& allocator);
+
     /** @brief Returns true if the current stream queue is finished. Otherwise, it returns false.
     */
     bool queryIfComplete() const;
```

Review comment:
`const Ptr<GpuMat::Allocator>& allocator` ("const reference") should work too.
**File:** modules/core/src/cuda_stream.cpp
**Change Type:** modified
**Context:** PR #8404: Support for creating streams with custom allocator - The patch helps specify custom allocator for Stream, similar to GpuMat taking custom al...

**Code Changes:**
```diff
@@ -282,9 +282,10 @@ class cv::cuda::Stream::Impl
     cudaStream_t stream;
     bool ownStream;
 
-    Ptr<StackAllocator> stackAllocator;
+    Ptr<GpuMat::Allocator> allocator;
 
     Impl();
+    Impl(const Ptr<GpuMat::Allocator>& allocator);
     explicit Impl(cudaStream_t stream);
```

Review comment:
The same note about "const reference".
**File:** cmake/OpenCVFindMKL.cmake
**Change Type:** modified
**Context:** PR #8950: cmake: guard scanning of default MKL system-wide paths - - `WITH_MKL` option is enabled - user doesn't specify `MKLROOT`/`MKL_ROOT_DIR` vari...
**Review Line:** 55

**Code Changes:**
```diff
-        list(APPEND mkl_root_paths $ENV{MKLROOT})
+        list(APPEND mkl_root_paths "$ENV{MKLROOT}")
     endif()
-    if(WIN32)
+
+    if(WITH_MKL AND NOT mkl_root_paths)
+      if(WIN32)
         set(ProgramFilesx86 "ProgramFiles(x86)")
         list(APPEND mkl_root_paths $ENV{${ProgramFilesx86}}/IntelSWTools/compilers_and_libraries/windows/mkl)
-    endif()
-    if(UNIX)
```

Review comment:
Main change is here
**File:** modules/core/include/opencv2/core/hal/intrin_sse.hpp
**Change Type:** modified
**Context:** PR #8911: build: fix v_reduce_sum4 compilation (requires SSE3)

**Code Changes:**
```diff
@@ -1129,9 +1129,15 @@ OPENCV_HAL_IMPL_SSE_REDUCE_OP_4_SUM(v_float32x4, float, __m128, ps, _mm_castps_s
 inline v_float32x4 v_reduce_sum4(const v_float32x4& a, const v_float32x4& b,
                                  const v_float32x4& c, const v_float32x4& d)
 {
+#if CV_SSE3
     __m128 ab = _mm_hadd_ps(a.val, b.val);
     __m128 cd = _mm_hadd_ps(c.val, d.val);
     return v_float32x4(_mm_hadd_ps(ab, cd));
+#else
+    __m128 ac = _mm_add_ps(_mm_unpacklo_ps(a.val, c.val), _mm_unpackhi_ps(a.val, c.val));
```

Review comment:
let's make it more efficient: <pre> __m128 ac = _mm_add_ps(_mm_unpacklo_ps(a.val, c.val), _mm_unpackhi_ps(a.val, c.val)); __m128 bd = _mm_add_ps(_mm_unpacklo_ps(b.val, d.val), _mm_unpackhi_ps(b.val, d.val)); return v_float32x4(_mm_add_ps(_mm_unpacklo_ps(ac, bd), _mm_unpackhi_ps(ac, bd))); </pre>
**File:** modules/core/test/test_intrin.cpp
**Change Type:** modified
**Context:** PR #8911: build: fix v_reduce_sum4 compilation (requires SSE3)

**Code Changes:**
```diff
@@ -741,6 +741,23 @@ template<typename R> struct TheTest
         return *this;
     }
 
+    TheTest & test_reduce_sum4()
+    {
+        R a(0.1f, 0.02f, 0.003f, 0.0004f);
+        R b(1, 20, 300, 4000);
+        R c(10, 2, 0.3f, 0.04f);
+        R d(1, 2, 3, 4);
```

Review comment:
I think this loop is not needed here.
**File:** modules/imgproc/src/imgwarp.cpp
**Change Type:** modified
**Context:** PR #8843: AVX and SSE optimizations for resize NN - ### This pullrequest changes Added AVX and SSE4 optimizations to Nearest Neighbor resize implement...

**Code Changes:**
```diff
@@ -417,6 +417,300 @@ class resizeNNInvoker :
     resizeNNInvoker& operator=(const resizeNNInvoker&);
 };
 
+#if CV_AVX2
+class resizeNNInvokerAVX4 :
+    public ParallelLoopBody
+{
+public:
+    resizeNNInvokerAVX4(const Mat& _src, Mat &_dst, int *_x_ofs, int _pix_size4, double _ify) :
```

Review comment:
OpenCV includes CV_DECL_ALIGNED() macro that should be used instead of such conditional branches
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
make it classes softfloat32_t etc.
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
do not put constants into header files.
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
I think, we should support the only rounding mode; round_near_even (or maybe round_near_maxMag, whatever is the fastest)
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
this should probably be removed too; too much options
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
replace it with softfloat32_t etc. constructors
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
I suggest to declare a bunch of `saturate_cast<>`() operators instead of such conversions
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
we will have overloaded operators; we do not need functions-duplicates
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
same; we will have overloaded operators
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
Let's add isinf() and isnan() instead
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
let's declare exp(), log(), pow() without prefixes. C++ should find the proper implementation
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
please remove this from the external header
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
please remove the constant from the global header, make it local
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
please, remove the enumeration from the global header
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
remove this dummy inline function
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
move the macros to the .cpp file
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
let's rename softfloat32_t to softfloat, softfloat64_t to softdouble. they are easier to type and easier to read
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
use C++ "operator int () const"; etc. instead of methods with weird names. operator int() should truncate softfloat/softdouble to integers. there should be also round() function to convert softfloat/softdouble to the nearest-even integer
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
make it function, not method
**File:** modules/core/include/opencv2/core/softfloat.hpp
**Change Type:** added
**Context:** PR #8668: SoftFloat integrated - ### This PR changes [SoftFloat](http://www.jhauser.us/arithmetic/SoftFloat.html) is a software implementation of floa...

**Code Changes:**
```diff
@@ -0,0 +1,271 @@
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+//  By downloading, copying, installing or using the software you agree to this license.
+//  If you do not agree to this license, do not download, install,
+//  copy or use the software.
+//
+//
```

Review comment:
make the constructors explicit