Mercurial > octave
annotate liboctave/array/MSparse.h @ 23220:092078913d54
maint: Merge stable to default.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 22 Feb 2017 12:58:07 -0500 |
parents | ef4d915df748 3ac9f9ecfae5 |
children | 3f1bf237908b |
rev | line source |
---|---|
5164 | 1 /* |
2 | |
23219
3ac9f9ecfae5
maint: Update copyright dates.
John W. Eaton <jwe@octave.org>
parents:
23083
diff
changeset
|
3 Copyright (C) 2004-2017 David Bateman |
11523 | 4 Copyright (C) 1998-2004 Andy Adler |
7016 | 5 |
6 This file is part of Octave. | |
5164 | 7 |
8 Octave is free software; you can redistribute it and/or modify it | |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
9 under the terms of the GNU General Public License as published by |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
10 the Free Software Foundation; either version 3 of the License, or |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
11 (at your option) any later version. |
5164 | 12 |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
13 Octave is distributed in the hope that it will be useful, but |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
14 WITHOUT ANY WARRANTY; without even the implied warranty of |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
16 GNU General Public License for more details. |
5164 | 17 |
18 You should have received a copy of the GNU General Public License | |
7016 | 19 along with Octave; see the file COPYING. If not, see |
20 <http://www.gnu.org/licenses/>. | |
5164 | 21 |
22 */ | |
23 | |
20791
f7084eae3318
maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents:
20506
diff
changeset
|
24 #if ! defined (octave_MSparse_h) |
5164 | 25 #define octave_MSparse_h 1 |
26 | |
21244
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
27 #include "octave-config.h" |
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
28 |
20506
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
29 #include "quit.h" |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
30 #include "lo-error.h" |
5164 | 31 #include "Sparse.h" |
20506
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
32 #include "MArray.h" |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
33 #include "Array-util.h" |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
34 |
5164 | 35 |
36 // Two dimensional sparse array with math ops. | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
37 template <typename T> |
5164 | 38 class |
39 MSparse : public Sparse<T> | |
40 { | |
41 public: | |
42 | |
43 MSparse (void) : Sparse<T> () { } | |
44 | |
5275 | 45 MSparse (octave_idx_type n, octave_idx_type m) : Sparse<T> (n, m) { } |
5164 | 46 |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
47 MSparse (const dim_vector& dv, octave_idx_type nz = 0) |
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
48 : Sparse<T> (dv, nz) { } |
6823 | 49 |
5164 | 50 MSparse (const MSparse<T>& a) : Sparse<T> (a) { } |
51 | |
52 MSparse (const MSparse<T>& a, const dim_vector& dv) : Sparse<T> (a, dv) { } | |
53 | |
54 MSparse (const Sparse<T>& a) : Sparse<T> (a) { } | |
55 | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
56 template <typename U> |
10516
f0266ee4aabe
optimize some special indexing & assignment cases
Jaroslav Hajek <highegg@gmail.com>
parents:
10480
diff
changeset
|
57 MSparse (const Sparse<U>& a) : Sparse<T> (a) { } |
f0266ee4aabe
optimize some special indexing & assignment cases
Jaroslav Hajek <highegg@gmail.com>
parents:
10480
diff
changeset
|
58 |
10479
ded9beac7582
optimize sparse matrix assembly
Jaroslav Hajek <highegg@gmail.com>
parents:
10421
diff
changeset
|
59 MSparse (const Array<T>& a, const idx_vector& r, const idx_vector& c, |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
60 octave_idx_type nr = -1, octave_idx_type nc = -1, |
10527
b4d2080b6df7
Replace nzmax by nnz as needed
David Bateman <dbateman@free.fr>
parents:
10516
diff
changeset
|
61 bool sum_terms = true, octave_idx_type nzm = -1) |
b4d2080b6df7
Replace nzmax by nnz as needed
David Bateman <dbateman@free.fr>
parents:
10516
diff
changeset
|
62 : Sparse<T> (a, r, c, nr, nc, sum_terms, nzm) { } |
10479
ded9beac7582
optimize sparse matrix assembly
Jaroslav Hajek <highegg@gmail.com>
parents:
10421
diff
changeset
|
63 |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
64 explicit MSparse (octave_idx_type r, octave_idx_type c, T val) |
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
65 : Sparse<T> (r, c, val) { } |
5164 | 66 |
13030
b646413c3d0e
Make operators do smarter sparse conversions on permutation matrices.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
11586
diff
changeset
|
67 explicit MSparse (const PermMatrix& a) : Sparse<T>(a) { } |
b646413c3d0e
Make operators do smarter sparse conversions on permutation matrices.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
11586
diff
changeset
|
68 |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
69 MSparse (octave_idx_type r, octave_idx_type c, octave_idx_type num_nz) |
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
70 : Sparse<T> (r, c, num_nz) { } |
5164 | 71 |
22868
87e3163f6c87
use c++11 "= default" syntax for declaration of trivial destructors
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
72 ~MSparse (void) = default; |
5164 | 73 |
74 MSparse<T>& operator = (const MSparse<T>& a) | |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
75 { |
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
76 Sparse<T>::operator = (a); |
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
77 return *this; |
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
78 } |
5164 | 79 |
5275 | 80 MSparse<T>& insert (const Sparse<T>& a, octave_idx_type r, octave_idx_type c) |
5164 | 81 { |
82 Sparse<T>::insert (a, r, c); | |
83 return *this; | |
84 } | |
85 | |
6823 | 86 MSparse<T>& insert (const Sparse<T>& a, const Array<octave_idx_type>& indx) |
87 { | |
88 Sparse<T>::insert (a, indx); | |
89 return *this; | |
90 } | |
91 | |
5164 | 92 MSparse<T> transpose (void) const { return Sparse<T>::transpose (); } |
93 | |
94 MSparse<T> squeeze (void) const { return Sparse<T>::squeeze (); } | |
95 | |
96 MSparse<T> reshape (const dim_vector& new_dims) const | |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
97 { return Sparse<T>::reshape (new_dims); } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
98 |
5275 | 99 MSparse<T> permute (const Array<octave_idx_type>& vec, bool inv = false) const |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
100 { return Sparse<T>::permute (vec, inv); } |
5164 | 101 |
5275 | 102 MSparse<T> ipermute (const Array<octave_idx_type>& vec) const |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
103 { return Sparse<T>::ipermute (vec); } |
5164 | 104 |
7620
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7602
diff
changeset
|
105 MSparse<T> diag (octave_idx_type k = 0) const |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7602
diff
changeset
|
106 { |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7602
diff
changeset
|
107 return Sparse<T>::diag (k); |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7602
diff
changeset
|
108 } |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7602
diff
changeset
|
109 |
9812
f80c566bc751
improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
110 // FIXME: should go away. |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
111 template <typename U> |
9812
f80c566bc751
improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
112 MSparse<U> |
f80c566bc751
improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
113 map (U (&fcn) (T)) const |
f80c566bc751
improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
114 { return Sparse<T>::template map<U> (fcn); } |
f80c566bc751
improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
115 |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
116 template <typename U> |
9812
f80c566bc751
improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
117 MSparse<U> |
f80c566bc751
improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
118 map (U (&fcn) (const T&)) const |
f80c566bc751
improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
119 { return Sparse<T>::template map<U> (fcn); } |
5164 | 120 }; |
121 | |
20506
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
122 // Include operator templates for MSparse |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
123 #include "MSparse.cc" |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
124 |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
125 // A macro that can be used to declare and instantiate OP= operators. |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
126 #define SPARSE_OP_ASSIGN_DECL(T, OP, API) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
127 template API MSparse<T>& \ |
20506
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
128 operator OP (MSparse<T>&, const MSparse<T>&) |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
129 |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
130 // A macro that can be used to declare and instantiate unary operators. |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
131 #define SPARSE_UNOP_DECL(T, OP, API) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
132 template API MSparse<T> \ |
20506
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
133 operator OP (const MSparse<T>&) |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
134 |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
135 // A macro that can be used to declare and instantiate binary operators. |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
136 #define SPARSE_BINOP_DECL(A_T, T, F, API, X_T, Y_T) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
137 template API A_T<T> \ |
20506
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
138 F (const X_T&, const Y_T&) |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
139 |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
140 // A function that can be used to forward OP= operations from derived |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
141 // classes back to us. |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
142 #define SPARSE_OP_ASSIGN_FWD_FCN(R, F, T, C_X, X_T, C_Y, Y_T) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
143 inline R \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
144 F (X_T& x, const Y_T& y) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
145 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
146 return R (F (C_X (x), C_Y (y))); \ |
20506
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
147 } |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
148 |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
149 // A function that can be used to forward unary operations from derived |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
150 // classes back to us. |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
151 #define SPARSE_UNOP_FWD_FCN(R, F, T, C_X, X_T) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
152 inline R \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
153 F (const X_T& x) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
154 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
155 return R (F (C_X (x))); \ |
20506
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
156 } |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
157 |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
158 // A function that can be used to forward binary operations from derived |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
159 // classes back to us. |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
160 #define SPARSE_BINOP_FWD_FCN(R, F, T, C_X, X_T, C_Y, Y_T) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
161 inline R \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
162 F (const X_T& x, const Y_T& y) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
163 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
164 return R (F (C_X (x), C_Y (y))); \ |
20506
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
165 } |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
166 |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
167 // Instantiate all the MSparse friends for MSparse element type T. |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
168 #define INSTANTIATE_SPARSE_FRIENDS(T, API) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
169 SPARSE_OP_ASSIGN_DECL (T, +=, API); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
170 SPARSE_OP_ASSIGN_DECL (T, -=, API); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
171 SPARSE_UNOP_DECL (T, +, API); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
172 SPARSE_UNOP_DECL (T, -, API); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
173 SPARSE_BINOP_DECL (MArray, T, operator +, API, MSparse<T>, T); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
174 SPARSE_BINOP_DECL (MArray, T, operator -, API, MSparse<T>, T); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
175 SPARSE_BINOP_DECL (MSparse, T, operator *, API, MSparse<T>, T); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
176 SPARSE_BINOP_DECL (MSparse, T, operator /, API, MSparse<T>, T); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
177 SPARSE_BINOP_DECL (MArray, T, operator +, API, T, MSparse<T>); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
178 SPARSE_BINOP_DECL (MArray, T, operator -, API, T, MSparse<T>); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
179 SPARSE_BINOP_DECL (MSparse, T, operator *, API, T, MSparse<T>); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
180 SPARSE_BINOP_DECL (MSparse, T, operator /, API, T, MSparse<T>); \ |
20506
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
181 SPARSE_BINOP_DECL (MSparse, T, operator +, API, MSparse<T>, MSparse<T>); \ |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
182 SPARSE_BINOP_DECL (MSparse, T, operator -, API, MSparse<T>, MSparse<T>); \ |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
183 SPARSE_BINOP_DECL (MSparse, T, quotient, API, MSparse<T>, MSparse<T>); \ |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
184 SPARSE_BINOP_DECL (MSparse, T, product, API, MSparse<T>, MSparse<T>); |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
185 |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
186 // Define all the MSparse forwarding functions for return type R and |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
187 // MSparse element type T |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
188 #define SPARSE_FORWARD_DEFS(B, R, F, T) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
189 SPARSE_OP_ASSIGN_FWD_FCN (R, operator +=, T, dynamic_cast<B<T>&>, \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
190 R, dynamic_cast<const B<T>&>, R) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
191 SPARSE_OP_ASSIGN_FWD_FCN (R, operator -=, T, dynamic_cast<B<T>&>, \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
192 R, dynamic_cast<const B<T>&>, R) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
193 SPARSE_UNOP_FWD_FCN (R, operator +, T, dynamic_cast<const B<T>&>, R) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
194 SPARSE_UNOP_FWD_FCN (R, operator -, T, dynamic_cast<const B<T>&>, R) \ |
20506
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
195 SPARSE_BINOP_FWD_FCN (F, operator +, T, dynamic_cast<const B<T>&>, R, , T) \ |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
196 SPARSE_BINOP_FWD_FCN (F, operator -, T, dynamic_cast<const B<T>&>, R, , T) \ |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
197 SPARSE_BINOP_FWD_FCN (R, operator *, T, dynamic_cast<const B<T>&>, R, , T) \ |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
198 SPARSE_BINOP_FWD_FCN (R, operator /, T, dynamic_cast<const B<T>&>, R, , T) \ |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
199 SPARSE_BINOP_FWD_FCN (F, operator +, T, , T, dynamic_cast<const B<T>&>, R) \ |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
200 SPARSE_BINOP_FWD_FCN (F, operator -, T, , T, dynamic_cast<const B<T>&>, R) \ |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
201 SPARSE_BINOP_FWD_FCN (R, operator *, T, , T, dynamic_cast<const B<T>&>, R) \ |
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
202 SPARSE_BINOP_FWD_FCN (R, operator /, T, , T, dynamic_cast<const B<T>&>, R) \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
203 SPARSE_BINOP_FWD_FCN (R, operator +, T, dynamic_cast<const B<T>&>, \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
204 R, dynamic_cast<const B<T>&>, R) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
205 SPARSE_BINOP_FWD_FCN (R, operator -, T, dynamic_cast<const B<T>&>, \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
206 R, dynamic_cast<const B<T>&>, R) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
207 SPARSE_BINOP_FWD_FCN (R, product, T, dynamic_cast<const B<T>&>, \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
208 R, dynamic_cast<const B<T>&>, R) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
209 SPARSE_BINOP_FWD_FCN (R, quotient, T, dynamic_cast<const B<T>&>, \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21289
diff
changeset
|
210 R, dynamic_cast<const B<T>&>, R) |
20506
2aa4fb60ae77
MSparse code simplification by macro removal without reduction of functionality.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
19697
diff
changeset
|
211 |
5164 | 212 #endif |