comparison liboctave/DiagArray2.cc @ 14590:6250e1232c9c stable

Implement proper op() indexing for diagonal matrices (bug #36368) * DiagArray2.h (DiagArray2<T>::check_idx): New function. (DiagArray2<T>::checkelem): Deleted. (DiagArray2<T>::operator()): New non-const version, returns references. Conditionally call check_idx. * DiagArray2.cc (DiagArray2<T>::check_idx): Contents copied over from checkelem. (DiagArray2<T>::checkelem): Deleted. * ov-base-diag.cc (octave_base_diag<DMT, MT>::do_index_op): Replace call to now-inaccessible checkelem() with elem(). * ov-cx-diag.cc: Add a test for this bug.
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Wed, 02 May 2012 17:29:40 -0400
parents 72c96de7a403
children 63ae976ac2e7
comparison
equal deleted inserted replaced
14583:89504d0a5c5b 14590:6250e1232c9c
80 return DiagArray2<T> (Array<T>::template map<T> (fcn), d2, d1); 80 return DiagArray2<T> (Array<T>::template map<T> (fcn), d2, d1);
81 } 81 }
82 82
83 // A two-dimensional array with diagonal elements only. 83 // A two-dimensional array with diagonal elements only.
84 84
85 template <class T> 85 template <typename T>
86 T 86 void
87 DiagArray2<T>::checkelem (octave_idx_type r, octave_idx_type c) const 87 DiagArray2<T>::check_idx (octave_idx_type r, octave_idx_type c) const
88 { 88 {
89 if (r < 0 || r >= dim1 ()) 89 if (r < 0 || r >= dim1 ())
90 gripe_index_out_of_range (2, 1, r+1, dim1 ()); 90 gripe_index_out_of_range (2, 1, r+1, dim1 ());
91 if (c < 0 || c >= dim2 ()) 91 if (c < 0 || c >= dim2 ())
92 gripe_index_out_of_range (2, 2, c+1, dim2 ()); 92 gripe_index_out_of_range (2, 2, c+1, dim2 ());
93
94 return elem (r, c);
95 } 93 }
96 94
97 template <class T> 95 template <class T>
98 void 96 void
99 DiagArray2<T>::resize (octave_idx_type r, octave_idx_type c, 97 DiagArray2<T>::resize (octave_idx_type r, octave_idx_type c,