Commit 8c349ff8 authored by Alexander Alekhin's avatar Alexander Alekhin

core: added MatSize::dims() method

to avoid accessing of 'p[-1]' (static code analysers dislike this)
parent 87a4f4ab
...@@ -265,10 +265,10 @@ std::ostream& operator << (std::ostream& out, const Rect_<_Tp>& rect) ...@@ -265,10 +265,10 @@ std::ostream& operator << (std::ostream& out, const Rect_<_Tp>& rect)
static inline std::ostream& operator << (std::ostream& out, const MatSize& msize) static inline std::ostream& operator << (std::ostream& out, const MatSize& msize)
{ {
int i, dims = msize.p[-1]; int i, dims = msize.dims();
for( i = 0; i < dims; i++ ) for( i = 0; i < dims; i++ )
{ {
out << msize.p[i]; out << msize[i];
if( i < dims-1 ) if( i < dims-1 )
out << " x "; out << " x ";
} }
......
...@@ -548,10 +548,11 @@ struct CV_EXPORTS UMatData ...@@ -548,10 +548,11 @@ struct CV_EXPORTS UMatData
struct CV_EXPORTS MatSize struct CV_EXPORTS MatSize
{ {
explicit MatSize(int* _p); explicit MatSize(int* _p);
int dims() const;
Size operator()() const; Size operator()() const;
const int& operator[](int i) const; const int& operator[](int i) const;
int& operator[](int i); int& operator[](int i);
operator const int*() const; operator const int*() const; // TODO OpenCV 4.0: drop this
bool operator == (const MatSize& sz) const; bool operator == (const MatSize& sz) const;
bool operator != (const MatSize& sz) const; bool operator != (const MatSize& sz) const;
......
...@@ -1411,22 +1411,36 @@ inline ...@@ -1411,22 +1411,36 @@ inline
MatSize::MatSize(int* _p) MatSize::MatSize(int* _p)
: p(_p) {} : p(_p) {}
inline
int MatSize::dims() const
{
return (p - 1)[0];
}
inline inline
Size MatSize::operator()() const Size MatSize::operator()() const
{ {
CV_DbgAssert(p[-1] <= 2); CV_DbgAssert(dims() <= 2);
return Size(p[1], p[0]); return Size(p[1], p[0]);
} }
inline inline
const int& MatSize::operator[](int i) const const int& MatSize::operator[](int i) const
{ {
CV_DbgAssert(i < dims());
#ifdef __OPENCV_BUILD
CV_DbgAssert(i >= 0);
#endif
return p[i]; return p[i];
} }
inline inline
int& MatSize::operator[](int i) int& MatSize::operator[](int i)
{ {
CV_DbgAssert(i < dims());
#ifdef __OPENCV_BUILD
CV_DbgAssert(i >= 0);
#endif
return p[i]; return p[i];
} }
...@@ -1439,8 +1453,8 @@ MatSize::operator const int*() const ...@@ -1439,8 +1453,8 @@ MatSize::operator const int*() const
inline inline
bool MatSize::operator == (const MatSize& sz) const bool MatSize::operator == (const MatSize& sz) const
{ {
int d = p[-1]; int d = dims();
int dsz = sz.p[-1]; int dsz = sz.dims();
if( d != dsz ) if( d != dsz )
return false; return false;
if( d == 2 ) if( d == 2 )
......
...@@ -134,7 +134,7 @@ static inline MatShape shape(const Mat& mat) ...@@ -134,7 +134,7 @@ static inline MatShape shape(const Mat& mat)
static inline MatShape shape(const MatSize& sz) static inline MatShape shape(const MatSize& sz)
{ {
return shape(sz.p, sz[-1]); return shape(sz.p, sz.dims());
} }
static inline MatShape shape(const UMat& mat) static inline MatShape shape(const UMat& mat)
......
...@@ -161,14 +161,14 @@ public: ...@@ -161,14 +161,14 @@ public:
for (int i = 0; i < outputs.size(); ++i) for (int i = 0; i < outputs.size(); ++i)
{ {
CV_Assert(sliceRanges[i].size() <= inpShape[-1]); CV_Assert(sliceRanges[i].size() <= inpShape.dims());
// Clamp. // Clamp.
for (int j = 0; j < sliceRanges[i].size(); ++j) for (int j = 0; j < sliceRanges[i].size(); ++j)
{ {
sliceRanges[i][j] = clamp(sliceRanges[i][j], inpShape[j]); sliceRanges[i][j] = clamp(sliceRanges[i][j], inpShape[j]);
} }
// Fill the rest of ranges. // Fill the rest of ranges.
for (int j = sliceRanges[i].size(); j < inpShape[-1]; ++j) for (int j = sliceRanges[i].size(); j < inpShape.dims(); ++j)
{ {
sliceRanges[i].push_back(Range::all()); sliceRanges[i].push_back(Range::all());
} }
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
// Third party copyrights are property of their respective owners. // Third party copyrights are property of their respective owners.
#include "precomp.hpp" #include "precomp.hpp"
#include <opencv2/dnn/shape_utils.hpp>
#include "op_halide.hpp" #include "op_halide.hpp"
#ifdef HAVE_HALIDE #ifdef HAVE_HALIDE
...@@ -36,7 +37,7 @@ static MatShape getBufferShape(const MatShape& shape) ...@@ -36,7 +37,7 @@ static MatShape getBufferShape(const MatShape& shape)
static MatShape getBufferShape(const MatSize& size) static MatShape getBufferShape(const MatSize& size)
{ {
return getBufferShape(MatShape(size.p, size.p + size[-1])); return getBufferShape(shape(size));
} }
Halide::Buffer<float> wrapToHalideBuffer(const Mat& mat) Halide::Buffer<float> wrapToHalideBuffer(const Mat& mat)
...@@ -160,7 +161,7 @@ void HalideBackendWrapper::setHostDirty() ...@@ -160,7 +161,7 @@ void HalideBackendWrapper::setHostDirty()
void getCanonicalSize(const MatSize& size, int* w, int* h, int* c, int* n) void getCanonicalSize(const MatSize& size, int* w, int* h, int* c, int* n)
{ {
getCanonicalSize(MatShape(size.p, size.p + size[-1]), w, h, c, n); getCanonicalSize(shape(size), w, h, c, n);
} }
void getCanonicalSize(const MatShape& shape, int* width, int* height, void getCanonicalSize(const MatShape& shape, int* width, int* height,
......
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