23 #if ! defined (octave_Sparse_diag_op_defs_h)
24 #define octave_Sparse_diag_op_defs_h 1
26 #include "octave-config.h"
30 template <
typename RT,
typename DM,
typename SM>
42 RT r (nr, a_nc, a.nnz ());
54 r.xdata (l) = d.dgelem (i) * a.data (
k);
62 r.maybe_compress (
true);
66 template <
typename RT,
typename SM,
typename DM>
79 RT r (a_nr, nc, a.cidx (mnc));
83 const typename DM::element_type
s = d.dgelem (j);
85 r.xcidx (j) = a.cidx (j);
88 r.xdata (
k) = s * a.data (
k);
89 r.xridx (
k) = a.ridx (
k);
93 r.xcidx (j) = a.cidx (mnc);
95 r.maybe_compress (
true);
100 template <
typename T>
102 :
public std::unary_function <T, T>
109 template <
typename RT,
typename SM,
typename DM,
typename OpA,
typename OpD>
121 RT r (a_nr, a_nc, nz + n);
131 for (k_split = k_src; k_split < colend; k_split++)
132 if (a.ridx (k_split) >= j)
135 for (; k_src < k_split; k_src++, k++)
137 r.xridx (k) = a.ridx (k_src);
138 r.xdata (k) = opa (a.data (k_src));
141 if (k_src < colend && a.ridx (k_src) == j)
144 r.xdata (k) = opa (a.data (k_src)) + opd (d.dgelem (j));
150 r.xdata (k) = opd (d.dgelem (j));
154 for (; k_src < colend; k_src++, k++)
156 r.xridx (k) = a.ridx (k_src);
157 r.xdata (k) = opa (a.data (k_src));
163 r.maybe_compress (
true);
167 template <
typename RT,
typename DM,
typename SM>
171 return inner_do_add_sm_dm<RT> (
a,
d,
176 template <
typename RT,
typename DM,
typename SM>
179 if (a.rows () != d.rows () || a.cols () != d.cols ())
181 d.rows (), d.cols (), a.rows (), a.cols ());
183 return do_commutative_add_dm_sm<RT> (
d,
a);
186 template <
typename RT,
typename DM,
typename SM>
189 if (a.rows () != d.rows () || a.cols () != d.cols ())
191 d.rows (), d.cols (), a.rows (), a.cols ());
193 return inner_do_add_sm_dm<RT> (
a,
d,
194 std::negate<typename SM::element_type> (),
198 template <
typename RT,
typename SM,
typename DM>
201 if (a.rows () != d.rows () || a.cols () != d.cols ())
203 a.rows (), a.cols (), d.rows (), d.cols ());
205 return do_commutative_add_dm_sm<RT> (
d,
a);
208 template <
typename RT,
typename SM,
typename DM>
211 if (a.rows () != d.rows () || a.cols () != d.cols ())
213 a.rows (), a.cols (), d.rows (), d.cols ());
215 return inner_do_add_sm_dm<RT> (
a,
d,
217 std::negate<typename DM::element_type> ());
RT do_commutative_add_dm_sm(const DM &d, const SM &a)
RT do_mul_sm_dm(const SM &a, const DM &d)
RT do_add_dm_sm(const DM &d, const SM &a)
RT do_sub_dm_sm(const DM &d, const SM &a)
F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_REAL const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T F77_REAL F77_REAL &F77_RET_T F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE * d
calling an anonymous function involves an overhead quite comparable to the overhead of an m file function Passing a handle to a built in function is because the interpreter is not involved in the internal loop For a
RT do_add_sm_dm(const SM &a, const DM &d)
void err_nonconformant(const char *op, octave_idx_type op1_len, octave_idx_type op2_len)
RT inner_do_add_sm_dm(const SM &a, const DM &d, OpA opa, OpD opd)
=val(i)}if ode{val(i)}occurs in table i
RT do_sub_sm_dm(const SM &a, const DM &d)
F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_REAL const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T F77_REAL F77_REAL &F77_RET_T F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE * x
charNDArray min(char d, const charNDArray &m)
RT do_mul_dm_sm(const DM &d, const SM &a)