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;