Mercurial > hg > octave-lyh
diff liboctave/Array.cc @ 11570:57632dea2446
attempt better backward compatibility for Array constructors
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 19 Jan 2011 17:55:56 -0500 |
parents | fd0a3ac60b0e |
children | a83bad07f7e3 |
line wrap: on
line diff
--- a/liboctave/Array.cc +++ b/liboctave/Array.cc @@ -67,27 +67,6 @@ } template <class T> -Array<T>::Array (const Array<T>& a, octave_idx_type nr, octave_idx_type nc) - : dimensions (nr, nc), rep (a.rep), - slice_data (a.slice_data), slice_len (a.slice_len) -{ - if (dimensions.safe_numel () != a.numel ()) - { - std::string dimensions_str = a.dimensions.str (); - std::string new_dims_str = dimensions.str (); - - (*current_liboctave_error_handler) - ("reshape: can't reshape %s array to %s array", - dimensions_str.c_str (), new_dims_str.c_str ()); - } - - // This goes here because if an exception is thrown by the above, - // destructor will be never called. - rep->count++; - dimensions.chop_trailing_singletons (); -} - -template <class T> void Array<T>::fill (const T& val) { @@ -941,7 +920,7 @@ { static const octave_idx_type max_stack_chunk = 1024; octave_idx_type nn = n + std::min (nx, max_stack_chunk); - Array<T> tmp (Array<T> (nn, 1), dv, 0, n); + Array<T> tmp (Array<T> (dim_vector (nn, 1)), dv, 0, n); T *dest = tmp.fortran_vec (); copy_or_memcpy (nx, data (), dest); @@ -1044,7 +1023,7 @@ if (n != nx) { if (i.is_scalar ()) - return Array<T> (1, 1, rfv); + return Array<T> (dim_vector (1, 1), rfv); else tmp.resize1 (nx, rfv); } @@ -1070,7 +1049,7 @@ if (r != rx || c != cx) { if (i.is_scalar () && j.is_scalar ()) - return Array<T> (1, 1, rfv); + return Array<T> (dim_vector (1, 1), rfv); else tmp.resize (rx, cx, rfv); } @@ -1100,7 +1079,7 @@ for (int i = 0; i < ial; i++) all_scalars = all_scalars && ia(i).is_scalar (); if (all_scalars) - return Array<T> (1, 1, rfv); + return Array<T> (dim_vector (1, 1), rfv); else tmp.resize (dvx, rfv); } @@ -1443,7 +1422,7 @@ else { // Use index. - Array<idx_vector> ia (ndims (), 1, idx_vector::colon); + Array<idx_vector> ia (dim_vector (ndims (), 1), idx_vector::colon); ia (dim) = i.complement (n); *this = index (ia); } @@ -1498,7 +1477,7 @@ assign (i, j, a); else { - Array<idx_vector> idx (a.ndims (), 1); + Array<idx_vector> idx (dim_vector (a.ndims (), 1)); idx(0) = i; idx(1) = j; for (int k = 0; k < a.ndims (); k++) @@ -1514,7 +1493,7 @@ Array<T>::insert (const Array<T>& a, const Array<octave_idx_type>& ra_idx) { octave_idx_type n = ra_idx.length (); - Array<idx_vector> idx (n, 1); + Array<idx_vector> idx (dim_vector (n, 1)); const dim_vector dva = a.dims ().redim (n); for (octave_idx_type k = 0; k < n; k++) idx(k) = idx_vector (ra_idx (k), ra_idx (k) + dva(k)); @@ -2010,7 +1989,7 @@ octave_idx_type r = rows (), c = cols (); - idx = Array<octave_idx_type> (r, 1); + idx = Array<octave_idx_type> (dim_vector (r, 1)); lsort.sort_rows (data (), idx.fortran_vec (), r, c); @@ -2594,7 +2573,7 @@ return retval; int nidx = std::max (dv.length (), dim + 1); - Array<idx_vector> idxa (nidx, 1, idx_vector::colon); + Array<idx_vector> idxa (dim_vector (nidx, 1), idx_vector::colon); octave_idx_type l = 0; for (octave_idx_type i = 0; i < n; i++) @@ -2686,7 +2665,7 @@ { os << "data:"; - Array<octave_idx_type> ra_idx (n_dims, 1, 0); + Array<octave_idx_type> ra_idx (dim_vector (n_dims, 1), 0); // Number of times the first 2d-array is to be displayed.