comparison liboctave/Array.cc @ 10075:84b0725f4b09

return class types by reference in const Array element access functions
author Jaroslav Hajek <highegg@gmail.com>
date Fri, 08 Jan 2010 11:25:08 +0100
parents bb30843c4929
children eb8ac0eed9f1
comparison
equal deleted inserted replaced
10074:5e2b4b7967cc 10075:84b0725f4b09
186 186
187 return retval; 187 return retval;
188 } 188 }
189 189
190 template <class T> 190 template <class T>
191 T 191 T&
192 Array<T>::range_error (const char *fcn, octave_idx_type n) const 192 Array<T>::range_error (const char *fcn, octave_idx_type n) const
193 {
194 (*current_liboctave_error_handler) ("%s (%d): range error", fcn, n);
195 return T ();
196 }
197
198 template <class T>
199 T&
200 Array<T>::range_error (const char *fcn, octave_idx_type n)
201 { 193 {
202 (*current_liboctave_error_handler) ("%s (%d): range error", fcn, n); 194 (*current_liboctave_error_handler) ("%s (%d): range error", fcn, n);
203 static T foo; 195 static T foo;
204 return foo; 196 return foo;
205 } 197 }
206 198
207 template <class T> 199 template <class T>
208 T 200 T&
209 Array<T>::range_error (const char *fcn, octave_idx_type i, octave_idx_type j) const 201 Array<T>::range_error (const char *fcn, octave_idx_type i, octave_idx_type j) const
210 {
211 (*current_liboctave_error_handler)
212 ("%s (%d, %d): range error", fcn, i, j);
213 return T ();
214 }
215
216 template <class T>
217 T&
218 Array<T>::range_error (const char *fcn, octave_idx_type i, octave_idx_type j)
219 { 202 {
220 (*current_liboctave_error_handler) 203 (*current_liboctave_error_handler)
221 ("%s (%d, %d): range error", fcn, i, j); 204 ("%s (%d, %d): range error", fcn, i, j);
222 static T foo; 205 static T foo;
223 return foo; 206 return foo;
224 } 207 }
225 208
226 template <class T> 209 template <class T>
227 T 210 T&
228 Array<T>::range_error (const char *fcn, octave_idx_type i, octave_idx_type j, octave_idx_type k) const 211 Array<T>::range_error (const char *fcn, octave_idx_type i, octave_idx_type j, octave_idx_type k) const
229 {
230 (*current_liboctave_error_handler)
231 ("%s (%d, %d, %d): range error", fcn, i, j, k);
232 return T ();
233 }
234
235 template <class T>
236 T&
237 Array<T>::range_error (const char *fcn, octave_idx_type i, octave_idx_type j, octave_idx_type k)
238 { 212 {
239 (*current_liboctave_error_handler) 213 (*current_liboctave_error_handler)
240 ("%s (%d, %d, %d): range error", fcn, i, j, k); 214 ("%s (%d, %d, %d): range error", fcn, i, j, k);
241 static T foo; 215 static T foo;
242 return foo; 216 return foo;
243 } 217 }
244 218
245 template <class T> 219 template <class T>
246 T 220 T&
247 Array<T>::range_error (const char *fcn, const Array<octave_idx_type>& ra_idx) const 221 Array<T>::range_error (const char *fcn, const Array<octave_idx_type>& ra_idx) const
248 {
249 std::ostringstream buf;
250
251 buf << fcn << " (";
252
253 octave_idx_type n = ra_idx.length ();
254
255 if (n > 0)
256 buf << ra_idx(0);
257
258 for (octave_idx_type i = 1; i < n; i++)
259 buf << ", " << ra_idx(i);
260
261 buf << "): range error";
262
263 std::string buf_str = buf.str ();
264
265 (*current_liboctave_error_handler) (buf_str.c_str ());
266
267 return T ();
268 }
269
270 template <class T>
271 T&
272 Array<T>::range_error (const char *fcn, const Array<octave_idx_type>& ra_idx)
273 { 222 {
274 std::ostringstream buf; 223 std::ostringstream buf;
275 224
276 buf << fcn << " ("; 225 buf << fcn << " (";
277 226