mirror of
https://github.com/davisking/dlib.git
synced 2024-11-01 10:14:53 +08:00
Make assignment from a mat(ptr,rows,cols) faster.
This commit is contained in:
parent
8fc180545c
commit
52aaf01fb9
@ -448,6 +448,32 @@ namespace dlib
|
|||||||
return matrix_op<op>(op(ptr,nr,nc,stride));
|
return matrix_op<op>(op(ptr,nr,nc,stride));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <
|
||||||
|
typename T,
|
||||||
|
long NR,
|
||||||
|
long NC,
|
||||||
|
typename MM,
|
||||||
|
typename L
|
||||||
|
>
|
||||||
|
typename enable_if<std::is_trivially_copyable<T>>::type matrix_assign (
|
||||||
|
matrix<T,NR,NC,MM,L>& dest,
|
||||||
|
const matrix_exp<matrix_op<op_pointer_to_mat<T>>>& src
|
||||||
|
)
|
||||||
|
/*!
|
||||||
|
An overload to catch statements of the form:
|
||||||
|
some_matrix = mat(ptr,rows,cols)
|
||||||
|
and convert them into a memcpy(), which is a faster way to do the copy.
|
||||||
|
!*/
|
||||||
|
{
|
||||||
|
// If the op_pointer_to_mat is referring to a contiguous block of memory then just memcopy
|
||||||
|
// it.
|
||||||
|
if (dest.size() != 0 && src.ref().op.stride == dest.nc()) {
|
||||||
|
std::memcpy(&dest(0, 0), src.ref().op.ptr, dest.nr() * dest.nc() * sizeof(T));
|
||||||
|
} else {
|
||||||
|
matrix_assign_default(dest, src);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1420,6 +1420,17 @@ namespace
|
|||||||
DLIB_TEST(mm(3) == 4);
|
DLIB_TEST(mm(3) == 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const long n = 5;
|
||||||
|
matrix<double> m1, m2;
|
||||||
|
m1 = randm(n,n);
|
||||||
|
m2 = randm(n,n);
|
||||||
|
|
||||||
|
m2 = mat(&m1(0,0),n,n);
|
||||||
|
|
||||||
|
DLIB_TEST(m1 == m2);
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const long n = 5;
|
const long n = 5;
|
||||||
matrix<double> m1, m2, m3, truth;
|
matrix<double> m1, m2, m3, truth;
|
||||||
|
Loading…
Reference in New Issue
Block a user