annotate liboctave/mx-op-defs.h @ 9550:3d6a9aea2aea

refactor binary & bool ops in liboctave
author Jaroslav Hajek <highegg@gmail.com>
date Wed, 19 Aug 2009 22:55:15 +0200
parents a48fba01e4ac
children 0c72d9284087
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
1 /*
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
2
8920
eb63fbe60fab update copyright notices
John W. Eaton <jwe@octave.org>
parents: 8774
diff changeset
3 Copyright (C) 2008, 2009 Jaroslav Hajek
7017
a1dbe9d80eee [project @ 2007-10-12 21:27:11 by jwe]
jwe
parents: 7016
diff changeset
4 Copyright (C) 1996, 1997, 1998, 2000, 2001, 2003, 2004, 2005, 2006,
a1dbe9d80eee [project @ 2007-10-12 21:27:11 by jwe]
jwe
parents: 7016
diff changeset
5 2007 John W. Eaton
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
6
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
7 This file is part of Octave.
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
8
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
9 Octave is free software; you can redistribute it and/or modify it
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
10 under the terms of the GNU General Public License as published by the
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
11 Free Software Foundation; either version 3 of the License, or (at your
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
12 option) any later version.
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
13
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
14 Octave is distributed in the hope that it will be useful, but WITHOUT
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
17 for more details.
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
18
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
19 You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
20 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
21 <http://www.gnu.org/licenses/>.
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
22
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
23 */
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
24
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
25 #if !defined (octave_mx_op_defs_h)
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
26 #define octave_mx_op_defs_h 1
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
27
8774
b756ce0002db split implementation and interface in mx-op-defs and MArray-defs
Jaroslav Hajek <highegg@gmail.com>
parents: 8397
diff changeset
28 #include "mx-op-decl.h"
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
29 #include "mx-inlines.cc"
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
30
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
31 #define ND_LOGICAL_NAN_CHECK(X) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
32 if (mx_inline_any_nan ((X).numel (), (X).data ())) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
33 gripe_nan_to_logical_conversion ()
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
34
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
35 #define SC_LOGICAL_NAN_CHECK(X) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
36 if (xisnan(X)) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
37 gripe_nan_to_logical_conversion ()
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
38
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
39 // vector by scalar operations.
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
40
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
41 #define VS_BIN_OP(R, F, OP, V, S) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
42 R \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
43 F (const V& v, const S& s) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
44 { \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
45 octave_idx_type len = v.length (); \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
46 \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
47 R r (len); \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
48 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
49 for (octave_idx_type i = 0; i < len; i++) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
50 r.elem(i) = v.elem(i) OP s; \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
51 \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
52 return r; \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
53 }
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
54
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
55 #define VS_BIN_OPS(R, V, S) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
56 VS_BIN_OP (R, operator +, +, V, S) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
57 VS_BIN_OP (R, operator -, -, V, S) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
58 VS_BIN_OP (R, operator *, *, V, S) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
59 VS_BIN_OP (R, operator /, /, V, S)
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
60
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
61 // scalar by vector by operations.
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
62
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
63 #define SV_BIN_OP(R, F, OP, S, V) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
64 R \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
65 F (const S& s, const V& v) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
66 { \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
67 octave_idx_type len = v.length (); \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
68 \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
69 R r (len); \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
70 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
71 for (octave_idx_type i = 0; i < len; i++) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
72 r.elem(i) = s OP v.elem(i); \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
73 \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
74 return r; \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
75 }
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
76
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
77 #define SV_BIN_OPS(R, S, V) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
78 SV_BIN_OP (R, operator +, +, S, V) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
79 SV_BIN_OP (R, operator -, -, S, V) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
80 SV_BIN_OP (R, operator *, *, S, V) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
81 SV_BIN_OP (R, operator /, /, S, V)
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
82
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
83 // vector by vector operations.
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
84
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
85 #define VV_BIN_OP(R, F, OP, V1, V2) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
86 R \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
87 F (const V1& v1, const V2& v2) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
88 { \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
89 R r; \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
90 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
91 octave_idx_type v1_len = v1.length (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
92 octave_idx_type v2_len = v2.length (); \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
93 \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
94 if (v1_len != v2_len) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
95 gripe_nonconformant (#OP, v1_len, v2_len); \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
96 else \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
97 { \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
98 r.resize (v1_len); \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
99 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
100 for (octave_idx_type i = 0; i < v1_len; i++) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
101 r.elem(i) = v1.elem(i) OP v2.elem(i); \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
102 } \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
103 \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
104 return r; \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
105 }
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
106
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
107 #define VV_BIN_OPS(R, V1, V2) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
108 VV_BIN_OP (R, operator +, +, V1, V2) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
109 VV_BIN_OP (R, operator -, -, V1, V2) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
110 VV_BIN_OP (R, product, *, V1, V2) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
111 VV_BIN_OP (R, quotient, /, V1, V2)
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
112
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
113 // matrix by scalar operations.
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
114
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
115 #define MS_BIN_OP(R, OP, M, S, F) \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
116 R \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
117 OP (const M& m, const S& s) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
118 { \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
119 return do_ms_binary_op<R, M, S> (m, s, F); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
120 }
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
121
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
122 #define MS_BIN_OPS(R, M, S) \
3769
7c8e3c42ed04 [project @ 2001-01-31 22:15:51 by jwe]
jwe
parents: 3585
diff changeset
123 MS_BIN_OP (R, operator +, M, S, mx_inline_add) \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
124 MS_BIN_OP (R, operator -, M, S, mx_inline_sub) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
125 MS_BIN_OP (R, operator *, M, S, mx_inline_mul) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
126 MS_BIN_OP (R, operator /, M, S, mx_inline_div)
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
127
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
128 #define MS_CMP_OP(F, OP, M, MC, S, SC) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
129 boolMatrix \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
130 F (const M& m, const S& s) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
131 { \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
132 boolMatrix r; \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
133 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
134 octave_idx_type nr = m.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
135 octave_idx_type nc = m.cols (); \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
136 \
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
137 r.resize (nr, nc); \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
138 \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
139 if (nr > 0 && nc > 0) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
140 { \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
141 for (octave_idx_type j = 0; j < nc; j++) \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
142 for (octave_idx_type i = 0; i < nr; i++) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
143 r.elem(i, j) = MC (m.elem(i, j)) OP SC (s); \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
144 } \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
145 \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
146 return r; \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
147 }
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
148
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
149 #define MS_CMP_OPS(M, CM, S, CS) \
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
150 MS_CMP_OP (mx_el_lt, <, M, CM, S, CS) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
151 MS_CMP_OP (mx_el_le, <=, M, CM, S, CS) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
152 MS_CMP_OP (mx_el_ge, >=, M, CM, S, CS) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
153 MS_CMP_OP (mx_el_gt, >, M, CM, S, CS) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
154 MS_CMP_OP (mx_el_eq, ==, M, , S, ) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
155 MS_CMP_OP (mx_el_ne, !=, M, , S, )
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
156
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
157 #define MS_BOOL_OP(F, OP, M, S) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
158 boolMatrix \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
159 F (const M& m, const S& s) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
160 { \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
161 ND_LOGICAL_NAN_CHECK (m); \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
162 SC_LOGICAL_NAN_CHECK (s); \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
163 return do_ms_binary_op<boolMatrix, M, S> (m, s, OP); \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
164 }
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
165
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
166 #define MS_BOOL_OPS(M, S) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
167 MS_BOOL_OP (mx_el_and, mx_inline_and, M, S) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
168 MS_BOOL_OP (mx_el_or, mx_inline_or, M, S)
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
169
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
170 // scalar by matrix operations.
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
171
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
172 #define SM_BIN_OP(R, OP, S, M, F) \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
173 R \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
174 OP (const S& s, const M& m) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
175 { \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
176 return do_sm_binary_op<R, S, M> (s, m, F); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
177 }
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
178
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
179 #define SM_BIN_OPS(R, S, M) \
3769
7c8e3c42ed04 [project @ 2001-01-31 22:15:51 by jwe]
jwe
parents: 3585
diff changeset
180 SM_BIN_OP (R, operator +, S, M, mx_inline_add) \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
181 SM_BIN_OP (R, operator -, S, M, mx_inline_sub) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
182 SM_BIN_OP (R, operator *, S, M, mx_inline_mul) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
183 SM_BIN_OP (R, operator /, S, M, mx_inline_div)
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
184
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
185 #define SM_CMP_OP(F, OP, S, SC, M, MC) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
186 boolMatrix \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
187 F (const S& s, const M& m) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
188 { \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
189 boolMatrix r; \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
190 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
191 octave_idx_type nr = m.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
192 octave_idx_type nc = m.cols (); \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
193 \
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
194 r.resize (nr, nc); \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
195 \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
196 if (nr > 0 && nc > 0) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
197 { \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
198 for (octave_idx_type j = 0; j < nc; j++) \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
199 for (octave_idx_type i = 0; i < nr; i++) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
200 r.elem(i, j) = SC (s) OP MC (m.elem(i, j)); \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
201 } \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
202 \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
203 return r; \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
204 }
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
205
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
206 #define SM_CMP_OPS(S, CS, M, CM) \
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
207 SM_CMP_OP (mx_el_lt, <, S, CS, M, CM) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
208 SM_CMP_OP (mx_el_le, <=, S, CS, M, CM) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
209 SM_CMP_OP (mx_el_ge, >=, S, CS, M, CM) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
210 SM_CMP_OP (mx_el_gt, >, S, CS, M, CM) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
211 SM_CMP_OP (mx_el_eq, ==, S, , M, ) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
212 SM_CMP_OP (mx_el_ne, !=, S, , M, )
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
213
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
214 #define SM_BOOL_OP(F, OP, S, M) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
215 boolMatrix \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
216 F (const S& s, const M& m) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
217 { \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
218 SC_LOGICAL_NAN_CHECK (s); \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
219 ND_LOGICAL_NAN_CHECK (m); \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
220 return do_sm_binary_op<boolMatrix, S, M> (s, m, OP); \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
221 }
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
222
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
223 #define SM_BOOL_OPS(S, M) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
224 SM_BOOL_OP (mx_el_and, mx_inline_and, S, M) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
225 SM_BOOL_OP (mx_el_or, mx_inline_or, S, M)
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
226
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
227 // matrix by matrix operations.
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
228
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
229 #define MM_BIN_OP(R, OP, M1, M2, F) \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
230 R \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
231 OP (const M1& m1, const M2& m2) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
232 { \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
233 return do_mm_binary_op<R, M1, M2> (m1, m2, F, #OP); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
234 }
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
235
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
236 #define MM_BIN_OPS(R, M1, M2) \
3769
7c8e3c42ed04 [project @ 2001-01-31 22:15:51 by jwe]
jwe
parents: 3585
diff changeset
237 MM_BIN_OP (R, operator +, M1, M2, mx_inline_add) \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
238 MM_BIN_OP (R, operator -, M1, M2, mx_inline_sub) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
239 MM_BIN_OP (R, product, M1, M2, mx_inline_mul) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
240 MM_BIN_OP (R, quotient, M1, M2, mx_inline_div)
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
241
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
242 #define MM_CMP_OP(F, OP, M1, C1, M2, C2) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
243 boolMatrix \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
244 F (const M1& m1, const M2& m2) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
245 { \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
246 boolMatrix r; \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
247 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
248 octave_idx_type m1_nr = m1.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
249 octave_idx_type m1_nc = m1.cols (); \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
250 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
251 octave_idx_type m2_nr = m2.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
252 octave_idx_type m2_nc = m2.cols (); \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
253 \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
254 if (m1_nr == m2_nr && m1_nc == m2_nc) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
255 { \
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
256 r.resize (m1_nr, m1_nc); \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
257 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
258 for (octave_idx_type j = 0; j < m1_nc; j++) \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
259 for (octave_idx_type i = 0; i < m1_nr; i++) \
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
260 r.elem(i, j) = C1 (m1.elem(i, j)) OP C2 (m2.elem(i, j)); \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
261 } \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
262 else \
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
263 gripe_nonconformant (#F, m1_nr, m1_nc, m2_nr, m2_nc); \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
264 \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
265 return r; \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
266 }
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
267
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
268 #define MM_CMP_OPS(M1, C1, M2, C2) \
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
269 MM_CMP_OP (mx_el_lt, <, M1, C1, M2, C2) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
270 MM_CMP_OP (mx_el_le, <=, M1, C1, M2, C2) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
271 MM_CMP_OP (mx_el_ge, >=, M1, C1, M2, C2) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
272 MM_CMP_OP (mx_el_gt, >, M1, C1, M2, C2) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
273 MM_CMP_OP (mx_el_eq, ==, M1, , M2, ) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
274 MM_CMP_OP (mx_el_ne, !=, M1, , M2, )
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
275
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
276 #define MM_BOOL_OP(F, OP, M1, M2) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
277 boolMatrix \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
278 F (const M1& m1, const M2& m2) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
279 { \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
280 ND_LOGICAL_NAN_CHECK(m1); \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
281 ND_LOGICAL_NAN_CHECK(m2); \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
282 return do_mm_binary_op<boolMatrix, M1, M2> (m1, m2, OP, #F); \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
283 }
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
284
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
285 #define MM_BOOL_OPS(M1, M2) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
286 MM_BOOL_OP (mx_el_and, mx_inline_and, M1, M2) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
287 MM_BOOL_OP (mx_el_or, mx_inline_or, M1, M2)
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
288
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
289 // N-d matrix by scalar operations.
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
290
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
291 #define NDS_BIN_OP(R, OP, ND, S, F) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
292 R \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
293 OP (const ND& m, const S& s) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
294 { \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
295 return do_ms_binary_op<R, ND, S> (m, s, F); \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
296 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
297
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
298 #define NDS_BIN_OPS(R, ND, S) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
299 NDS_BIN_OP (R, operator +, ND, S, mx_inline_add) \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
300 NDS_BIN_OP (R, operator -, ND, S, mx_inline_sub) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
301 NDS_BIN_OP (R, operator *, ND, S, mx_inline_mul) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
302 NDS_BIN_OP (R, operator /, ND, S, mx_inline_div)
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
303
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
304 #define NDS_CMP_OP(F, OP, ND, NDC, S, SC) \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
305 boolNDArray \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
306 F (const ND& m, const S& s) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
307 { \
8983
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
308 boolNDArray r (m.dims ()); \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
309 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
310 octave_idx_type len = m.length (); \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
311 \
8983
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
312 if (s == S ()) \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
313 { \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
314 for (octave_idx_type i = 0; i < len; i++) \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
315 r.xelem(i) = NDC (m.elem(i)) OP SC (S ()); \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
316 } \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
317 else \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
318 { \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
319 for (octave_idx_type i = 0; i < len; i++) \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
320 r.xelem(i) = NDC (m.elem(i)) OP SC (s); \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
321 } \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
322 \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
323 return r; \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
324 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
325
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
326 #define NDS_CMP_OPS(ND, NDC, S, SC) \
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
327 NDS_CMP_OP (mx_el_lt, <, ND, NDC, S, SC) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
328 NDS_CMP_OP (mx_el_le, <=, ND, NDC, S, SC) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
329 NDS_CMP_OP (mx_el_ge, >=, ND, NDC, S, SC) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
330 NDS_CMP_OP (mx_el_gt, >, ND, NDC, S, SC) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
331 NDS_CMP_OP (mx_el_eq, ==, ND, , S, ) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
332 NDS_CMP_OP (mx_el_ne, !=, ND, , S, )
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
333
6119
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
334 #define NDS_CMP_OP1(F, OP, ND, NDC, S, SC, SPEC) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
335 boolNDArray \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
336 F (const ND& m, const S& s) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
337 { \
8983
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
338 boolNDArray r (m.dims ()); \
6119
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
339 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
340 octave_idx_type len = m.length (); \
6119
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
341 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
342 for (octave_idx_type i = 0; i < len; i++) \
6119
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
343 r.elem(i) = operator OP <SPEC> (NDC (m.elem(i)), SC (s)); \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
344 \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
345 return r; \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
346 }
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
347
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
348 #define NDS_CMP_OPS1(ND, NDC, S, SC, SPEC) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
349 NDS_CMP_OP1 (mx_el_lt, <, ND, NDC, S, SC, SPEC) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
350 NDS_CMP_OP1 (mx_el_le, <=, ND, NDC, S, SC, SPEC) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
351 NDS_CMP_OP1 (mx_el_ge, >=, ND, NDC, S, SC, SPEC) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
352 NDS_CMP_OP1 (mx_el_gt, >, ND, NDC, S, SC, SPEC) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
353 NDS_CMP_OP1 (mx_el_eq, ==, ND, , S, , SPEC) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
354 NDS_CMP_OP1 (mx_el_ne, !=, ND, , S, , SPEC)
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
355
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
356 #define NDS_CMP_OP2(F, OP, ND, NDC, S, SC, SPEC1, SPEC2) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
357 boolNDArray \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
358 F (const ND& m, const S& s) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
359 { \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
360 boolNDArray r; \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
361 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
362 octave_idx_type len = m.length (); \
6119
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
363 \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
364 r.resize (m.dims ()); \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
365 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
366 for (octave_idx_type i = 0; i < len; i++) \
6119
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
367 r.elem(i) = operator OP <SPEC1,SPEC2> (NDC (m.elem(i)), SC (s)); \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
368 \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
369 return r; \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
370 }
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
371
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
372 #define NDS_CMP_OPS2(ND, NDC, S, SC, SPEC1, SPEC2) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
373 NDS_CMP_OP2 (mx_el_lt, <, ND, NDC, S, SC, SPEC1, SPEC2) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
374 NDS_CMP_OP2 (mx_el_le, <=, ND, NDC, S, SC, SPEC1, SPEC2) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
375 NDS_CMP_OP2 (mx_el_ge, >=, ND, NDC, S, SC, SPEC1, SPEC2) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
376 NDS_CMP_OP2 (mx_el_gt, >, ND, NDC, S, SC, SPEC1, SPEC2) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
377 NDS_CMP_OP2 (mx_el_eq, ==, ND, , S, , SPEC1, SPEC2) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
378 NDS_CMP_OP2 (mx_el_ne, !=, ND, , S, , SPEC1, SPEC2)
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
379
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
380 #define NDS_BOOL_OP(F, OP, ND, S) \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
381 boolNDArray \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
382 F (const ND& m, const S& s) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
383 { \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
384 ND_LOGICAL_NAN_CHECK (m); \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
385 SC_LOGICAL_NAN_CHECK (s); \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
386 return do_ms_binary_op<boolNDArray, ND, S> (m, s, OP); \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
387 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
388
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
389 #define NDS_BOOL_OPS(ND, S) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
390 NDS_BOOL_OP (mx_el_and, mx_inline_and, ND, S) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
391 NDS_BOOL_OP (mx_el_or, mx_inline_or, ND, S) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
392 NDS_BOOL_OP (mx_el_not_and, mx_inline_not_and, ND, S) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
393 NDS_BOOL_OP (mx_el_not_or, mx_inline_not_or, ND, S) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
394 NDS_BOOL_OP (mx_el_and_not, mx_inline_and_not, ND, S) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
395 NDS_BOOL_OP (mx_el_or_not, mx_inline_or_not, ND, S)
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
396
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
397 // scalar by N-d matrix operations.
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
398
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
399 #define SND_BIN_OP(R, OP, S, ND, F) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
400 R \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
401 OP (const S& s, const ND& m) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
402 { \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
403 return do_sm_binary_op<R, S, ND> (s, m, F); \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
404 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
405
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
406 #define SND_BIN_OPS(R, S, ND) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
407 SND_BIN_OP (R, operator +, S, ND, mx_inline_add) \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
408 SND_BIN_OP (R, operator -, S, ND, mx_inline_sub) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
409 SND_BIN_OP (R, operator *, S, ND, mx_inline_mul) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
410 SND_BIN_OP (R, operator /, S, ND, mx_inline_div)
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
411
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
412 #define SND_CMP_OP(F, OP, S, SC, ND, NDC) \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
413 boolNDArray \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
414 F (const S& s, const ND& m) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
415 { \
8983
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
416 boolNDArray r (m.dims ()); \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
417 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
418 octave_idx_type len = m.length (); \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
419 \
8983
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
420 if (s == S ()) \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
421 { \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
422 for (octave_idx_type i = 0; i < len; i++) \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
423 r.xelem(i) = SC (S ()) OP NDC (m.elem(i)); \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
424 } \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
425 else \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
426 { \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
427 for (octave_idx_type i = 0; i < len; i++) \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
428 r.xelem(i) = SC (s) OP NDC (m.elem(i)); \
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
429 } \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
430 \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
431 return r; \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
432 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
433
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
434 #define SND_CMP_OPS(S, CS, ND, CND) \
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
435 SND_CMP_OP (mx_el_lt, <, S, CS, ND, CND) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
436 SND_CMP_OP (mx_el_le, <=, S, CS, ND, CND) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
437 SND_CMP_OP (mx_el_ge, >=, S, CS, ND, CND) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
438 SND_CMP_OP (mx_el_gt, >, S, CS, ND, CND) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
439 SND_CMP_OP (mx_el_eq, ==, S, , ND, ) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
440 SND_CMP_OP (mx_el_ne, !=, S, , ND, )
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
441
6119
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
442 #define SND_CMP_OP1(F, OP, S, SC, ND, NDC, SPEC) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
443 boolNDArray \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
444 F (const S& s, const ND& m) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
445 { \
8983
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
446 boolNDArray r (m.dims ()); \
6119
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
447 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
448 octave_idx_type len = m.length (); \
6119
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
449 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
450 for (octave_idx_type i = 0; i < len; i++) \
6119
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
451 r.elem(i) = operator OP <SPEC> (SC (s), NDC (m.elem(i))); \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
452 \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
453 return r; \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
454 }
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
455
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
456 #define SND_CMP_OPS1(S, CS, ND, CND, SPEC) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
457 SND_CMP_OP1 (mx_el_lt, <, S, CS, ND, CND, SPEC) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
458 SND_CMP_OP1 (mx_el_le, <=, S, CS, ND, CND, SPEC) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
459 SND_CMP_OP1 (mx_el_ge, >=, S, CS, ND, CND, SPEC) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
460 SND_CMP_OP1 (mx_el_gt, >, S, CS, ND, CND, SPEC) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
461 SND_CMP_OP1 (mx_el_eq, ==, S, , ND, , SPEC) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
462 SND_CMP_OP1 (mx_el_ne, !=, S, , ND, , SPEC)
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
463
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
464 #define SND_CMP_OP2(F, OP, S, SC, ND, NDC, SPEC1, SPEC2) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
465 boolNDArray \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
466 F (const S& s, const ND& m) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
467 { \
8983
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
468 boolNDArray r (m.dims ()); \
6119
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
469 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
470 octave_idx_type len = m.length (); \
6119
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
471 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
472 for (octave_idx_type i = 0; i < len; i++) \
6119
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
473 r.elem(i) = operator OP <SPEC1, SPEC2> (SC (s), NDC (m.elem(i))); \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
474 \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
475 return r; \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
476 }
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
477
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
478 #define SND_CMP_OPS2(S, CS, ND, CND, SPEC1, SPEC2) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
479 SND_CMP_OP2 (mx_el_lt, <, S, CS, ND, CND, SPEC1, SPEC2) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
480 SND_CMP_OP2 (mx_el_le, <=, S, CS, ND, CND, SPEC1, SPEC2) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
481 SND_CMP_OP2 (mx_el_ge, >=, S, CS, ND, CND, SPEC1, SPEC2) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
482 SND_CMP_OP2 (mx_el_gt, >, S, CS, ND, CND, SPEC1, SPEC2) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
483 SND_CMP_OP2 (mx_el_eq, ==, S, , ND, , SPEC1, SPEC2) \
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
484 SND_CMP_OP2 (mx_el_ne, !=, S, , ND, , SPEC1, SPEC2)
fabb1be5fd84 [project @ 2006-10-28 00:13:58 by jwe]
jwe
parents: 6108
diff changeset
485
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
486 #define SND_BOOL_OP(F, OP, S, ND) \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
487 boolNDArray \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
488 F (const S& s, const ND& m) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
489 { \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
490 SC_LOGICAL_NAN_CHECK (s); \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
491 ND_LOGICAL_NAN_CHECK (m); \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
492 return do_sm_binary_op<boolNDArray, S, ND> (s, m, OP); \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
493 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
494
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
495 #define SND_BOOL_OPS(S, ND) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
496 SND_BOOL_OP (mx_el_and, mx_inline_and, S, ND) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
497 SND_BOOL_OP (mx_el_or, mx_inline_or, S, ND) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
498 SND_BOOL_OP (mx_el_not_and, mx_inline_not_and, S, ND) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
499 SND_BOOL_OP (mx_el_not_or, mx_inline_not_or, S, ND) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
500 SND_BOOL_OP (mx_el_and_not, mx_inline_and_not, S, ND) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
501 SND_BOOL_OP (mx_el_or_not, mx_inline_or_not, S, ND)
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
502
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
503 // N-d matrix by N-d matrix operations.
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
504
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
505 #define NDND_BIN_OP(R, OP, ND1, ND2, F) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
506 R \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
507 OP (const ND1& m1, const ND2& m2) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
508 { \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
509 return do_mm_binary_op<R, ND1, ND2> (m1, m2, F, #OP); \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
510 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
511
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
512 #define NDND_BIN_OPS(R, ND1, ND2) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
513 NDND_BIN_OP (R, operator +, ND1, ND2, mx_inline_add) \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
514 NDND_BIN_OP (R, operator -, ND1, ND2, mx_inline_sub) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
515 NDND_BIN_OP (R, product, ND1, ND2, mx_inline_mul) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
516 NDND_BIN_OP (R, quotient, ND1, ND2, mx_inline_div)
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
517
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
518 #define NDND_CMP_OP(F, OP, ND1, C1, ND2, C2) \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
519 boolNDArray \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
520 F (const ND1& m1, const ND2& m2) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
521 { \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
522 boolNDArray r; \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
523 \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
524 dim_vector m1_dims = m1.dims (); \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
525 dim_vector m2_dims = m2.dims (); \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
526 \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
527 if (m1_dims == m2_dims) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
528 { \
8983
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
529 r = boolNDArray (m1_dims); \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
530 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
531 for (octave_idx_type i = 0; i < m1.length (); i++) \
8983
e781ab1aee39 optimize comparison ops
Jaroslav Hajek <highegg@gmail.com>
parents: 8982
diff changeset
532 r.xelem(i) = C1 (m1.elem(i)) OP C2 (m2.elem(i)); \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
533 } \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
534 else \
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
535 gripe_nonconformant (#F, m1_dims, m2_dims); \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
536 \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
537 return r; \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
538 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
539
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
540 #define NDND_CMP_OPS(ND1, C1, ND2, C2) \
4826
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
541 NDND_CMP_OP (mx_el_lt, <, ND1, C1, ND2, C2) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
542 NDND_CMP_OP (mx_el_le, <=, ND1, C1, ND2, C2) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
543 NDND_CMP_OP (mx_el_ge, >=, ND1, C1, ND2, C2) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
544 NDND_CMP_OP (mx_el_gt, >, ND1, C1, ND2, C2) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
545 NDND_CMP_OP (mx_el_eq, ==, ND1, , ND2, ) \
a7b1e6122d0c [project @ 2004-03-09 19:57:29 by jwe]
jwe
parents: 4543
diff changeset
546 NDND_CMP_OP (mx_el_ne, !=, ND1, , ND2, )
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
547
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
548 #define NDND_BOOL_OP(F, OP, ND1, ND2) \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
549 boolNDArray \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
550 F (const ND1& m1, const ND2& m2) \
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
551 { \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
552 ND_LOGICAL_NAN_CHECK(m1); \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
553 ND_LOGICAL_NAN_CHECK(m2); \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
554 return do_mm_binary_op<boolNDArray, ND1, ND2> (m1, m2, OP, #F); \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
555 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
556
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
557 #define NDND_BOOL_OPS(ND1, ND2) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
558 NDND_BOOL_OP (mx_el_and, mx_inline_and, ND1, ND2) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
559 NDND_BOOL_OP (mx_el_or, mx_inline_or, ND1, ND2) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
560 NDND_BOOL_OP (mx_el_not_and, mx_inline_not_and, ND1, ND2) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
561 NDND_BOOL_OP (mx_el_not_or, mx_inline_not_or, ND1, ND2) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
562 NDND_BOOL_OP (mx_el_and_not, mx_inline_and_not, ND1, ND2) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
563 NDND_BOOL_OP (mx_el_or_not, mx_inline_or_not, ND1, ND2)
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
564
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
565 // scalar by diagonal matrix operations.
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
566
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
567 #define SDM_BIN_OP(R, OP, S, DM, OPEQ) \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
568 R \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
569 OP (const S& s, const DM& dm) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
570 { \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
571 octave_idx_type nr = dm.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
572 octave_idx_type nc = dm.cols (); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
573 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
574 R r (nr, nc, s); \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
575 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
576 for (octave_idx_type i = 0; i < dm.length (); i++) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
577 r.elem(i, i) OPEQ dm.elem(i, i); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
578 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
579 return r; \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
580 }
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
581
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
582 #define SDM_BIN_OPS(R, S, DM) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
583 SDM_BIN_OP (R, operator +, S, DM, +=) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
584 SDM_BIN_OP (R, operator -, S, DM, -=)
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
585
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
586 // diagonal matrix by scalar operations.
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
587
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
588 #define DMS_BIN_OP(R, OP, DM, S, SGN) \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
589 R \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
590 OP (const DM& dm, const S& s) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
591 { \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
592 octave_idx_type nr = dm.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
593 octave_idx_type nc = dm.cols (); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
594 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
595 R r (nr, nc, SGN s); \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
596 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
597 for (octave_idx_type i = 0; i < dm.length (); i++) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
598 r.elem(i, i) += dm.elem(i, i); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
599 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
600 return r; \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
601 }
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
602
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
603 #define DMS_BIN_OPS(R, DM, S) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
604 DMS_BIN_OP (R, operator +, DM, S, ) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
605 DMS_BIN_OP (R, operator -, DM, S, -)
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
606
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
607 // matrix by diagonal matrix operations.
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
608
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
609 #define MDM_BIN_OP(R, OP, M, DM, OPEQ) \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
610 R \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
611 OP (const M& m, const DM& dm) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
612 { \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
613 R r; \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
614 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
615 octave_idx_type m_nr = m.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
616 octave_idx_type m_nc = m.cols (); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
617 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
618 octave_idx_type dm_nr = dm.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
619 octave_idx_type dm_nc = dm.cols (); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
620 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
621 if (m_nr != dm_nr || m_nc != dm_nc) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
622 gripe_nonconformant (#OP, m_nr, m_nc, dm_nr, dm_nc); \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
623 else \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
624 { \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
625 r.resize (m_nr, m_nc); \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
626 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
627 if (m_nr > 0 && m_nc > 0) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
628 { \
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3582
diff changeset
629 r = R (m); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
630 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
631 octave_idx_type len = dm.length (); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
632 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
633 for (octave_idx_type i = 0; i < len; i++) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
634 r.elem(i, i) OPEQ dm.elem(i, i); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
635 } \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
636 } \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
637 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
638 return r; \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
639 }
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
640
5030
160365410ad4 [project @ 2004-09-24 03:22:23 by jwe]
jwe
parents: 4826
diff changeset
641 #define MDM_MULTIPLY_OP(R, M, DM, R_ZERO) \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
642 R \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
643 operator * (const M& m, const DM& dm) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
644 { \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
645 R r; \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
646 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
647 octave_idx_type m_nr = m.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
648 octave_idx_type m_nc = m.cols (); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
649 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
650 octave_idx_type dm_nr = dm.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
651 octave_idx_type dm_nc = dm.cols (); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
652 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
653 if (m_nc != dm_nr) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
654 gripe_nonconformant ("operator *", m_nr, m_nc, dm_nr, dm_nc); \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
655 else \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
656 { \
8366
8b1a2555c4e2 implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 7922
diff changeset
657 r = R (m_nr, dm_nc); \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
658 R::element_type *rd = r.fortran_vec (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
659 const M::element_type *md = m.data (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
660 const DM::element_type *dd = dm.data (); \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
661 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
662 octave_idx_type len = dm.length (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
663 for (octave_idx_type i = 0; i < len; i++) \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
664 { \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
665 mx_inline_mul (m_nr, rd, md, dd[i]); \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
666 rd += m_nr; md += m_nr; \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
667 } \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
668 mx_inline_fill (m_nr * (dm_nc - len), rd, R_ZERO); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
669 } \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
670 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
671 return r; \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
672 }
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
673
5030
160365410ad4 [project @ 2004-09-24 03:22:23 by jwe]
jwe
parents: 4826
diff changeset
674 #define MDM_BIN_OPS(R, M, DM, R_ZERO) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
675 MDM_BIN_OP (R, operator +, M, DM, +=) \
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
676 MDM_BIN_OP (R, operator -, M, DM, -=) \
5030
160365410ad4 [project @ 2004-09-24 03:22:23 by jwe]
jwe
parents: 4826
diff changeset
677 MDM_MULTIPLY_OP (R, M, DM, R_ZERO)
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
678
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
679 // diagonal matrix by matrix operations.
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
680
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3582
diff changeset
681 #define DMM_BIN_OP(R, OP, DM, M, OPEQ, PREOP) \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
682 R \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
683 OP (const DM& dm, const M& m) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
684 { \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
685 R r; \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
686 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
687 octave_idx_type dm_nr = dm.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
688 octave_idx_type dm_nc = dm.cols (); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
689 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
690 octave_idx_type m_nr = m.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
691 octave_idx_type m_nc = m.cols (); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
692 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
693 if (dm_nr != m_nr || dm_nc != m_nc) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
694 gripe_nonconformant (#OP, dm_nr, dm_nc, m_nr, m_nc); \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
695 else \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
696 { \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
697 if (m_nr > 0 && m_nc > 0) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
698 { \
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3582
diff changeset
699 r = R (PREOP m); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
700 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
701 octave_idx_type len = dm.length (); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
702 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
703 for (octave_idx_type i = 0; i < len; i++) \
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
704 r.elem(i, i) OPEQ dm.elem(i, i); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
705 } \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
706 else \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
707 r.resize (m_nr, m_nc); \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
708 } \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
709 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
710 return r; \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
711 }
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
712
5030
160365410ad4 [project @ 2004-09-24 03:22:23 by jwe]
jwe
parents: 4826
diff changeset
713 #define DMM_MULTIPLY_OP(R, DM, M, R_ZERO) \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
714 R \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
715 operator * (const DM& dm, const M& m) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
716 { \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
717 R r; \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
718 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
719 octave_idx_type dm_nr = dm.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
720 octave_idx_type dm_nc = dm.cols (); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
721 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
722 octave_idx_type m_nr = m.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
723 octave_idx_type m_nc = m.cols (); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
724 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
725 if (dm_nc != m_nr) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
726 gripe_nonconformant ("operator *", dm_nr, dm_nc, m_nr, m_nc); \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
727 else \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
728 { \
8366
8b1a2555c4e2 implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 7922
diff changeset
729 r = R (dm_nr, m_nc); \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
730 R::element_type *rd = r.fortran_vec (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
731 const M::element_type *md = m.data (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
732 const DM::element_type *dd = dm.data (); \
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 3769
diff changeset
733 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
734 octave_idx_type len = dm.length (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
735 for (octave_idx_type i = 0; i < m_nc; i++) \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
736 { \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
737 mx_inline_mul (len, rd, md, dd); \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
738 rd += len; md += m_nr; \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
739 mx_inline_fill (dm_nr - len, rd, R_ZERO); \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
740 rd += dm_nr - len; \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
741 } \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
742 } \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
743 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
744 return r; \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
745 }
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
746
5030
160365410ad4 [project @ 2004-09-24 03:22:23 by jwe]
jwe
parents: 4826
diff changeset
747 #define DMM_BIN_OPS(R, DM, M, R_ZERO) \
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3582
diff changeset
748 DMM_BIN_OP (R, operator +, DM, M, +=, ) \
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3582
diff changeset
749 DMM_BIN_OP (R, operator -, DM, M, +=, -) \
5030
160365410ad4 [project @ 2004-09-24 03:22:23 by jwe]
jwe
parents: 4826
diff changeset
750 DMM_MULTIPLY_OP (R, DM, M, R_ZERO)
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
751
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
752 // diagonal matrix by diagonal matrix operations.
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
753
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
754 #define DMDM_BIN_OP(R, OP, DM1, DM2, F) \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
755 R \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
756 OP (const DM1& dm1, const DM2& dm2) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
757 { \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
758 R r; \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
759 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
760 octave_idx_type dm1_nr = dm1.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
761 octave_idx_type dm1_nc = dm1.cols (); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
762 \
8380
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
763 octave_idx_type dm2_nr = dm2.rows (); \
dbe67764e628 fix & improve speed of diagonal matrix multiplication
Jaroslav Hajek <highegg@gmail.com>
parents: 8375
diff changeset
764 octave_idx_type dm2_nc = dm2.cols (); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
765 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
766 if (dm1_nr != dm2_nr || dm1_nc != dm2_nc) \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
767 gripe_nonconformant (#OP, dm1_nr, dm1_nc, dm2_nr, dm2_nc); \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
768 else \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
769 { \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
770 r.resize (dm1_nr, dm1_nc); \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
771 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
772 if (dm1_nr > 0 && dm1_nc > 0) \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
773 F (dm1.length (), r.fortran_vec (), dm1.data (), dm2.data ()); \
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
774 } \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
775 \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
776 return r; \
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
777 }
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
778
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
779 #define DMDM_BIN_OPS(R, DM1, DM2) \
3769
7c8e3c42ed04 [project @ 2001-01-31 22:15:51 by jwe]
jwe
parents: 3585
diff changeset
780 DMDM_BIN_OP (R, operator +, DM1, DM2, mx_inline_add) \
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
781 DMDM_BIN_OP (R, operator -, DM1, DM2, mx_inline_sub) \
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 8998
diff changeset
782 DMDM_BIN_OP (R, product, DM1, DM2, mx_inline_mul)
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
783
8774
b756ce0002db split implementation and interface in mx-op-defs and MArray-defs
Jaroslav Hajek <highegg@gmail.com>
parents: 8397
diff changeset
784 // scalar by N-d array min/max ops
3582
a93683ccc9ba [project @ 2000-02-05 10:00:49 by jwe]
jwe
parents: 3504
diff changeset
785
7189
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
786 #define SND_MINMAX_FCN(FCN, OP, T) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
787 T ## NDArray \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
788 FCN (octave_ ## T d, const T ## NDArray& m) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
789 { \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
790 dim_vector dv = m.dims (); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
791 octave_idx_type nel = dv.numel (); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
792 \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
793 if (nel == 0) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
794 return T ## NDArray (dv); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
795 \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
796 T ## NDArray result (dv); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
797 \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
798 for (octave_idx_type i = 0; i < nel; i++) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
799 { \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
800 OCTAVE_QUIT; \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
801 result (i) = d OP m (i) ? d : m(i); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
802 } \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
803 \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
804 return result; \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
805 }
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
806
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
807 #define NDS_MINMAX_FCN(FCN, OP, T) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
808 T ## NDArray \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
809 FCN (const T ## NDArray& m, octave_ ## T d) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
810 { \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
811 dim_vector dv = m.dims (); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
812 octave_idx_type nel = dv.numel (); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
813 \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
814 if (nel == 0) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
815 return T ## NDArray (dv); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
816 \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
817 T ## NDArray result (dv); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
818 \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
819 for (octave_idx_type i = 0; i < nel; i++) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
820 { \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
821 OCTAVE_QUIT; \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
822 result (i) = m (i) OP d ? m(i) : d; \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
823 } \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
824 \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
825 return result; \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
826 }
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
827
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
828 #define NDND_MINMAX_FCN(FCN, OP, T) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
829 T ## NDArray \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
830 FCN (const T ## NDArray& a, const T ## NDArray& b) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
831 { \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
832 dim_vector dv = a.dims (); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
833 octave_idx_type nel = dv.numel (); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
834 \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
835 if (dv != b.dims ()) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
836 { \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
837 (*current_liboctave_error_handler) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
838 ("two-arg min expecting args of same size"); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
839 return T ## NDArray (); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
840 } \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
841 \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
842 if (nel == 0) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
843 return T ## NDArray (dv); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
844 \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
845 T ## NDArray result (dv); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
846 \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
847 for (octave_idx_type i = 0; i < nel; i++) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
848 { \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
849 OCTAVE_QUIT; \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
850 result (i) = a(i) OP b(i) ? a(i) : b(i); \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
851 } \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
852 \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
853 return result; \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
854 }
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
855
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
856 #define MINMAX_FCNS(T) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
857 SND_MINMAX_FCN (min, <, T) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
858 NDS_MINMAX_FCN (min, <, T) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
859 NDND_MINMAX_FCN (min, <, T) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
860 SND_MINMAX_FCN (max, >, T) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
861 NDS_MINMAX_FCN (max, >, T) \
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
862 NDND_MINMAX_FCN (max, >, T)
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
863
8774
b756ce0002db split implementation and interface in mx-op-defs and MArray-defs
Jaroslav Hajek <highegg@gmail.com>
parents: 8397
diff changeset
864 // permutation matrix by matrix ops and vice versa
7189
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
865
8367
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
866 #define PMM_MULTIPLY_OP(PM, M) \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
867 M operator * (const PM& p, const M& x) \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
868 { \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
869 octave_idx_type nr = x.rows (), nc = x.columns (); \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
870 M result; \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
871 if (p.columns () != nr) \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
872 gripe_nonconformant ("operator *", p.rows (), p.columns (), nr, nc); \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
873 else \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
874 { \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
875 if (p.is_col_perm ()) \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
876 { \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
877 result = M (nr, nc); \
8375
e3c9102431a9 fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents: 8367
diff changeset
878 result.assign (p.pvec (), idx_vector::colon, x); \
8367
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
879 } \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
880 else \
8375
e3c9102431a9 fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents: 8367
diff changeset
881 result = x.index (p.pvec (), idx_vector::colon); \
8367
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
882 } \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
883 \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
884 return result; \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
885 }
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
886
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
887 #define MPM_MULTIPLY_OP(M, PM) \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
888 M operator * (const M& x, const PM& p) \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
889 { \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
890 octave_idx_type nr = x.rows (), nc = x.columns (); \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
891 M result; \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
892 if (p.rows () != nc) \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
893 gripe_nonconformant ("operator *", nr, nc, p.rows (), p.columns ()); \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
894 else \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
895 { \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
896 if (p.is_col_perm ()) \
8375
e3c9102431a9 fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents: 8367
diff changeset
897 result = x.index (idx_vector::colon, p.pvec ()); \
8367
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
898 else \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
899 { \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
900 result = M (nr, nc); \
8375
e3c9102431a9 fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents: 8367
diff changeset
901 result.assign (idx_vector::colon, p.pvec (), x); \
8367
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
902 } \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
903 } \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
904 \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
905 return result; \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
906 }
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
907
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
908 #define PMM_BIN_OPS(R, PM, M) \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
909 PMM_MULTIPLY_OP(PM, M);
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
910
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
911 #define MPM_BIN_OPS(R, M, PM) \
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
912 MPM_MULTIPLY_OP(M, PM);
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8366
diff changeset
913
8998
a48fba01e4ac optimize isnan/isinf/isfinite mappers
Jaroslav Hajek <highegg@gmail.com>
parents: 8983
diff changeset
914 #define NDND_MAPPER_BODY(R, NAME) \
a48fba01e4ac optimize isnan/isinf/isfinite mappers
Jaroslav Hajek <highegg@gmail.com>
parents: 8983
diff changeset
915 R retval (dims ()); \
a48fba01e4ac optimize isnan/isinf/isfinite mappers
Jaroslav Hajek <highegg@gmail.com>
parents: 8983
diff changeset
916 octave_idx_type n = numel (); \
a48fba01e4ac optimize isnan/isinf/isfinite mappers
Jaroslav Hajek <highegg@gmail.com>
parents: 8983
diff changeset
917 for (octave_idx_type i = 0; i < n; i++) \
a48fba01e4ac optimize isnan/isinf/isfinite mappers
Jaroslav Hajek <highegg@gmail.com>
parents: 8983
diff changeset
918 retval.xelem (i) = NAME (elem (i)); \
a48fba01e4ac optimize isnan/isinf/isfinite mappers
Jaroslav Hajek <highegg@gmail.com>
parents: 8983
diff changeset
919 return retval;
a48fba01e4ac optimize isnan/isinf/isfinite mappers
Jaroslav Hajek <highegg@gmail.com>
parents: 8983
diff changeset
920
8774
b756ce0002db split implementation and interface in mx-op-defs and MArray-defs
Jaroslav Hajek <highegg@gmail.com>
parents: 8397
diff changeset
921 #endif
b756ce0002db split implementation and interface in mx-op-defs and MArray-defs
Jaroslav Hajek <highegg@gmail.com>
parents: 8397
diff changeset
922
7189
e8d953d03f6a [project @ 2007-11-26 20:42:09 by dbateman]
dbateman
parents: 7017
diff changeset
923
2829
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
924 /*
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
925 ;;; Local Variables: ***
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
926 ;;; mode: C++ ***
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
927 ;;; End: ***
6655bdca97fb [project @ 1997-03-25 23:58:24 by jwe]
jwe
parents:
diff changeset
928 */