comparison liboctave/Array.h @ 9840:c0b54271904b

improve safe numel() calculation for arrays
author Jaroslav Hajek <highegg@gmail.com>
date Thu, 19 Nov 2009 15:48:33 +0100
parents f80c566bc751
children ead4f9c82a9a
comparison
equal deleted inserted replaced
9839:3e8b4c80ae63 9840:c0b54271904b
136 slice_data = rep->data; 136 slice_data = rep->data;
137 slice_len = rep->len; 137 slice_len = rep->len;
138 } 138 }
139 139
140 Array (T *d, const dim_vector& dv) 140 Array (T *d, const dim_vector& dv)
141 : rep (new typename Array<T>::ArrayRep (d, get_size (dv))), 141 : rep (new typename Array<T>::ArrayRep (d, dv.numel ())),
142 dimensions (dv) 142 dimensions (dv)
143 { 143 {
144 slice_data = rep->data; 144 slice_data = rep->data;
145 slice_len = rep->len; 145 slice_len = rep->len;
146 } 146 }
222 } 222 }
223 223
224 public: 224 public:
225 225
226 Array (const dim_vector& dv) 226 Array (const dim_vector& dv)
227 : rep (new typename Array<T>::ArrayRep (get_size (dv))), 227 : rep (new typename Array<T>::ArrayRep (dv.safe_numel ())),
228 dimensions (dv) 228 dimensions (dv)
229 { 229 {
230 slice_data = rep->data; 230 slice_data = rep->data;
231 slice_len = rep->len; 231 slice_len = rep->len;
232 } 232 }
233 233
234 Array (const dim_vector& dv, const T& val) 234 Array (const dim_vector& dv, const T& val)
235 : rep (new typename Array<T>::ArrayRep (get_size (dv))), 235 : rep (new typename Array<T>::ArrayRep (dv.safe_numel ())),
236 dimensions (dv) 236 dimensions (dv)
237 { 237 {
238 slice_data = rep->data; 238 slice_data = rep->data;
239 slice_len = rep->len; 239 slice_len = rep->len;
240 fill (val); 240 fill (val);
299 Array<T> squeeze (void) const; 299 Array<T> squeeze (void) const;
300 300
301 void chop_trailing_singletons (void) 301 void chop_trailing_singletons (void)
302 { dimensions.chop_trailing_singletons (); } 302 { dimensions.chop_trailing_singletons (); }
303 303
304 static octave_idx_type get_size (octave_idx_type r, octave_idx_type c);
305 static octave_idx_type get_size (octave_idx_type r, octave_idx_type c, octave_idx_type p);
306 static octave_idx_type get_size (const dim_vector& dv);
307
308 octave_idx_type compute_index (const Array<octave_idx_type>& ra_idx) const; 304 octave_idx_type compute_index (const Array<octave_idx_type>& ra_idx) const;
309 305
310 T range_error (const char *fcn, octave_idx_type n) const; 306 T range_error (const char *fcn, octave_idx_type n) const;
311 T& range_error (const char *fcn, octave_idx_type n); 307 T& range_error (const char *fcn, octave_idx_type n);
312 308