Chris@49
|
1 // Copyright (C) 2011 NICTA (www.nicta.com.au)
|
Chris@49
|
2 // Copyright (C) 2011 Conrad Sanderson
|
Chris@49
|
3 //
|
Chris@49
|
4 // This Source Code Form is subject to the terms of the Mozilla Public
|
Chris@49
|
5 // License, v. 2.0. If a copy of the MPL was not distributed with this
|
Chris@49
|
6 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
Chris@49
|
7
|
Chris@49
|
8
|
Chris@49
|
9
|
Chris@49
|
10 //! \addtogroup op_resize
|
Chris@49
|
11 //! @{
|
Chris@49
|
12
|
Chris@49
|
13
|
Chris@49
|
14
|
Chris@49
|
15 template<typename T1>
|
Chris@49
|
16 inline
|
Chris@49
|
17 void
|
Chris@49
|
18 op_resize::apply(Mat<typename T1::elem_type>& actual_out, const Op<T1,op_resize>& in)
|
Chris@49
|
19 {
|
Chris@49
|
20 arma_extra_debug_sigprint();
|
Chris@49
|
21
|
Chris@49
|
22 typedef typename T1::elem_type eT;
|
Chris@49
|
23
|
Chris@49
|
24 const uword out_n_rows = in.aux_uword_a;
|
Chris@49
|
25 const uword out_n_cols = in.aux_uword_b;
|
Chris@49
|
26
|
Chris@49
|
27 const unwrap<T1> tmp(in.m);
|
Chris@49
|
28 const Mat<eT>& A = tmp.M;
|
Chris@49
|
29
|
Chris@49
|
30 const uword A_n_rows = A.n_rows;
|
Chris@49
|
31 const uword A_n_cols = A.n_cols;
|
Chris@49
|
32
|
Chris@49
|
33 Mat<eT> B;
|
Chris@49
|
34
|
Chris@49
|
35 const bool alias = (&actual_out == &A);
|
Chris@49
|
36
|
Chris@49
|
37 Mat<eT>& out = alias ? B : actual_out;
|
Chris@49
|
38
|
Chris@49
|
39 out.set_size(out_n_rows, out_n_cols);
|
Chris@49
|
40
|
Chris@49
|
41 if( (out_n_rows > A_n_rows) || (out_n_cols > A_n_cols) )
|
Chris@49
|
42 {
|
Chris@49
|
43 out.zeros();
|
Chris@49
|
44 }
|
Chris@49
|
45
|
Chris@49
|
46 if( (out.n_elem > 0) && (A.n_elem > 0) )
|
Chris@49
|
47 {
|
Chris@49
|
48 const uword end_row = (std::min)(out_n_rows, A_n_rows) - 1;
|
Chris@49
|
49 const uword end_col = (std::min)(out_n_cols, A_n_cols) - 1;
|
Chris@49
|
50
|
Chris@49
|
51 out.submat(0, 0, end_row, end_col) = A.submat(0, 0, end_row, end_col);
|
Chris@49
|
52 }
|
Chris@49
|
53
|
Chris@49
|
54 if(alias)
|
Chris@49
|
55 {
|
Chris@49
|
56 actual_out.steal_mem(B);
|
Chris@49
|
57 }
|
Chris@49
|
58
|
Chris@49
|
59 }
|
Chris@49
|
60
|
Chris@49
|
61
|
Chris@49
|
62
|
Chris@49
|
63 template<typename T1>
|
Chris@49
|
64 inline
|
Chris@49
|
65 void
|
Chris@49
|
66 op_resize::apply(Cube<typename T1::elem_type>& actual_out, const OpCube<T1,op_resize>& in)
|
Chris@49
|
67 {
|
Chris@49
|
68 arma_extra_debug_sigprint();
|
Chris@49
|
69
|
Chris@49
|
70 typedef typename T1::elem_type eT;
|
Chris@49
|
71
|
Chris@49
|
72 const uword out_n_rows = in.aux_uword_a;
|
Chris@49
|
73 const uword out_n_cols = in.aux_uword_b;
|
Chris@49
|
74 const uword out_n_slices = in.aux_uword_c;
|
Chris@49
|
75
|
Chris@49
|
76 const unwrap_cube<T1> tmp(in.m);
|
Chris@49
|
77 const Cube<eT>& A = tmp.M;
|
Chris@49
|
78
|
Chris@49
|
79 const uword A_n_rows = A.n_rows;
|
Chris@49
|
80 const uword A_n_cols = A.n_cols;
|
Chris@49
|
81 const uword A_n_slices = A.n_slices;
|
Chris@49
|
82
|
Chris@49
|
83 Cube<eT> B;
|
Chris@49
|
84
|
Chris@49
|
85 const bool alias = (&actual_out == &A);
|
Chris@49
|
86
|
Chris@49
|
87 Cube<eT>& out = alias ? B : actual_out;
|
Chris@49
|
88
|
Chris@49
|
89 out.set_size(out_n_rows, out_n_cols, out_n_slices);
|
Chris@49
|
90
|
Chris@49
|
91 if( (out_n_rows > A_n_rows) || (out_n_cols > A_n_cols) || (out_n_slices > A_n_slices) )
|
Chris@49
|
92 {
|
Chris@49
|
93 out.zeros();
|
Chris@49
|
94 }
|
Chris@49
|
95
|
Chris@49
|
96 if( (out.n_elem > 0) && (A.n_elem > 0) )
|
Chris@49
|
97 {
|
Chris@49
|
98 const uword end_row = (std::min)(out_n_rows, A_n_rows) - 1;
|
Chris@49
|
99 const uword end_col = (std::min)(out_n_cols, A_n_cols) - 1;
|
Chris@49
|
100 const uword end_slice = (std::min)(out_n_slices, A_n_slices) - 1;
|
Chris@49
|
101
|
Chris@49
|
102 out.subcube(0, 0, 0, end_row, end_col, end_slice) = A.subcube(0, 0, 0, end_row, end_col, end_slice);
|
Chris@49
|
103 }
|
Chris@49
|
104
|
Chris@49
|
105 if(alias)
|
Chris@49
|
106 {
|
Chris@49
|
107 actual_out.steal_mem(B);
|
Chris@49
|
108 }
|
Chris@49
|
109
|
Chris@49
|
110 }
|
Chris@49
|
111
|
Chris@49
|
112
|
Chris@49
|
113
|
Chris@49
|
114 //! @}
|