comparison liboctave/DiagArray2.cc @ 10350:12884915a8e4

merge MArray classes & improve Array interface
author Jaroslav Hajek <highegg@gmail.com>
date Sat, 23 Jan 2010 21:41:03 +0100
parents 4c0cdbe0acca
children a3635bc1ea19
comparison
equal deleted inserted replaced
10349:d4d13389c957 10350:12884915a8e4
72 72
73 if (k == 0) 73 if (k == 0)
74 // The main diagonal is shallow-copied. 74 // The main diagonal is shallow-copied.
75 d = *this; 75 d = *this;
76 else if (k > 0 && k < cols ()) 76 else if (k > 0 && k < cols ())
77 d = Array<T> (std::min (cols () - k, rows ()), T ()); 77 d = Array<T> (std::min (cols () - k, rows ()), 1, T ());
78 else if (k < 0 && -k < rows ()) 78 else if (k < 0 && -k < rows ())
79 d = Array<T> (std::min (rows () + k, cols ()), T ()); 79 d = Array<T> (std::min (rows () + k, cols ()), 1, T ());
80 else 80 else
81 (*current_liboctave_error_handler) 81 (*current_liboctave_error_handler)
82 ("diag: requested diagonal out of range"); 82 ("diag: requested diagonal out of range");
83 83
84 return d; 84 return d;
133 return Proxy (this, r, c); 133 return Proxy (this, r, c);
134 } 134 }
135 135
136 template <class T> 136 template <class T>
137 void 137 void
138 DiagArray2<T>::resize (octave_idx_type r, octave_idx_type c) 138 DiagArray2<T>::resize (octave_idx_type r, octave_idx_type c,
139 const T& rfv)
139 { 140 {
140 if (r < 0 || c < 0) 141 if (r < 0 || c < 0)
141 { 142 {
142 (*current_liboctave_error_handler) ("can't resize to negative dimensions"); 143 (*current_liboctave_error_handler) ("can't resize to negative dimensions");
143 return; 144 return;
144 } 145 }
145 146
146 if (r != dim1 () || c != dim2 ()) 147 if (r != dim1 () || c != dim2 ())
147 { 148 {
148 Array<T>::resize (std::min (r, c)); 149 Array<T>::resize (std::min (r, c), 1, rfv);
149 d1 = r; d2 = c;
150 }
151 }
152
153 template <class T>
154 void
155 DiagArray2<T>::resize_fill (octave_idx_type r, octave_idx_type c, const T& val)
156 {
157 if (r < 0 || c < 0)
158 {
159 (*current_liboctave_error_handler) ("can't resize to negative dimensions");
160 return;
161 }
162
163 if (r != dim1 () || c != dim2 ())
164 {
165 Array<T>::resize_fill (std::min (r, c), val);
166 d1 = r; d2 = c; 150 d1 = r; d2 = c;
167 } 151 }
168 } 152 }
169 153
170 template <class T> 154 template <class T>