Mercurial > hg > octave-max
comparison liboctave/Sparse-diag-op-defs.h @ 12030:20a9a8180e33 release-3-2-x
fix sparse +- diag operations
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Thu, 02 Jul 2009 08:21:50 +0200 |
parents | 5bbbf482909a |
children | 829e69ec3110 |
comparison
equal
deleted
inserted
replaced
12029:ee264f77eaed | 12030:20a9a8180e33 |
---|---|
132 | 132 |
133 for (octave_idx_type j = 0; j < nc; ++j) | 133 for (octave_idx_type j = 0; j < nc; ++j) |
134 { | 134 { |
135 OCTAVE_QUIT; | 135 OCTAVE_QUIT; |
136 const octave_idx_type colend = a.cidx (j+1); | 136 const octave_idx_type colend = a.cidx (j+1); |
137 bool found_diag = false; | |
138 r.xcidx (j) = k; | 137 r.xcidx (j) = k; |
139 for (octave_idx_type k_src = a.cidx (j); k_src < colend; ++k_src, ++k) | 138 octave_idx_type k_src = a.cidx (j), k_split; |
140 { | 139 |
141 const octave_idx_type i = a.ridx (k_src); | 140 for (k_split = k_src; k_split < colend; k_split++) |
142 r.xridx (k) = i; | 141 if (a.ridx (k_split) >= j) |
143 if (i != j) | 142 break; |
144 r.xdata (k) = opa (a.data (k_src)); | 143 |
145 else | 144 for (; k_src < k_split; k_src++, k++) |
146 { | 145 { |
147 r.xdata (k) = opa (a.data (k_src)) + opd (d.dgelem (j)); | 146 r.xridx (k) = a.ridx (k_src); |
148 found_diag = true; | 147 r.xdata (k) = opa (a.data (k_src)); |
149 } | 148 } |
150 } | 149 |
151 if (!found_diag) | 150 if (k_src < colend && a.ridx (k_src) == j) |
152 { | 151 { |
153 r.xridx (k) = j; | 152 r.xridx (k) = j; |
154 r.xdata (k) = opd (d.dgelem (j)); | 153 r.xdata (k) = opa (a.data (k_src)) + opd (d.dgelem (j)); |
155 ++k; | 154 k++; k_src++; |
156 } | 155 } |
156 else | |
157 { | |
158 r.xridx (k) = j; | |
159 r.xdata (k) = opd (d.dgelem (j)); | |
160 k++; | |
161 } | |
162 | |
163 for (; k_src < colend; k_src++, k++) | |
164 { | |
165 r.xridx (k) = a.ridx (k_src); | |
166 r.xdata (k) = opa (a.data (k_src)); | |
167 } | |
168 | |
157 } | 169 } |
158 r.xcidx (nc) = k; | 170 r.xcidx (nc) = k; |
159 | 171 |
160 r.maybe_compress (true); | 172 r.maybe_compress (true); |
161 return r; | 173 return r; |