Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
D
dlib
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
钟尚武
dlib
Commits
5ecd904d
Commit
5ecd904d
authored
Jul 22, 2016
by
Davis King
Browse files
Options
Browse Files
Download
Plain Diff
merged
parents
cf321559
fd6db821
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
339 additions
and
294 deletions
+339
-294
cmake_mex_wrapper
dlib/matlab/cmake_mex_wrapper
+1
-1
mex_wrapper.cpp
dlib/matlab/mex_wrapper.cpp
+215
-215
subprocess_stream.cpp
dlib/matlab/subprocess_stream.cpp
+13
-2
matrix.h
dlib/matrix/matrix.h
+8
-8
matrix_data_layout.h
dlib/matrix/matrix_data_layout.h
+102
-68
No files found.
dlib/matlab/cmake_mex_wrapper
View file @
5ecd904d
...
...
@@ -54,7 +54,7 @@ INCLUDE_DIRECTORIES("${dlib_matlab_binding_path}")
# Also add dlib to the include search path
INCLUDE_DIRECTORIES(${dlib_matlab_binding_path}/../..)
include(${dlib_matlab_binding_path}/../add_global_compiler_switch.cmake)
include(${dlib_matlab_binding_path}/../
cmake_utils/
add_global_compiler_switch.cmake)
add_global_define(MATLAB_MEX_FILE)
# Determine the path to our CMakeLists.txt file. This is the file that
...
...
dlib/matlab/mex_wrapper.cpp
View file @
5ecd904d
...
...
@@ -1044,7 +1044,7 @@ namespace mex_binding
matrix_colmajor
&
item
)
{
if
(
!
item
.
_private_is_persistent
())
if
(
item
.
_private_is_owned_by_matlab
())
{
// Don't need to do a copy if it's this kind of matrix since we can just
// pull the underlying mxArray out directly and thus avoid a copy.
...
...
@@ -1065,7 +1065,7 @@ namespace mex_binding
fmatrix_colmajor
&
item
)
{
if
(
!
item
.
_private_is_persistent
())
if
(
item
.
_private_is_owned_by_matlab
())
{
// Don't need to do a copy if it's this kind of matrix since we can just
// pull the underlying mxArray out directly and thus avoid a copy.
...
...
@@ -1152,10 +1152,10 @@ namespace mex_binding
// ----------------------------------------------------------------------------------------
template
<
typename
T
>
void
mark_
non_persistent
(
const
T
&
){}
void
mark_
owned_by_matlab
(
const
T
&
){}
void
mark_
non_persistent
(
matrix_colmajor
&
item
)
{
item
.
_private_mark_non_persistent
();
}
void
mark_
non_persistent
(
fmatrix_colmajor
&
item
)
{
item
.
_private_mark_non_persistent
();
}
void
mark_
owned_by_matlab
(
matrix_colmajor
&
item
)
{
item
.
_private_mark_owned_by_matlab
();
}
void
mark_
owned_by_matlab
(
fmatrix_colmajor
&
item
)
{
item
.
_private_mark_owned_by_matlab
();
}
// ----------------------------------------------------------------------------------------
...
...
@@ -1178,7 +1178,7 @@ namespace mex_binding
typename
basic_type
<
arg1_type
>::
type
A1
;
mark_
non_persistent
(
A1
);
mark_
owned_by_matlab
(
A1
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -1206,8 +1206,8 @@ namespace mex_binding
typename
basic_type
<
arg1_type
>::
type
A1
;
typename
basic_type
<
arg2_type
>::
type
A2
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -1239,9 +1239,9 @@ namespace mex_binding
typename
basic_type
<
arg2_type
>::
type
A2
;
typename
basic_type
<
arg3_type
>::
type
A3
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -1277,10 +1277,10 @@ namespace mex_binding
typename
basic_type
<
arg3_type
>::
type
A3
;
typename
basic_type
<
arg4_type
>::
type
A4
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -1321,11 +1321,11 @@ namespace mex_binding
typename
basic_type
<
arg4_type
>::
type
A4
;
typename
basic_type
<
arg5_type
>::
type
A5
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -1371,12 +1371,12 @@ namespace mex_binding
typename
basic_type
<
arg5_type
>::
type
A5
;
typename
basic_type
<
arg6_type
>::
type
A6
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
non_persistent
(
A6
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
mark_
owned_by_matlab
(
A6
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -1426,13 +1426,13 @@ namespace mex_binding
typename
basic_type
<
arg6_type
>::
type
A6
;
typename
basic_type
<
arg7_type
>::
type
A7
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
non_persistent
(
A6
);
mark_
non_persistent
(
A7
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
mark_
owned_by_matlab
(
A6
);
mark_
owned_by_matlab
(
A7
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -1486,14 +1486,14 @@ namespace mex_binding
typename
basic_type
<
arg7_type
>::
type
A7
;
typename
basic_type
<
arg8_type
>::
type
A8
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
non_persistent
(
A6
);
mark_
non_persistent
(
A7
);
mark_
non_persistent
(
A8
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
mark_
owned_by_matlab
(
A6
);
mark_
owned_by_matlab
(
A7
);
mark_
owned_by_matlab
(
A8
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -1551,15 +1551,15 @@ namespace mex_binding
typename
basic_type
<
arg8_type
>::
type
A8
;
typename
basic_type
<
arg9_type
>::
type
A9
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
non_persistent
(
A6
);
mark_
non_persistent
(
A7
);
mark_
non_persistent
(
A8
);
mark_
non_persistent
(
A9
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
mark_
owned_by_matlab
(
A6
);
mark_
owned_by_matlab
(
A7
);
mark_
owned_by_matlab
(
A8
);
mark_
owned_by_matlab
(
A9
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -1622,16 +1622,16 @@ namespace mex_binding
typename
basic_type
<
arg9_type
>::
type
A9
;
typename
basic_type
<
arg10_type
>::
type
A10
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
non_persistent
(
A6
);
mark_
non_persistent
(
A7
);
mark_
non_persistent
(
A8
);
mark_
non_persistent
(
A9
);
mark_
non_persistent
(
A10
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
mark_
owned_by_matlab
(
A6
);
mark_
owned_by_matlab
(
A7
);
mark_
owned_by_matlab
(
A8
);
mark_
owned_by_matlab
(
A9
);
mark_
owned_by_matlab
(
A10
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -1696,17 +1696,17 @@ namespace mex_binding
typename
basic_type
<
arg10_type
>::
type
A10
;
typename
basic_type
<
arg11_type
>::
type
A11
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
non_persistent
(
A6
);
mark_
non_persistent
(
A7
);
mark_
non_persistent
(
A8
);
mark_
non_persistent
(
A9
);
mark_
non_persistent
(
A10
);
mark_
non_persistent
(
A11
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
mark_
owned_by_matlab
(
A6
);
mark_
owned_by_matlab
(
A7
);
mark_
owned_by_matlab
(
A8
);
mark_
owned_by_matlab
(
A9
);
mark_
owned_by_matlab
(
A10
);
mark_
owned_by_matlab
(
A11
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -1775,18 +1775,18 @@ namespace mex_binding
typename
basic_type
<
arg11_type
>::
type
A11
;
typename
basic_type
<
arg12_type
>::
type
A12
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
non_persistent
(
A6
);
mark_
non_persistent
(
A7
);
mark_
non_persistent
(
A8
);
mark_
non_persistent
(
A9
);
mark_
non_persistent
(
A10
);
mark_
non_persistent
(
A11
);
mark_
non_persistent
(
A12
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
mark_
owned_by_matlab
(
A6
);
mark_
owned_by_matlab
(
A7
);
mark_
owned_by_matlab
(
A8
);
mark_
owned_by_matlab
(
A9
);
mark_
owned_by_matlab
(
A10
);
mark_
owned_by_matlab
(
A11
);
mark_
owned_by_matlab
(
A12
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -1859,19 +1859,19 @@ namespace mex_binding
typename
basic_type
<
arg12_type
>::
type
A12
;
typename
basic_type
<
arg13_type
>::
type
A13
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
non_persistent
(
A6
);
mark_
non_persistent
(
A7
);
mark_
non_persistent
(
A8
);
mark_
non_persistent
(
A9
);
mark_
non_persistent
(
A10
);
mark_
non_persistent
(
A11
);
mark_
non_persistent
(
A12
);
mark_
non_persistent
(
A13
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
mark_
owned_by_matlab
(
A6
);
mark_
owned_by_matlab
(
A7
);
mark_
owned_by_matlab
(
A8
);
mark_
owned_by_matlab
(
A9
);
mark_
owned_by_matlab
(
A10
);
mark_
owned_by_matlab
(
A11
);
mark_
owned_by_matlab
(
A12
);
mark_
owned_by_matlab
(
A13
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -1948,20 +1948,20 @@ namespace mex_binding
typename
basic_type
<
arg13_type
>::
type
A13
;
typename
basic_type
<
arg14_type
>::
type
A14
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
non_persistent
(
A6
);
mark_
non_persistent
(
A7
);
mark_
non_persistent
(
A8
);
mark_
non_persistent
(
A9
);
mark_
non_persistent
(
A10
);
mark_
non_persistent
(
A11
);
mark_
non_persistent
(
A12
);
mark_
non_persistent
(
A13
);
mark_
non_persistent
(
A14
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
mark_
owned_by_matlab
(
A6
);
mark_
owned_by_matlab
(
A7
);
mark_
owned_by_matlab
(
A8
);
mark_
owned_by_matlab
(
A9
);
mark_
owned_by_matlab
(
A10
);
mark_
owned_by_matlab
(
A11
);
mark_
owned_by_matlab
(
A12
);
mark_
owned_by_matlab
(
A13
);
mark_
owned_by_matlab
(
A14
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -2042,21 +2042,21 @@ namespace mex_binding
typename
basic_type
<
arg14_type
>::
type
A14
;
typename
basic_type
<
arg15_type
>::
type
A15
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
non_persistent
(
A6
);
mark_
non_persistent
(
A7
);
mark_
non_persistent
(
A8
);
mark_
non_persistent
(
A9
);
mark_
non_persistent
(
A10
);
mark_
non_persistent
(
A11
);
mark_
non_persistent
(
A12
);
mark_
non_persistent
(
A13
);
mark_
non_persistent
(
A14
);
mark_
non_persistent
(
A15
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
mark_
owned_by_matlab
(
A6
);
mark_
owned_by_matlab
(
A7
);
mark_
owned_by_matlab
(
A8
);
mark_
owned_by_matlab
(
A9
);
mark_
owned_by_matlab
(
A10
);
mark_
owned_by_matlab
(
A11
);
mark_
owned_by_matlab
(
A12
);
mark_
owned_by_matlab
(
A13
);
mark_
owned_by_matlab
(
A14
);
mark_
owned_by_matlab
(
A15
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -2141,22 +2141,22 @@ namespace mex_binding
typename
basic_type
<
arg15_type
>::
type
A15
;
typename
basic_type
<
arg16_type
>::
type
A16
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
non_persistent
(
A6
);
mark_
non_persistent
(
A7
);
mark_
non_persistent
(
A8
);
mark_
non_persistent
(
A9
);
mark_
non_persistent
(
A10
);
mark_
non_persistent
(
A11
);
mark_
non_persistent
(
A12
);
mark_
non_persistent
(
A13
);
mark_
non_persistent
(
A14
);
mark_
non_persistent
(
A15
);
mark_
non_persistent
(
A16
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
mark_
owned_by_matlab
(
A6
);
mark_
owned_by_matlab
(
A7
);
mark_
owned_by_matlab
(
A8
);
mark_
owned_by_matlab
(
A9
);
mark_
owned_by_matlab
(
A10
);
mark_
owned_by_matlab
(
A11
);
mark_
owned_by_matlab
(
A12
);
mark_
owned_by_matlab
(
A13
);
mark_
owned_by_matlab
(
A14
);
mark_
owned_by_matlab
(
A15
);
mark_
owned_by_matlab
(
A16
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -2245,23 +2245,23 @@ namespace mex_binding
typename
basic_type
<
arg16_type
>::
type
A16
;
typename
basic_type
<
arg17_type
>::
type
A17
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
non_persistent
(
A6
);
mark_
non_persistent
(
A7
);
mark_
non_persistent
(
A8
);
mark_
non_persistent
(
A9
);
mark_
non_persistent
(
A10
);
mark_
non_persistent
(
A11
);
mark_
non_persistent
(
A12
);
mark_
non_persistent
(
A13
);
mark_
non_persistent
(
A14
);
mark_
non_persistent
(
A15
);
mark_
non_persistent
(
A16
);
mark_
non_persistent
(
A17
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
mark_
owned_by_matlab
(
A6
);
mark_
owned_by_matlab
(
A7
);
mark_
owned_by_matlab
(
A8
);
mark_
owned_by_matlab
(
A9
);
mark_
owned_by_matlab
(
A10
);
mark_
owned_by_matlab
(
A11
);
mark_
owned_by_matlab
(
A12
);
mark_
owned_by_matlab
(
A13
);
mark_
owned_by_matlab
(
A14
);
mark_
owned_by_matlab
(
A15
);
mark_
owned_by_matlab
(
A16
);
mark_
owned_by_matlab
(
A17
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -2354,24 +2354,24 @@ namespace mex_binding
typename
basic_type
<
arg17_type
>::
type
A17
;
typename
basic_type
<
arg18_type
>::
type
A18
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
non_persistent
(
A6
);
mark_
non_persistent
(
A7
);
mark_
non_persistent
(
A8
);
mark_
non_persistent
(
A9
);
mark_
non_persistent
(
A10
);
mark_
non_persistent
(
A11
);
mark_
non_persistent
(
A12
);
mark_
non_persistent
(
A13
);
mark_
non_persistent
(
A14
);
mark_
non_persistent
(
A15
);
mark_
non_persistent
(
A16
);
mark_
non_persistent
(
A17
);
mark_
non_persistent
(
A18
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
mark_
owned_by_matlab
(
A6
);
mark_
owned_by_matlab
(
A7
);
mark_
owned_by_matlab
(
A8
);
mark_
owned_by_matlab
(
A9
);
mark_
owned_by_matlab
(
A10
);
mark_
owned_by_matlab
(
A11
);
mark_
owned_by_matlab
(
A12
);
mark_
owned_by_matlab
(
A13
);
mark_
owned_by_matlab
(
A14
);
mark_
owned_by_matlab
(
A15
);
mark_
owned_by_matlab
(
A16
);
mark_
owned_by_matlab
(
A17
);
mark_
owned_by_matlab
(
A18
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -2468,25 +2468,25 @@ namespace mex_binding
typename
basic_type
<
arg18_type
>::
type
A18
;
typename
basic_type
<
arg19_type
>::
type
A19
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
non_persistent
(
A6
);
mark_
non_persistent
(
A7
);
mark_
non_persistent
(
A8
);
mark_
non_persistent
(
A9
);
mark_
non_persistent
(
A10
);
mark_
non_persistent
(
A11
);
mark_
non_persistent
(
A12
);
mark_
non_persistent
(
A13
);
mark_
non_persistent
(
A14
);
mark_
non_persistent
(
A15
);
mark_
non_persistent
(
A16
);
mark_
non_persistent
(
A17
);
mark_
non_persistent
(
A18
);
mark_
non_persistent
(
A19
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
mark_
owned_by_matlab
(
A6
);
mark_
owned_by_matlab
(
A7
);
mark_
owned_by_matlab
(
A8
);
mark_
owned_by_matlab
(
A9
);
mark_
owned_by_matlab
(
A10
);
mark_
owned_by_matlab
(
A11
);
mark_
owned_by_matlab
(
A12
);
mark_
owned_by_matlab
(
A13
);
mark_
owned_by_matlab
(
A14
);
mark_
owned_by_matlab
(
A15
);
mark_
owned_by_matlab
(
A16
);
mark_
owned_by_matlab
(
A17
);
mark_
owned_by_matlab
(
A18
);
mark_
owned_by_matlab
(
A19
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
@@ -2587,26 +2587,26 @@ namespace mex_binding
typename
basic_type
<
arg19_type
>::
type
A19
;
typename
basic_type
<
arg20_type
>::
type
A20
;
mark_
non_persistent
(
A1
);
mark_
non_persistent
(
A2
);
mark_
non_persistent
(
A3
);
mark_
non_persistent
(
A4
);
mark_
non_persistent
(
A5
);
mark_
non_persistent
(
A6
);
mark_
non_persistent
(
A7
);
mark_
non_persistent
(
A8
);
mark_
non_persistent
(
A9
);
mark_
non_persistent
(
A10
);
mark_
non_persistent
(
A11
);
mark_
non_persistent
(
A12
);
mark_
non_persistent
(
A13
);
mark_
non_persistent
(
A14
);
mark_
non_persistent
(
A15
);
mark_
non_persistent
(
A16
);
mark_
non_persistent
(
A17
);
mark_
non_persistent
(
A18
);
mark_
non_persistent
(
A19
);
mark_
non_persistent
(
A20
);
mark_
owned_by_matlab
(
A1
);
mark_
owned_by_matlab
(
A2
);
mark_
owned_by_matlab
(
A3
);
mark_
owned_by_matlab
(
A4
);
mark_
owned_by_matlab
(
A5
);
mark_
owned_by_matlab
(
A6
);
mark_
owned_by_matlab
(
A7
);
mark_
owned_by_matlab
(
A8
);
mark_
owned_by_matlab
(
A9
);
mark_
owned_by_matlab
(
A10
);
mark_
owned_by_matlab
(
A11
);
mark_
owned_by_matlab
(
A12
);
mark_
owned_by_matlab
(
A13
);
mark_
owned_by_matlab
(
A14
);
mark_
owned_by_matlab
(
A15
);
mark_
owned_by_matlab
(
A16
);
mark_
owned_by_matlab
(
A17
);
mark_
owned_by_matlab
(
A18
);
mark_
owned_by_matlab
(
A19
);
mark_
owned_by_matlab
(
A20
);
int
i
=
0
;
if
(
i
<
nrhs
&&
is_input_type
<
arg1_type
>::
value
)
{
validate_and_populate_arg
(
i
,
prhs
[
i
],
A1
);
++
i
;}
ELSE_ASSIGN_ARG_1
;
...
...
dlib/matlab/subprocess_stream.cpp
View file @
5ecd904d
...
...
@@ -434,9 +434,20 @@ namespace dlib
stderr_pipe
.
close
();
char
*
argv
[]
=
{(
char
*
)
program_name
,
nullptr
};
char
*
envp
[]
=
{
nullptr
};
char
*
cudadevs
=
getenv
(
"CUDA_VISIBLE_DEVICES"
);
if
(
cudadevs
)
{
std
::
string
extra
=
std
::
string
(
"CUDA_VISIBLE_DEVICES="
)
+
cudadevs
;
char
*
envp
[]
=
{(
char
*
)
extra
.
c_str
(),
nullptr
};
execve
(
argv
[
0
],
argv
,
envp
);
}
else
{
char
*
envp
[]
=
{
nullptr
};
execve
(
argv
[
0
],
argv
,
envp
);
}
execve
(
argv
[
0
],
argv
,
envp
);
// If launching the child didn't work then bail immediately so the parent
// process has no chance to get tweaked out (*cough* MATLAB *cough*).
_Exit
(
1
);
...
...
dlib/matrix/matrix.h
View file @
5ecd904d
...
...
@@ -1174,8 +1174,8 @@ namespace dlib
{
#ifdef MATLAB_MEX_FILE
// You can't move memory around when compiled in a matlab mex file and the
// different locations have different
persistence
settings.
if
(
data
.
_private_is_
persistent
()
==
item
.
data
.
_private_is_persistent
())
// different locations have different
ownership
settings.
if
(
data
.
_private_is_
owned_by_matlab
()
==
item
.
data
.
_private_is_owned_by_matlab
())
{
swap
(
item
);
}
...
...
@@ -1195,8 +1195,8 @@ namespace dlib
{
#ifdef MATLAB_MEX_FILE
// You can't move memory around when compiled in a matlab mex file and the
// different locations have different
persistence
settings.
if
(
data
.
_private_is_
persistent
()
==
rhs
.
data
.
_private_is_persistent
())
// different locations have different
ownership
settings.
if
(
data
.
_private_is_
owned_by_matlab
()
==
rhs
.
data
.
_private_is_owned_by_matlab
())
{
swap
(
rhs
);
}
...
...
@@ -1343,14 +1343,14 @@ namespace dlib
return
data
.
_private_release_mxArray
();
}
void
_private_mark_
non_persistent
()
void
_private_mark_
owned_by_matlab
()
{
data
.
_private_mark_
non_persistent
();
data
.
_private_mark_
owned_by_matlab
();
}
bool
_private_is_
persistent
()
bool
_private_is_
owned_by_matlab
()
{
return
data
.
_private_is_
persistent
();
return
data
.
_private_is_
owned_by_matlab
();
}
#endif
...
...
dlib/matrix/matrix_data_layout.h
View file @
5ecd904d
...
...
@@ -187,8 +187,8 @@ namespace dlib
#ifdef MATLAB_MEX_FILE
void
_private_set_mxArray
(
mxArray
*
)
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
mxArray
*
_private_release_mxArray
(){
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
void
_private_mark_
non_persistent
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
persistent
()
const
{
return
tru
e
;
}
void
_private_mark_
owned_by_matlab
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
owned_by_matlab
()
const
{
return
fals
e
;
}
#endif
private
:
...
...
@@ -257,8 +257,8 @@ namespace dlib
#ifdef MATLAB_MEX_FILE
void
_private_set_mxArray
(
mxArray
*
)
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
mxArray
*
_private_release_mxArray
(){
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
void
_private_mark_
non_persistent
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
persistent
()
const
{
return
tru
e
;
}
void
_private_mark_
owned_by_matlab
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
owned_by_matlab
()
const
{
return
fals
e
;
}
#endif
private
:
...
...
@@ -339,8 +339,8 @@ namespace dlib
#ifdef MATLAB_MEX_FILE
void
_private_set_mxArray
(
mxArray
*
)
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
mxArray
*
_private_release_mxArray
(){
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
void
_private_mark_
non_persistent
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
persistent
()
const
{
return
tru
e
;
}
void
_private_mark_
owned_by_matlab
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
owned_by_matlab
()
const
{
return
fals
e
;
}
#endif
private
:
...
...
@@ -424,8 +424,8 @@ namespace dlib
#ifdef MATLAB_MEX_FILE
void
_private_set_mxArray
(
mxArray
*
)
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
mxArray
*
_private_release_mxArray
(){
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
void
_private_mark_
non_persistent
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
persistent
()
const
{
return
tru
e
;
}
void
_private_mark_
owned_by_matlab
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
owned_by_matlab
()
const
{
return
fals
e
;
}
#endif
private
:
...
...
@@ -511,8 +511,8 @@ namespace dlib
#ifdef MATLAB_MEX_FILE
void
_private_set_mxArray
(
mxArray
*
)
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
mxArray
*
_private_release_mxArray
(){
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
void
_private_mark_
non_persistent
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
persistent
()
const
{
return
tru
e
;
}
void
_private_mark_
owned_by_matlab
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
owned_by_matlab
()
const
{
return
fals
e
;
}
#endif
private
:
T
*
data
;
...
...
@@ -634,8 +634,8 @@ namespace dlib
#ifdef MATLAB_MEX_FILE
void
_private_set_mxArray
(
mxArray
*
)
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
mxArray
*
_private_release_mxArray
(){
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
void
_private_mark_
non_persistent
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
persistent
()
const
{
return
tru
e
;
}
void
_private_mark_
owned_by_matlab
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
owned_by_matlab
()
const
{
return
fals
e
;
}
#endif
private
:
...
...
@@ -704,8 +704,8 @@ namespace dlib
#ifdef MATLAB_MEX_FILE
void
_private_set_mxArray
(
mxArray
*
)
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
mxArray
*
_private_release_mxArray
(){
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
void
_private_mark_
non_persistent
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
persistent
()
const
{
return
tru
e
;
}
void
_private_mark_
owned_by_matlab
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
owned_by_matlab
()
const
{
return
fals
e
;
}
#endif
private
:
...
...
@@ -786,8 +786,8 @@ namespace dlib
#ifdef MATLAB_MEX_FILE
void
_private_set_mxArray
(
mxArray
*
)
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
mxArray
*
_private_release_mxArray
(){
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
void
_private_mark_
non_persistent
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
persistent
()
const
{
return
tru
e
;
}
void
_private_mark_
owned_by_matlab
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
owned_by_matlab
()
const
{
return
fals
e
;
}
#endif
private
:
...
...
@@ -871,8 +871,8 @@ namespace dlib
#ifdef MATLAB_MEX_FILE
void
_private_set_mxArray
(
mxArray
*
)
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
mxArray
*
_private_release_mxArray
(){
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
void
_private_mark_
non_persistent
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
persistent
()
const
{
return
tru
e
;
}
void
_private_mark_
owned_by_matlab
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
owned_by_matlab
()
const
{
return
fals
e
;
}
#endif
private
:
...
...
@@ -938,8 +938,8 @@ namespace dlib
#ifdef MATLAB_MEX_FILE
void
_private_set_mxArray
(
mxArray
*
)
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
mxArray
*
_private_release_mxArray
(){
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
void
_private_mark_
non_persistent
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
persistent
()
const
{
return
tru
e
;
}
void
_private_mark_
owned_by_matlab
()
{
DLIB_CASSERT
(
false
,
"This function should never be called."
);
}
bool
_private_is_
owned_by_matlab
()
const
{
return
fals
e
;
}
#endif
long
nr
(
...
...
@@ -981,14 +981,22 @@ namespace dlib
const
static
long
NC
=
num_cols
;
layout
(
)
:
data
(
0
),
nr_
(
0
),
nc_
(
0
),
make_persistent
(
tru
e
),
set_by_private_set_mxArray
(
false
),
mem
(
0
)
{
}
)
:
data
(
0
),
nr_
(
0
),
nc_
(
0
),
owned_by_matlab
(
fals
e
),
set_by_private_set_mxArray
(
false
),
mem
(
0
)
{
}
~
layout
()
{
if
(
!
set_by_private_set_mxArray
&&
mem
)
if
(
owned_by_matlab
)
{
mxDestroyArray
(
mem
);
mem
=
0
;
if
(
!
set_by_private_set_mxArray
&&
mem
)
{
mxDestroyArray
(
mem
);
mem
=
0
;
data
=
0
;
}
}
else
if
(
data
)
{
delete
[]
data
;
data
=
0
;
}
}
...
...
@@ -1015,9 +1023,11 @@ namespace dlib
mxArray
*
mem_
)
{
DLIB_CASSERT
(
mem
==
0
&&
data
==
0
,
"You can't call this function on an already allocated matrix."
);
// We don't own the pointer, so make note of that so we won't try to free
// it.
set_by_private_set_mxArray
=
true
;
owned_by_matlab
=
true
;
mem
=
mem_
;
data
=
mxGetPr
(
mem
);
nr_
=
mxGetM
(
mem
);
...
...
@@ -1026,7 +1036,7 @@ namespace dlib
mxArray
*
_private_release_mxArray
()
{
DLIB_CASSERT
(
!
make_persistent
,
""
);
DLIB_CASSERT
(
owned_by_matlab
,
""
);
mxArray
*
temp
=
mem
;
mem
=
0
;
set_by_private_set_mxArray
=
false
;
...
...
@@ -1036,21 +1046,21 @@ namespace dlib
return
temp
;
}
void
_private_mark_
non_persistent
()
void
_private_mark_
owned_by_matlab
()
{
DLIB_CASSERT
(
mem
==
0
,
"You can't convert a persistent matlab array to non-persistent
."
);
make_persistent
=
fals
e
;
DLIB_CASSERT
(
mem
==
0
&&
data
==
0
,
"You can't say a matrix should be owned by matlab after it's been allocated
."
);
owned_by_matlab
=
tru
e
;
}
bool
_private_is_
persistent
()
const
bool
_private_is_
owned_by_matlab
()
const
{
return
make_persistent
;
return
owned_by_matlab
;
}
void
swap
(
layout
&
item
)
{
std
::
swap
(
item
.
make_persistent
,
make_persistent
);
std
::
swap
(
item
.
owned_by_matlab
,
owned_by_matlab
);
std
::
swap
(
item
.
set_by_private_set_mxArray
,
set_by_private_set_mxArray
);
std
::
swap
(
item
.
mem
,
mem
);
std
::
swap
(
item
.
data
,
data
);
...
...
@@ -1069,20 +1079,27 @@ namespace dlib
long
nc
)
{
if
(
!
set_by_private_set_mxArray
&&
mem
)
if
(
owned_by_matlab
)
{
mxDestroyArray
(
mem
);
mem
=
0
;
data
=
0
;
}
set_by_private_set_mxArray
=
false
;
if
(
!
set_by_private_set_mxArray
&&
mem
)
{
mxDestroyArray
(
mem
);
mem
=
0
;
data
=
0
;
}
set_by_private_set_mxArray
=
false
;
mem
=
mxCreateDoubleMatrix
(
nr
,
nc
,
mxREAL
);
if
(
mem
==
0
)
throw
std
::
bad_alloc
();
if
(
make_persistent
)
mexMakeArrayPersistent
(
mem
);
data
=
mxGetPr
(
mem
);
mem
=
mxCreateDoubleMatrix
(
nr
,
nc
,
mxREAL
);
if
(
mem
==
0
)
throw
std
::
bad_alloc
();
data
=
mxGetPr
(
mem
);
}
else
{
if
(
data
)
delete
[]
data
;
data
=
new
double
[
nr
*
nc
];
}
nr_
=
nr
;
nc_
=
nc
;
}
...
...
@@ -1091,7 +1108,7 @@ namespace dlib
double
*
data
;
long
nr_
;
long
nc_
;
bool
make_persistent
;
bool
owned_by_matlab
;
bool
set_by_private_set_mxArray
;
mxArray
*
mem
;
};
...
...
@@ -1107,14 +1124,22 @@ namespace dlib
const
static
long
NC
=
num_cols
;
layout
(
)
:
data
(
0
),
nr_
(
0
),
nc_
(
0
),
make_persistent
(
tru
e
),
set_by_private_set_mxArray
(
false
),
mem
(
0
)
{
}
)
:
data
(
0
),
nr_
(
0
),
nc_
(
0
),
owned_by_matlab
(
fals
e
),
set_by_private_set_mxArray
(
false
),
mem
(
0
)
{
}
~
layout
()
{
if
(
!
set_by_private_set_mxArray
&&
mem
)
if
(
owned_by_matlab
)
{
mxDestroyArray
(
mem
);
mem
=
0
;
if
(
!
set_by_private_set_mxArray
&&
mem
)
{
mxDestroyArray
(
mem
);
mem
=
0
;
data
=
0
;
}
}
else
if
(
data
)
{
delete
[]
data
;
data
=
0
;
}
}
...
...
@@ -1141,9 +1166,11 @@ namespace dlib
mxArray
*
mem_
)
{
DLIB_CASSERT
(
mem
==
0
&&
data
==
0
,
"You can't call this function on an already allocated matrix."
);
// We don't own the pointer, so make note of that so we won't try to free
// it.
set_by_private_set_mxArray
=
true
;
owned_by_matlab
=
true
;
mem
=
mem_
;
data
=
(
float
*
)
mxGetData
(
mem
);
nr_
=
mxGetM
(
mem
);
...
...
@@ -1152,7 +1179,7 @@ namespace dlib
mxArray
*
_private_release_mxArray
()
{
DLIB_CASSERT
(
!
make_persistent
,
""
);
DLIB_CASSERT
(
owned_by_matlab
,
""
);
mxArray
*
temp
=
mem
;
mem
=
0
;
set_by_private_set_mxArray
=
false
;
...
...
@@ -1162,21 +1189,21 @@ namespace dlib
return
temp
;
}
void
_private_mark_
non_persistent
()
void
_private_mark_
owned_by_matlab
()
{
DLIB_CASSERT
(
mem
==
0
,
"You can't convert a persistent matlab array to non-persistent
."
);
make_persistent
=
fals
e
;
DLIB_CASSERT
(
mem
==
0
&&
data
==
0
,
"You can't say a matrix should be owned by matlab after it's been allocated
."
);
owned_by_matlab
=
tru
e
;
}
bool
_private_is_
persistent
()
const
bool
_private_is_
owned_by_matlab
()
const
{
return
make_persistent
;
return
owned_by_matlab
;
}
void
swap
(
layout
&
item
)
{
std
::
swap
(
item
.
make_persistent
,
make_persistent
);
std
::
swap
(
item
.
owned_by_matlab
,
owned_by_matlab
);
std
::
swap
(
item
.
set_by_private_set_mxArray
,
set_by_private_set_mxArray
);
std
::
swap
(
item
.
mem
,
mem
);
std
::
swap
(
item
.
data
,
data
);
...
...
@@ -1195,20 +1222,27 @@ namespace dlib
long
nc
)
{
if
(
!
set_by_private_set_mxArray
&&
mem
)
if
(
owned_by_matlab
)
{
mxDestroyArray
(
mem
);
mem
=
0
;
data
=
0
;
}
set_by_private_set_mxArray
=
false
;
if
(
!
set_by_private_set_mxArray
&&
mem
)
{
mxDestroyArray
(
mem
);
mem
=
0
;
data
=
0
;
}
set_by_private_set_mxArray
=
false
;
mem
=
mxCreateNumericMatrix
(
nr
,
nc
,
mxSINGLE_CLASS
,
mxREAL
);
if
(
mem
==
0
)
throw
std
::
bad_alloc
();
if
(
make_persistent
)
mexMakeArrayPersistent
(
mem
);
data
=
(
float
*
)
mxGetData
(
mem
);
mem
=
mxCreateNumericMatrix
(
nr
,
nc
,
mxSINGLE_CLASS
,
mxREAL
);
if
(
mem
==
0
)
throw
std
::
bad_alloc
();
data
=
(
float
*
)
mxGetData
(
mem
);
}
else
{
if
(
data
)
delete
[]
data
;
data
=
new
float
[
nr
*
nc
];
}
nr_
=
nr
;
nc_
=
nc
;
}
...
...
@@ -1217,7 +1251,7 @@ namespace dlib
float
*
data
;
long
nr_
;
long
nc_
;
bool
make_persistent
;
bool
owned_by_matlab
;
bool
set_by_private_set_mxArray
;
mxArray
*
mem
;
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment