Mercurial > octave-nkf
diff liboctave/mx-op-defs.h @ 5030:160365410ad4
[project @ 2004-09-24 03:22:23 by jwe]
author | jwe |
---|---|
date | Fri, 24 Sep 2004 03:22:24 +0000 |
parents | a7b1e6122d0c |
children | 4c8a2e4e0717 |
line wrap: on
line diff
--- a/liboctave/mx-op-defs.h Thu Sep 23 17:01:13 2004 +0000 +++ b/liboctave/mx-op-defs.h Fri Sep 24 03:22:24 2004 +0000 @@ -214,7 +214,7 @@ BOOL_OP_DECL (mx_el_and, M, S); \ BOOL_OP_DECL (mx_el_or, M, S); \ -#define MS_BOOL_OP(F, OP, M, S, ZERO) \ +#define MS_BOOL_OP(F, OP, M, S, LHS_ZERO, RHS_ZERO) \ boolMatrix \ F (const M& m, const S& s) \ { \ @@ -229,15 +229,18 @@ \ for (int j = 0; j < nc; j++) \ for (int i = 0; i < nr; i++) \ - r.elem(i, j) = (m.elem(i, j) != ZERO) OP (s != ZERO); \ + r.elem(i, j) = (m.elem(i, j) != LHS_ZERO) OP (s != RHS_ZERO); \ } \ \ return r; \ } +#define MS_BOOL_OPS2(M, S, LHS_ZERO, RHS_ZERO) \ + MS_BOOL_OP (mx_el_and, &&, M, S, LHS_ZERO, RHS_ZERO) \ + MS_BOOL_OP (mx_el_or, ||, M, S, LHS_ZERO, RHS_ZERO) + #define MS_BOOL_OPS(M, S, ZERO) \ - MS_BOOL_OP (mx_el_and, &&, M, S, ZERO) \ - MS_BOOL_OP (mx_el_or, ||, M, S, ZERO) + MS_BOOL_OPS2(M, S, ZERO, ZERO) #define MS_OP_DECLS(R, M, S) \ MS_BIN_OP_DECLS (R, M, S) \ @@ -314,7 +317,7 @@ BOOL_OP_DECL (mx_el_and, S, M); \ BOOL_OP_DECL (mx_el_or, S, M); \ -#define SM_BOOL_OP(F, OP, S, M, ZERO) \ +#define SM_BOOL_OP(F, OP, S, M, LHS_ZERO, RHS_ZERO) \ boolMatrix \ F (const S& s, const M& m) \ { \ @@ -329,15 +332,18 @@ \ for (int j = 0; j < nc; j++) \ for (int i = 0; i < nr; i++) \ - r.elem(i, j) = (s != ZERO) OP (m.elem(i, j) != ZERO); \ + r.elem(i, j) = (s != LHS_ZERO) OP (m.elem(i, j) != RHS_ZERO); \ } \ \ return r; \ } +#define SM_BOOL_OPS2(S, M, LHS_ZERO, RHS_ZERO) \ + SM_BOOL_OP (mx_el_and, &&, S, M, LHS_ZERO, RHS_ZERO) \ + SM_BOOL_OP (mx_el_or, ||, S, M, LHS_ZERO, RHS_ZERO) + #define SM_BOOL_OPS(S, M, ZERO) \ - SM_BOOL_OP (mx_el_and, &&, S, M, ZERO) \ - SM_BOOL_OP (mx_el_or, ||, S, M, ZERO) + SM_BOOL_OPS2(S, M, ZERO, ZERO) #define SM_OP_DECLS(R, S, M) \ SM_BIN_OP_DECLS (R, S, M) \ @@ -429,7 +435,7 @@ BOOL_OP_DECL (mx_el_and, M1, M2); \ BOOL_OP_DECL (mx_el_or, M1, M2); -#define MM_BOOL_OP(F, OP, M1, M2, ZERO) \ +#define MM_BOOL_OP(F, OP, M1, M2, LHS_ZERO, RHS_ZERO) \ boolMatrix \ F (const M1& m1, const M2& m2) \ { \ @@ -449,8 +455,8 @@ \ for (int j = 0; j < m1_nc; j++) \ for (int i = 0; i < m1_nr; i++) \ - r.elem(i, j) = (m1.elem(i, j) != ZERO) \ - OP (m2.elem(i, j) != ZERO); \ + r.elem(i, j) = (m1.elem(i, j) != LHS_ZERO) \ + OP (m2.elem(i, j) != RHS_ZERO); \ } \ } \ else \ @@ -462,9 +468,12 @@ return r; \ } +#define MM_BOOL_OPS2(M1, M2, LHS_ZERO, RHS_ZERO) \ + MM_BOOL_OP (mx_el_and, &&, M1, M2, LHS_ZERO, RHS_ZERO) \ + MM_BOOL_OP (mx_el_or, ||, M1, M2, LHS_ZERO, RHS_ZERO) + #define MM_BOOL_OPS(M1, M2, ZERO) \ - MM_BOOL_OP (mx_el_and, &&, M1, M2, ZERO) \ - MM_BOOL_OP (mx_el_or, ||, M1, M2, ZERO) + MM_BOOL_OPS2(M1, M2, ZERO, ZERO) #define MM_OP_DECLS(R, M1, M2) \ MM_BIN_OP_DECLS (R, M1, M2) \ @@ -535,7 +544,7 @@ NDBOOL_OP_DECL (mx_el_and, ND, S); \ NDBOOL_OP_DECL (mx_el_or, ND, S); -#define NDS_BOOL_OP(F, OP, ND, S, ZERO) \ +#define NDS_BOOL_OP(F, OP, ND, S, LHS_ZERO, RHS_ZERO) \ boolNDArray \ F (const ND& m, const S& s) \ { \ @@ -548,15 +557,18 @@ r.resize (m.dims ()); \ \ for (int i = 0; i < len; i++) \ - r.elem(i) = (m.elem(i) != ZERO) OP (s != ZERO); \ + r.elem(i) = (m.elem(i) != LHS_ZERO) OP (s != RHS_ZERO); \ } \ \ return r; \ } +#define NDS_BOOL_OPS2(ND, S, LHS_ZERO, RHS_ZERO) \ + NDS_BOOL_OP (mx_el_and, &&, ND, S, LHS_ZERO, RHS_ZERO) \ + NDS_BOOL_OP (mx_el_or, ||, ND, S, LHS_ZERO, RHS_ZERO) + #define NDS_BOOL_OPS(ND, S, ZERO) \ - NDS_BOOL_OP (mx_el_and, &&, ND, S, ZERO) \ - NDS_BOOL_OP (mx_el_or, ||, ND, S, ZERO) + NDS_BOOL_OPS2(ND, S, ZERO, ZERO) #define NDS_OP_DECLS(R, ND, S) \ NDS_BIN_OP_DECLS (R, ND, S) \ @@ -627,7 +639,7 @@ NDBOOL_OP_DECL (mx_el_and, S, ND); \ NDBOOL_OP_DECL (mx_el_or, S, ND); -#define SND_BOOL_OP(F, OP, S, ND, ZERO) \ +#define SND_BOOL_OP(F, OP, S, ND, LHS_ZERO, RHS_ZERO) \ boolNDArray \ F (const S& s, const ND& m) \ { \ @@ -640,15 +652,18 @@ r.resize (m.dims ()); \ \ for (int i = 0; i < len; i++) \ - r.elem(i) = (s != ZERO) OP (m.elem(i) != ZERO); \ + r.elem(i) = (s != LHS_ZERO) OP (m.elem(i) != RHS_ZERO); \ } \ \ return r; \ } +#define SND_BOOL_OPS2(S, ND, LHS_ZERO, RHS_ZERO) \ + SND_BOOL_OP (mx_el_and, &&, S, ND, LHS_ZERO, RHS_ZERO) \ + SND_BOOL_OP (mx_el_or, ||, S, ND, LHS_ZERO, RHS_ZERO) + #define SND_BOOL_OPS(S, ND, ZERO) \ - SND_BOOL_OP (mx_el_and, &&, S, ND, ZERO) \ - SND_BOOL_OP (mx_el_or, ||, S, ND, ZERO) + SND_BOOL_OPS2(S, ND, ZERO, ZERO) #define SND_OP_DECLS(R, S, ND) \ SND_BIN_OP_DECLS (R, S, ND) \ @@ -735,7 +750,7 @@ NDBOOL_OP_DECL (mx_el_and, ND1, ND2); \ NDBOOL_OP_DECL (mx_el_or, ND1, ND2); -#define NDND_BOOL_OP(F, OP, ND1, ND2, ZERO) \ +#define NDND_BOOL_OP(F, OP, ND1, ND2, LHS_ZERO, RHS_ZERO) \ boolNDArray \ F (const ND1& m1, const ND2& m2) \ { \ @@ -751,7 +766,7 @@ r.resize (m1_dims); \ \ for (int i = 0; i < m1.length (); i++) \ - r.elem(i) = (m1.elem(i) != ZERO) OP (m2.elem(i) != ZERO); \ + r.elem(i) = (m1.elem(i) != LHS_ZERO) OP (m2.elem(i) != RHS_ZERO); \ } \ } \ else \ @@ -760,9 +775,12 @@ return r; \ } +#define NDND_BOOL_OPS2(ND1, ND2, LHS_ZERO, RHS_ZERO) \ + NDND_BOOL_OP (mx_el_and, &&, ND1, ND2, LHS_ZERO, RHS_ZERO) \ + NDND_BOOL_OP (mx_el_or, ||, ND1, ND2, LHS_ZERO, RHS_ZERO) + #define NDND_BOOL_OPS(ND1, ND2, ZERO) \ - NDND_BOOL_OP (mx_el_and, &&, ND1, ND2, ZERO) \ - NDND_BOOL_OP (mx_el_or, ||, ND1, ND2, ZERO) + NDND_BOOL_OPS2(ND1, ND2, ZERO, ZERO) #define NDND_OP_DECLS(R, ND1, ND2) \ NDND_BIN_OP_DECLS (R, ND1, ND2) \ @@ -864,7 +882,7 @@ return r; \ } -#define MDM_MULTIPLY_OP(R, M, DM, ZERO) \ +#define MDM_MULTIPLY_OP(R, M, DM, R_ZERO) \ R \ operator * (const M& m, const DM& dm) \ { \ @@ -880,7 +898,7 @@ gripe_nonconformant ("operator *", m_nr, m_nc, dm_nr, dm_nc); \ else \ { \ - r.resize (m_nr, dm_nc, ZERO); \ + r.resize (m_nr, dm_nc, R_ZERO); \ \ if (m_nr > 0 && m_nc > 0 && dm_nc > 0) \ { \ @@ -893,7 +911,7 @@ for (int i = 0; i < m_nr; i++) \ r.elem(i, j) = m.elem(i, j); \ } \ - else if (dm.elem(j, j) != ZERO) \ + else \ { \ for (int i = 0; i < m_nr; i++) \ r.elem(i, j) = dm.elem(j, j) * m.elem(i, j); \ @@ -905,10 +923,10 @@ return r; \ } -#define MDM_BIN_OPS(R, M, DM, ZERO) \ +#define MDM_BIN_OPS(R, M, DM, R_ZERO) \ MDM_BIN_OP (R, operator +, M, DM, +=) \ MDM_BIN_OP (R, operator -, M, DM, -=) \ - MDM_MULTIPLY_OP (R, M, DM, ZERO) + MDM_MULTIPLY_OP (R, M, DM, R_ZERO) #define MDM_OP_DECLS(R, M, DM) \ MDM_BIN_OP_DECLS(R, M, DM) @@ -952,7 +970,7 @@ return r; \ } -#define DMM_MULTIPLY_OP(R, DM, M, ZERO) \ +#define DMM_MULTIPLY_OP(R, DM, M, R_ZERO) \ R \ operator * (const DM& dm, const M& m) \ { \ @@ -968,7 +986,7 @@ gripe_nonconformant ("operator *", dm_nr, dm_nc, m_nr, m_nc); \ else \ { \ - r.resize (dm_nr, m_nc, ZERO); \ + r.resize (dm_nr, m_nc, R_ZERO); \ \ if (dm_nr > 0 && dm_nc > 0 && m_nc > 0) \ { \ @@ -981,7 +999,7 @@ for (int j = 0; j < m_nc; j++) \ r.elem(i, j) = m.elem(i, j); \ } \ - else if (dm.elem(i, i) != ZERO) \ + else \ { \ for (int j = 0; j < m_nc; j++) \ r.elem(i, j) = dm.elem(i, i) * m.elem(i, j); \ @@ -993,10 +1011,10 @@ return r; \ } -#define DMM_BIN_OPS(R, DM, M, ZERO) \ +#define DMM_BIN_OPS(R, DM, M, R_ZERO) \ DMM_BIN_OP (R, operator +, DM, M, +=, ) \ DMM_BIN_OP (R, operator -, DM, M, +=, -) \ - DMM_MULTIPLY_OP (R, DM, M, ZERO) + DMM_MULTIPLY_OP (R, DM, M, R_ZERO) #define DMM_OP_DECLS(R, DM, M) \ DMM_BIN_OP_DECLS(R, DM, M)