Commit 4937eedd authored by Alexander Alekhin's avatar Alexander Alekhin

Merge pull request #12101 from miaow1988:dev-fix-mat-pushback

parents 80cab4a1 29882601
...@@ -602,13 +602,13 @@ void Mat::pop_back(size_t nelems) ...@@ -602,13 +602,13 @@ void Mat::pop_back(size_t nelems)
void Mat::push_back_(const void* elem) void Mat::push_back_(const void* elem)
{ {
int r = size.p[0]; size_t r = size.p[0];
if( isSubmatrix() || dataend + step.p[0] > datalimit ) if( isSubmatrix() || dataend + step.p[0] > datalimit )
reserve( std::max(r + 1, (r*3+1)/2) ); reserve( std::max(r + 1, (r*3+1)/2) );
size_t esz = elemSize(); size_t esz = elemSize();
memcpy(data + r*step.p[0], elem, esz); memcpy(data + r*step.p[0], elem, esz);
size.p[0] = r + 1; size.p[0] = int(r + 1);
dataend += step.p[0]; dataend += step.p[0];
uint64 tsz = size.p[0]; uint64 tsz = size.p[0];
for( int i = 1; i < dims; i++ ) for( int i = 1; i < dims; i++ )
...@@ -709,7 +709,8 @@ void Mat::resize(size_t nelems, const Scalar& s) ...@@ -709,7 +709,8 @@ void Mat::resize(size_t nelems, const Scalar& s)
void Mat::push_back(const Mat& elems) void Mat::push_back(const Mat& elems)
{ {
int r = size.p[0], delta = elems.size.p[0]; size_t r = size.p[0];
size_t delta = elems.size.p[0];
if( delta == 0 ) if( delta == 0 )
return; return;
if( this == &elems ) if( this == &elems )
...@@ -726,7 +727,7 @@ void Mat::push_back(const Mat& elems) ...@@ -726,7 +727,7 @@ void Mat::push_back(const Mat& elems)
size.p[0] = elems.size.p[0]; size.p[0] = elems.size.p[0];
bool eq = size == elems.size; bool eq = size == elems.size;
size.p[0] = r; size.p[0] = int(r);
if( !eq ) if( !eq )
CV_Error(CV_StsUnmatchedSizes, "Pushed vector length is not equal to matrix row length"); CV_Error(CV_StsUnmatchedSizes, "Pushed vector length is not equal to matrix row length");
if( type() != elems.type() ) if( type() != elems.type() )
...@@ -735,7 +736,7 @@ void Mat::push_back(const Mat& elems) ...@@ -735,7 +736,7 @@ void Mat::push_back(const Mat& elems)
if( isSubmatrix() || dataend + step.p[0]*delta > datalimit ) if( isSubmatrix() || dataend + step.p[0]*delta > datalimit )
reserve( std::max(r + delta, (r*3+1)/2) ); reserve( std::max(r + delta, (r*3+1)/2) );
size.p[0] += delta; size.p[0] += int(delta);
dataend += step.p[0]*delta; dataend += step.p[0]*delta;
//updateContinuityFlag(*this); //updateContinuityFlag(*this);
...@@ -744,7 +745,7 @@ void Mat::push_back(const Mat& elems) ...@@ -744,7 +745,7 @@ void Mat::push_back(const Mat& elems)
memcpy(data + r*step.p[0], elems.data, elems.total()*elems.elemSize()); memcpy(data + r*step.p[0], elems.data, elems.total()*elems.elemSize());
else else
{ {
Mat part = rowRange(r, r + delta); Mat part = rowRange(int(r), int(r + delta));
elems.copyTo(part); elems.copyTo(part);
} }
} }
......
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