Mercurial > hg > octave-nkf
comparison liboctave/Sparse-op-defs.h @ 13731:3b52038e6e6c
Help dumb compilers to resolve template parameters.
* boolNDArray.cc (boolNDArray::operator!): Specify second template parameter
for do_mx_unary_map_op.
* Sparse-op-defs.h (SPARSE_MSM_BIN_OP_2): Specify template parameter for
mx_inline_all_infinite.
(SPARSE_SMM_BIN_OP_2_CHECK_product): Add argument to macro and use it as
template parameter for mx_inline_all_infinite.
(SPARSE_SMM_BIN_OP_2_CHECK_quotient): Likewise for mx_inline_all_nan.
(SPARSE_SMM_BIN_OP_2): Use new argument for product and quotient macros.
* data.cc (Frem): Specify template parameter for xrem.
(Fmod): Specify template parameter for xmod.
author | Michael Goffioul <michael.goffioul@gmail.com> |
---|---|
date | Thu, 20 Oct 2011 12:54:40 +0100 |
parents | fd0a3ac60b0e |
children | 72c96de7a403 |
comparison
equal
deleted
inserted
replaced
13730:a2c74b5c02de | 13731:3b52038e6e6c |
---|---|
1117 r = R (m1 OP m2.elem(0,0)); \ | 1117 r = R (m1 OP m2.elem(0,0)); \ |
1118 else if (m1_nr != m2_nr || m1_nc != m2_nc) \ | 1118 else if (m1_nr != m2_nr || m1_nc != m2_nc) \ |
1119 gripe_nonconformant (#F, m1_nr, m1_nc, m2_nr, m2_nc); \ | 1119 gripe_nonconformant (#F, m1_nr, m1_nc, m2_nr, m2_nc); \ |
1120 else \ | 1120 else \ |
1121 { \ | 1121 { \ |
1122 if (do_mx_check (m1, mx_inline_all_finite)) \ | 1122 if (do_mx_check (m1, mx_inline_all_finite<M1::element_type>)) \ |
1123 { \ | 1123 { \ |
1124 /* Sparsity pattern is preserved. */ \ | 1124 /* Sparsity pattern is preserved. */ \ |
1125 octave_idx_type m2_nz = m2.nnz (); \ | 1125 octave_idx_type m2_nz = m2.nnz (); \ |
1126 r = R (m2_nr, m2_nc, m2_nz); \ | 1126 r = R (m2_nr, m2_nc, m2_nz); \ |
1127 for (octave_idx_type j = 0, k = 0; j < m2_nc; j++) \ | 1127 for (octave_idx_type j = 0, k = 0; j < m2_nc; j++) \ |
1333 } \ | 1333 } \ |
1334 return r; \ | 1334 return r; \ |
1335 } | 1335 } |
1336 | 1336 |
1337 // sm .* m preserves sparsity if m contains no Infs nor Nans. | 1337 // sm .* m preserves sparsity if m contains no Infs nor Nans. |
1338 #define SPARSE_SMM_BIN_OP_2_CHECK_product \ | 1338 #define SPARSE_SMM_BIN_OP_2_CHECK_product(ET) \ |
1339 do_mx_check (m2, mx_inline_all_finite) | 1339 do_mx_check (m2, mx_inline_all_finite<ET>) |
1340 | 1340 |
1341 // sm ./ m preserves sparsity if m contains no NaNs or zeros. | 1341 // sm ./ m preserves sparsity if m contains no NaNs or zeros. |
1342 #define SPARSE_SMM_BIN_OP_2_CHECK_quotient \ | 1342 #define SPARSE_SMM_BIN_OP_2_CHECK_quotient(ET) \ |
1343 ! do_mx_check (m2, mx_inline_any_nan) && m2.nnz () == m2.numel () | 1343 ! do_mx_check (m2, mx_inline_any_nan<ET>) && m2.nnz () == m2.numel () |
1344 | 1344 |
1345 #define SPARSE_SMM_BIN_OP_2(R, F, OP, M1, M2) \ | 1345 #define SPARSE_SMM_BIN_OP_2(R, F, OP, M1, M2) \ |
1346 R \ | 1346 R \ |
1347 F (const M1& m1, const M2& m2) \ | 1347 F (const M1& m1, const M2& m2) \ |
1348 { \ | 1348 { \ |
1358 r = R (m1.elem(0,0) OP m2); \ | 1358 r = R (m1.elem(0,0) OP m2); \ |
1359 else if (m1_nr != m2_nr || m1_nc != m2_nc) \ | 1359 else if (m1_nr != m2_nr || m1_nc != m2_nc) \ |
1360 gripe_nonconformant (#F, m1_nr, m1_nc, m2_nr, m2_nc); \ | 1360 gripe_nonconformant (#F, m1_nr, m1_nc, m2_nr, m2_nc); \ |
1361 else \ | 1361 else \ |
1362 { \ | 1362 { \ |
1363 if (SPARSE_SMM_BIN_OP_2_CHECK_ ## F) \ | 1363 if (SPARSE_SMM_BIN_OP_2_CHECK_ ## F(M2::element_type)) \ |
1364 { \ | 1364 { \ |
1365 /* Sparsity pattern is preserved. */ \ | 1365 /* Sparsity pattern is preserved. */ \ |
1366 octave_idx_type m1_nz = m1.nnz (); \ | 1366 octave_idx_type m1_nz = m1.nnz (); \ |
1367 r = R (m1_nr, m1_nc, m1_nz); \ | 1367 r = R (m1_nr, m1_nc, m1_nz); \ |
1368 for (octave_idx_type j = 0, k = 0; j < m1_nc; j++) \ | 1368 for (octave_idx_type j = 0, k = 0; j < m1_nc; j++) \ |