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++) \