# HG changeset patch # User Jaroslav Hajek # Date 1264279263 -3600 # Node ID 12884915a8e46a2a876d47083ea8c788e2ed1126 # Parent d4d13389c957fa79527ae6980ef8a5f5e2eb28b5 merge MArray classes & improve Array interface diff --git a/liboctave/Array-util.cc b/liboctave/Array-util.cc --- a/liboctave/Array-util.cc +++ b/liboctave/Array-util.cc @@ -202,7 +202,7 @@ Array conv_to_int_array (const Array& a) { - Array retval (a.length ()); + Array retval (a.dims ()); for (octave_idx_type i = 0; i < a.length (); i++) retval (i) = a(i).elem (0); @@ -213,7 +213,7 @@ Array conv_to_array (const idx_vector *tmp, const octave_idx_type len) { - Array retval (len); + Array retval (len, 1); for (octave_idx_type i = 0; i < len; i++) retval (i) = tmp[i]; @@ -347,7 +347,7 @@ { octave_idx_type n = ra_idx.length (); - Array retval (n); + Array retval (n, 1); for (octave_idx_type i = 0; i < n; i++) retval(i) = ra_idx(i).elem (result_idx(i)); @@ -362,7 +362,7 @@ int n_dims = dims.length (); - retval.resize (n_dims); + retval.resize (n_dims, 1); for (int i = 0; i < n_dims; i++) retval(i) = 0; @@ -564,7 +564,7 @@ Array ind2sub (const dim_vector& dv, const idx_vector& idx) { octave_idx_type len = idx.length (0), n = dv.length (); - Array retval(n); + Array retval(n, 1); octave_idx_type numel = dv.numel (); if (idx.extent (numel) > numel) diff --git a/liboctave/Array.cc b/liboctave/Array.cc --- a/liboctave/Array.cc +++ b/liboctave/Array.cc @@ -876,9 +876,10 @@ // The default fill value. Override if you want a different one. template -T Array::resize_fill_value () +const T& Array::resize_fill_value () { - return T (); + static T zero = T (); + return zero; } // Yes, we could do resize using index & assign. However, that would @@ -886,7 +887,7 @@ template void -Array::resize_fill (octave_idx_type n, const T& rfv) +Array::resize1 (octave_idx_type n, const T& rfv) { if (n >= 0 && ndims () == 2) { @@ -931,7 +932,7 @@ { static const octave_idx_type max_stack_chunk = 1024; octave_idx_type nn = n + std::min (nx, max_stack_chunk); - Array tmp (Array (nn), dv, 0, n); + Array tmp (Array (nn, 1), dv, 0, n); T *dest = tmp.fortran_vec (); copy_or_memcpy (nx, data (), dest); @@ -959,7 +960,7 @@ template void -Array::resize_fill (octave_idx_type r, octave_idx_type c, const T& rfv) +Array::resize (octave_idx_type r, octave_idx_type c, const T& rfv) { if (r >= 0 && c >= 0 && ndims () == 2) { @@ -1001,7 +1002,7 @@ template void -Array::resize_fill (const dim_vector& dv, const T& rfv) +Array::resize (const dim_vector& dv, const T& rfv) { int dvl = dv.length (); if (dvl == 2) @@ -1034,9 +1035,9 @@ if (n != nx) { if (i.is_scalar ()) - return Array (1, rfv); + return Array (1, 1, rfv); else - tmp.resize_fill (nx, rfv); + tmp.resize1 (nx, rfv); } if (tmp.numel () != nx) @@ -1060,9 +1061,9 @@ if (r != rx || c != cx) { if (i.is_scalar () && j.is_scalar ()) - return Array (1, rfv); + return Array (1, 1, rfv); else - tmp.resize_fill (rx, cx, rfv); + tmp.resize (rx, cx, rfv); } if (tmp.rows () != rx || tmp.columns () != cx) @@ -1090,9 +1091,9 @@ for (int i = 0; i < ial; i++) all_scalars = all_scalars && ia(i).is_scalar (); if (all_scalars) - return Array (1, rfv); + return Array (1, 1, rfv); else - tmp.resize_fill (dvx, rfv); + tmp.resize (dvx, rfv); } if (tmp.dimensions != dvx) @@ -1140,7 +1141,7 @@ return; } - resize_fill (nx, rfv); + resize1 (nx, rfv); n = numel (); } @@ -1325,7 +1326,7 @@ return; } - resize_fill (rdv, rfv); + resize (rdv, rfv); dv = rdv; } @@ -1376,7 +1377,7 @@ if (i.is_scalar () && i(0) == n-1) { // Stack "pop" operation. - resize (n-1); + resize1 (n-1); } else if (i.is_cont_range (n, l, u)) { @@ -1449,7 +1450,7 @@ else { // Use index. - Array ia (ndims (), idx_vector::colon); + Array ia (ndims (), 1, idx_vector::colon); ia (dim) = i.complement (n); *this = index (ia); } @@ -1504,7 +1505,7 @@ assign (i, j, a); else { - Array idx (a.ndims ()); + Array idx (a.ndims (), 1); idx(0) = i; idx(1) = j; for (int k = 0; k < a.ndims (); k++) @@ -1520,7 +1521,7 @@ Array::insert (const Array& a, const Array& ra_idx) { octave_idx_type n = ra_idx.length (); - Array idx (n); + Array idx (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)); @@ -2042,7 +2043,7 @@ octave_idx_type r = rows (), c = cols (); - idx = Array (r); + idx = Array (r, 1); lsort.sort_rows (data (), idx.fortran_vec (), r, c); @@ -2202,7 +2203,7 @@ for (octave_idx_type i = 0; i < nel; i++) cnt += src[i] != zero; - retval = Array (cnt); + retval.clear (cnt, 1); octave_idx_type *dest = retval.fortran_vec (); for (octave_idx_type i = 0; i < nel; i++) if (src[i] != zero) *dest++ = i; @@ -2212,7 +2213,7 @@ // We want a fixed max number of elements, usually small. So be // optimistic, alloc the array in advance, and then resize if // needed. - retval = Array (n); + retval.clear (n, 1); if (backward) { // Do the search as a series of successive single-element searches. @@ -2226,7 +2227,7 @@ break; } if (k < n) - retval.resize (k); + retval.resize (k, 1); octave_idx_type *rdata = retval.fortran_vec (); std::reverse (rdata, rdata + k); } @@ -2243,7 +2244,7 @@ break; } if (k < n) - retval.resize (k); + retval.resize (k, 1); } } @@ -2599,7 +2600,7 @@ { os << "data:"; - Array ra_idx (n_dims, 0); + Array ra_idx (n_dims, 1, 0); // Number of times the first 2d-array is to be displayed. diff --git a/liboctave/Array.h b/liboctave/Array.h --- a/liboctave/Array.h +++ b/liboctave/Array.h @@ -132,8 +132,8 @@ T* slice_data; octave_idx_type slice_len; - Array (T *d, octave_idx_type n) - : rep (new typename Array::ArrayRep (d, n)), dimensions (n) + Array (T *d, octave_idx_type m, octave_idx_type n) + : rep (new typename Array::ArrayRep (d, m*n)), dimensions (m, n) { slice_data = rep->data; slice_len = rep->len; @@ -183,6 +183,8 @@ public: + // Empty ctor (0x0). + Array (void) : rep (nil_rep ()), dimensions () { @@ -191,21 +193,57 @@ slice_len = rep->len; } - explicit Array (octave_idx_type n) - : rep (new typename Array::ArrayRep (n)), dimensions (n) + // Obsolete 1D ctor (there are no 1D arrays). + explicit Array (octave_idx_type n) GCC_ATTR_DEPRECATED + : rep (new typename Array::ArrayRep (n)), dimensions (n, 1) { slice_data = rep->data; slice_len = rep->len; } - explicit Array (octave_idx_type n, const T& val) - : rep (new typename Array::ArrayRep (n)), dimensions (n) + // 2D uninitialized ctor. + explicit Array (octave_idx_type m, octave_idx_type n) + : rep (), dimensions (m, n) + { + rep = new typename Array::ArrayRep (dimensions.safe_numel ()); + slice_data = rep->data; + slice_len = rep->len; + } + + // 2D initialized ctor. + explicit Array (octave_idx_type m, octave_idx_type n, const T& val) + : rep (), dimensions (m, n) + { + rep = new typename Array::ArrayRep (dimensions.safe_numel ()); + slice_data = rep->data; + slice_len = rep->len; + fill (val); + } + + // nD uninitialized ctor. + explicit Array (const dim_vector& dv) + : rep (new typename Array::ArrayRep (dv.safe_numel ())), + dimensions (dv) + { + slice_data = rep->data; + slice_len = rep->len; + dimensions.chop_trailing_singletons (); + } + + // nD initialized ctor. + explicit Array (const dim_vector& dv, const T& val) + : rep (new typename Array::ArrayRep (dv.safe_numel ())), + dimensions (dv) { slice_data = rep->data; slice_len = rep->len; fill (val); + dimensions.chop_trailing_singletons (); } + // Reshape constructor. + Array (const Array& a, const dim_vector& dv); + // Type conversion case. template Array (const Array& a) @@ -227,28 +265,6 @@ public: - Array (const dim_vector& dv) - : rep (new typename Array::ArrayRep (dv.safe_numel ())), - dimensions (dv) - { - slice_data = rep->data; - slice_len = rep->len; - dimensions.chop_trailing_singletons (); - } - - Array (const dim_vector& dv, const T& val) - : rep (new typename Array::ArrayRep (dv.safe_numel ())), - dimensions (dv) - { - slice_data = rep->data; - slice_len = rep->len; - fill (val); - dimensions.chop_trailing_singletons (); - } - - // Reshape constructor. - Array (const Array& a, const dim_vector& dv); - ~Array (void) { if (--rep->count <= 0) @@ -277,8 +293,6 @@ void clear (void); void clear (const dim_vector& dv); - void clear (octave_idx_type n) - { clear (dim_vector (n)); } void clear (octave_idx_type r, octave_idx_type c) { clear (dim_vector (r, c)); } @@ -292,6 +306,36 @@ octave_idx_type dim2 (void) const { return dimensions(1); } octave_idx_type dim3 (void) const { return dimensions(2); } + // Return the array as a column vector. + Array as_column (void) const + { + Array retval (*this); + if (dimensions.length () != 2 || dimensions(1) != 1) + retval.dimensions = dim_vector (numel (), 1); + + return retval; + } + + // Return the array as a row vector. + Array as_row (void) const + { + Array retval (*this); + if (dimensions.length () != 2 || dimensions(0) != 1) + retval.dimensions = dim_vector (1, numel ()); + + return retval; + } + + // Return the array as a matrix. + Array as_matrix (void) const + { + Array retval (*this); + if (dimensions.length () != 2) + retval.dimensions = dimensions.redim (2); + + return retval; + } + octave_idx_type rows (void) const { return dim1 (); } octave_idx_type cols (void) const { return dim2 (); } octave_idx_type columns (void) const { return dim2 (); } @@ -505,50 +549,19 @@ Array index (const Array& ia) const; - static T resize_fill_value (); + static const T& resize_fill_value (); // Resizing (with fill). - void resize_fill (octave_idx_type n, const T& rfv); - - void resize_fill (octave_idx_type nr, octave_idx_type nc, const T& rfv); - - void resize_fill (const dim_vector& dv, const T& rfv); + void resize1 (octave_idx_type n, const T& rfv = resize_fill_value ()); - // Resizing with default fill. - // Rationale: - // These use the default fill value rather than leaving memory uninitialized. - // Resizing without fill leaves the resulting array in a rather weird state, - // where part of the data is initialized an part isn't. - - void resize (octave_idx_type n) - { resize_fill (n, resize_fill_value ()); } + void resize (octave_idx_type n) GCC_ATTR_DEPRECATED + { resize1 (n); } - // FIXME -- this method cannot be defined here because it would - // clash with - // - // void resize (octave_idx_type, const T&) - // - // (these become indistinguishable when T = octave_idx_type). - // In the future, I think the resize (.., const T& rfv) overloads - // should go away in favor of using resize_fill. - - // void resize (octave_idx_type nr, octave_idx_type nc) - // { resize_fill (nr, nc, resize_fill_value ()); } + void resize (octave_idx_type nr, octave_idx_type nc, + const T& rfv = resize_fill_value ()); - void resize (dim_vector dv) - { resize_fill (dv, resize_fill_value ()); } - - // FIXME -- these are here for backward compatibility. They should - // go away in favor of using resize_fill directly. - void resize (octave_idx_type n, const T& rfv) - { resize_fill (n, static_cast (rfv)); } - - void resize (octave_idx_type nr, octave_idx_type nc, const T& rfv) - { resize_fill (nr, nc, rfv); } - - void resize (dim_vector dv, const T& rfv) - { resize_fill (dv, rfv); } + void resize (const dim_vector& dv, const T& rfv = resize_fill_value ()); // Indexing with possible resizing and fill // FIXME -- this is really a corner case, that should better be diff --git a/liboctave/Array2.h b/liboctave/Array2.h --- a/liboctave/Array2.h +++ b/liboctave/Array2.h @@ -91,10 +91,10 @@ } void resize (octave_idx_type r, octave_idx_type c) - { Array::resize_fill (r, c, Array::resize_fill_value ()); } + { Array::resize (r, c, Array::resize_fill_value ()); } void resize (octave_idx_type r, octave_idx_type c, const T& val) - { Array::resize_fill (r, c, val); } + { Array::resize (r, c, val); } Array2& insert (const Array2& a, octave_idx_type r, octave_idx_type c) { diff --git a/liboctave/Array3.h b/liboctave/Array3.h --- a/liboctave/Array3.h +++ b/liboctave/Array3.h @@ -72,7 +72,7 @@ { Array::resize (dim_vector (r, c, p)); } void resize (octave_idx_type r, octave_idx_type c, octave_idx_type p, const T& val) - { Array::resize_fill (dim_vector (r, c, p), val); } + { Array::resize (dim_vector (r, c, p), val); } Array3 sort (octave_idx_type dim = 0, sortmode mode = ASCENDING) const { diff --git a/liboctave/CColVector.cc b/liboctave/CColVector.cc --- a/liboctave/CColVector.cc +++ b/liboctave/CColVector.cc @@ -51,10 +51,8 @@ // Complex Column Vector class ComplexColumnVector::ComplexColumnVector (const ColumnVector& a) - : MArray (a.length ()) + : MArray (a) { - for (octave_idx_type i = 0; i < length (); i++) - elem (i) = a.elem (i); } bool diff --git a/liboctave/CColVector.h b/liboctave/CColVector.h --- a/liboctave/CColVector.h +++ b/liboctave/CColVector.h @@ -37,18 +37,20 @@ public: - ComplexColumnVector (void) : MArray () { } + ComplexColumnVector (void) : MArray (0, 1) { } - explicit ComplexColumnVector (octave_idx_type n) : MArray (n) { } + explicit ComplexColumnVector (octave_idx_type n) : MArray (n, 1) { } - explicit ComplexColumnVector (const dim_vector& dv) : MArray (dv) { } + explicit ComplexColumnVector (const dim_vector& dv) + : MArray (dv.as_column ()) { } ComplexColumnVector (octave_idx_type n, const Complex& val) - : MArray (n, val) { } + : MArray (n, 1, val) { } ComplexColumnVector (const ComplexColumnVector& a) : MArray (a) { } - ComplexColumnVector (const MArray& a) : MArray (a) { } + ComplexColumnVector (const MArray& a) : MArray (a.as_column ()) { } + ComplexColumnVector (const Array& a) : MArray (a.as_column ()) { } explicit ComplexColumnVector (const ColumnVector& a); @@ -124,9 +126,15 @@ friend OCTAVE_API std::ostream& operator << (std::ostream& os, const ComplexColumnVector& a); friend OCTAVE_API std::istream& operator >> (std::istream& is, ComplexColumnVector& a); + void resize (octave_idx_type n, const Complex& rfv = Array::resize_fill_value ()) + { Array::resize (n, 1, rfv); } + + void clear (octave_idx_type n) + { Array::clear (n, 1); } + private: - ComplexColumnVector (Complex *d, octave_idx_type l) : MArray (d, l) { } + ComplexColumnVector (Complex *d, octave_idx_type l) : MArray (d, l, 1) { } }; MARRAY_FORWARD_DEFS (MArray, ComplexColumnVector, Complex) diff --git a/liboctave/CMatrix.cc b/liboctave/CMatrix.cc --- a/liboctave/CMatrix.cc +++ b/liboctave/CMatrix.cc @@ -233,46 +233,39 @@ // Complex Matrix class ComplexMatrix::ComplexMatrix (const Matrix& a) - : MArray2 (a.rows (), a.cols ()) + : MArray (a) { - for (octave_idx_type j = 0; j < cols (); j++) - for (octave_idx_type i = 0; i < rows (); i++) - elem (i, j) = a.elem (i, j); } ComplexMatrix::ComplexMatrix (const RowVector& rv) - : MArray2 (1, rv.length (), 0.0) + : MArray (rv) { - for (octave_idx_type i = 0; i < rv.length (); i++) - elem (0, i) = rv.elem (i); } ComplexMatrix::ComplexMatrix (const ColumnVector& cv) - : MArray2 (cv.length (), 1, 0.0) + : MArray (cv) { - for (octave_idx_type i = 0; i < cv.length (); i++) - elem (i, 0) = cv.elem (i); } ComplexMatrix::ComplexMatrix (const DiagMatrix& a) - : MArray2 (a.rows (), a.cols (), 0.0) + : MArray (a.rows (), a.cols (), 0.0) { for (octave_idx_type i = 0; i < a.length (); i++) elem (i, i) = a.elem (i, i); } ComplexMatrix::ComplexMatrix (const ComplexRowVector& rv) - : MArray2 (Array2 (rv, 1, rv.length ())) + : MArray (rv) { } ComplexMatrix::ComplexMatrix (const ComplexColumnVector& cv) - : MArray2 (Array2 (cv, cv.length (), 1)) + : MArray (cv) { } ComplexMatrix::ComplexMatrix (const ComplexDiagMatrix& a) - : MArray2 (a.rows (), a.cols (), 0.0) + : MArray (a.rows (), a.cols (), 0.0) { for (octave_idx_type i = 0; i < a.length (); i++) elem (i, i) = a.elem (i, i); @@ -282,15 +275,12 @@ // here? ComplexMatrix::ComplexMatrix (const boolMatrix& a) - : MArray2 (a.rows (), a.cols (), 0.0) + : MArray (a) { - for (octave_idx_type i = 0; i < a.rows (); i++) - for (octave_idx_type j = 0; j < a.cols (); j++) - elem (i, j) = a.elem (i, j); } ComplexMatrix::ComplexMatrix (const charMatrix& a) - : MArray2 (a.rows (), a.cols (), 0.0) + : MArray (a.rows (), a.cols (), 0.0) { for (octave_idx_type i = 0; i < a.rows (); i++) for (octave_idx_type j = 0; j < a.cols (); j++) @@ -298,7 +288,7 @@ } ComplexMatrix::ComplexMatrix (const Matrix& re, const Matrix& im) - : MArray2 (re.rows (), re.cols ()) + : MArray (re.rows (), re.cols ()) { if (im.rows () != rows () || im.cols () != cols ()) (*current_liboctave_error_handler) ("complex: internal error"); @@ -442,7 +432,7 @@ ComplexMatrix& ComplexMatrix::insert (const ComplexMatrix& a, octave_idx_type r, octave_idx_type c) { - Array2::insert (a, r, c); + Array::insert (a, r, c); return *this; } @@ -943,13 +933,13 @@ ComplexRowVector ComplexMatrix::row (octave_idx_type i) const { - return MArray (index (idx_vector (i), idx_vector::colon)); + return index (idx_vector (i), idx_vector::colon); } ComplexColumnVector ComplexMatrix::column (octave_idx_type i) const { - return MArray (index (idx_vector::colon, idx_vector (i))); + return index (idx_vector::colon, idx_vector (i)); } ComplexMatrix @@ -1062,13 +1052,13 @@ (*current_liboctave_error_handler) ("inverse requires square matrix"); else { - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); retval = *this; Complex *tmp_data = retval.fortran_vec (); - Array z(1); + Array z(1, 1); octave_idx_type lwork = -1; // Query the optimum work array size. @@ -1078,7 +1068,7 @@ lwork = static_cast (std::real(z(0))); lwork = (lwork < 2 *nc ? 2*nc : lwork); - z.resize (lwork); + z.resize (lwork, 1); Complex *pz = z.fortran_vec (); info = 0; @@ -1099,7 +1089,7 @@ // Now calculate the condition number for non-singular matrix. octave_idx_type zgecon_info = 0; char job = '1'; - Array rz (2 * nc); + Array rz (2 * nc, 1); double *prz = rz.fortran_vec (); F77_XFCN (zgecon, ZGECON, (F77_CONST_CHAR_ARG2 (&job, 1), nc, tmp_data, nr, anorm, @@ -1340,7 +1330,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); Complex *pwsave = wsave.fortran_vec (); retval = *this; @@ -1381,7 +1371,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); Complex *pwsave = wsave.fortran_vec (); retval = *this; @@ -1425,7 +1415,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); Complex *pwsave = wsave.fortran_vec (); retval = *this; @@ -1444,10 +1434,10 @@ nsamples = nr; nn = 4*npts+15; - wsave.resize (nn); + wsave.resize (nn, 1); pwsave = wsave.fortran_vec (); - Array tmp (npts); + Array tmp (npts, 1); Complex *prow = tmp.fortran_vec (); F77_FUNC (zffti, ZFFTI) (npts, pwsave); @@ -1491,7 +1481,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); Complex *pwsave = wsave.fortran_vec (); retval = *this; @@ -1513,10 +1503,10 @@ nsamples = nr; nn = 4*npts+15; - wsave.resize (nn); + wsave.resize (nn, 1); pwsave = wsave.fortran_vec (); - Array tmp (npts); + Array tmp (npts, 1); Complex *prow = tmp.fortran_vec (); F77_FUNC (zffti, ZFFTI) (npts, pwsave); @@ -1614,9 +1604,9 @@ } else { - Array z (2 * nc); + Array z (2 * nc, 1); Complex *pz = z.fortran_vec (); - Array rz (nc); + Array rz (nc, 1); double *prz = rz.fortran_vec (); F77_XFCN (zpocon, ZPOCON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -1638,7 +1628,7 @@ if (typ == MatrixType::Full) { - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); ComplexMatrix atmp = *this; @@ -1665,9 +1655,9 @@ { // Now calc the condition number for non-singular matrix. char job = '1'; - Array z (2 * nc); + Array z (2 * nc, 1); Complex *pz = z.fortran_vec (); - Array rz (2 * nc); + Array rz (2 * nc, 1); double *prz = rz.fortran_vec (); F77_XFCN (zgecon, ZGECON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -1730,9 +1720,9 @@ char uplo = 'U'; char dia = 'N'; - Array z (2 * nc); + Array z (2 * nc, 1); Complex *pz = z.fortran_vec (); - Array rz (nc); + Array rz (nc, 1); double *prz = rz.fortran_vec (); F77_XFCN (ztrcon, ZTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -1758,9 +1748,9 @@ char uplo = 'L'; char dia = 'N'; - Array z (2 * nc); + Array z (2 * nc, 1); Complex *pz = z.fortran_vec (); - Array rz (nc); + Array rz (nc, 1); double *prz = rz.fortran_vec (); F77_XFCN (ztrcon, ZTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -1804,9 +1794,9 @@ } else { - Array z (2 * nc); + Array z (2 * nc, 1); Complex *pz = z.fortran_vec (); - Array rz (nc); + Array rz (nc, 1); double *prz = rz.fortran_vec (); F77_XFCN (zpocon, ZPOCON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -1824,16 +1814,16 @@ { octave_idx_type info = 0; - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); if(anorm < 0.) anorm = atmp.abs().sum(). row(static_cast(0)).max(); - Array z (2 * nc); + Array z (2 * nc, 1); Complex *pz = z.fortran_vec (); - Array rz (2 * nc); + Array rz (2 * nc, 1); double *prz = rz.fortran_vec (); F77_XFCN (zgetrf, ZGETRF, (nr, nr, tmp_data, nr, pipvt, info)); @@ -1905,9 +1895,9 @@ char uplo = 'U'; char dia = 'N'; - Array z (2 * nc); + Array z (2 * nc, 1); Complex *pz = z.fortran_vec (); - Array rz (nc); + Array rz (nc, 1); double *prz = rz.fortran_vec (); F77_XFCN (ztrcon, ZTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -2006,9 +1996,9 @@ char uplo = 'L'; char dia = 'N'; - Array z (2 * nc); + Array z (2 * nc, 1); Complex *pz = z.fortran_vec (); - Array rz (nc); + Array rz (nc, 1); double *prz = rz.fortran_vec (); F77_XFCN (ztrcon, ZTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -2114,9 +2104,9 @@ { if (calc_cond) { - Array z (2 * nc); + Array z (2 * nc, 1); Complex *pz = z.fortran_vec (); - Array rz (nc); + Array rz (nc, 1); double *prz = rz.fortran_vec (); F77_XFCN (zpocon, ZPOCON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -2166,15 +2156,15 @@ { info = 0; - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); ComplexMatrix atmp = *this; Complex *tmp_data = atmp.fortran_vec (); - Array z (2 * nc); + Array z (2 * nc, 1); Complex *pz = z.fortran_vec (); - Array rz (2 * nc); + Array rz (2 * nc, 1); double *prz = rz.fortran_vec (); // Calculate the norm of the matrix, for later use. @@ -2620,13 +2610,13 @@ Complex *tmp_data = atmp.fortran_vec (); Complex *pretval = retval.fortran_vec (); - Array s (minmn); + Array s (minmn, 1); double *ps = s.fortran_vec (); // Ask ZGELSD what the dimension of WORK should be. octave_idx_type lwork = -1; - Array work (1); + Array work (1, 1); octave_idx_type smlsiz; F77_FUNC (xilaenv, XILAENV) (9, F77_CONST_CHAR_ARG2 ("ZGELSD", 6), @@ -2660,13 +2650,13 @@ + 3*smlsiz*nrhs + (smlsiz+1)*(smlsiz+1); if (lrwork < 1) lrwork = 1; - Array rwork (lrwork); + Array rwork (lrwork, 1); double *prwork = rwork.fortran_vec (); octave_idx_type liwork = 3 * minmn * nlvl + 11 * minmn; if (liwork < 1) liwork = 1; - Array iwork (liwork); + Array iwork (liwork, 1); octave_idx_type* piwork = iwork.fortran_vec (); F77_XFCN (zgelsd, ZGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, @@ -2704,7 +2694,7 @@ } lwork = static_cast (std::real (work(0))); - work.resize (lwork); + work.resize (lwork, 1); F77_XFCN (zgelsd, ZGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, ps, rcon, rank, @@ -2821,13 +2811,13 @@ Complex *tmp_data = atmp.fortran_vec (); Complex *pretval = retval.fortran_vec (); - Array s (minmn); + Array s (minmn, 1); double *ps = s.fortran_vec (); // Ask ZGELSD what the dimension of WORK should be. octave_idx_type lwork = -1; - Array work (1); + Array work (1, 1); octave_idx_type smlsiz; F77_FUNC (xilaenv, XILAENV) (9, F77_CONST_CHAR_ARG2 ("ZGELSD", 6), @@ -2854,13 +2844,13 @@ + 3*smlsiz*nrhs + (smlsiz+1)*(smlsiz+1); if (lrwork < 1) lrwork = 1; - Array rwork (lrwork); + Array rwork (lrwork, 1); double *prwork = rwork.fortran_vec (); octave_idx_type liwork = 3 * minmn * nlvl + 11 * minmn; if (liwork < 1) liwork = 1; - Array iwork (liwork); + Array iwork (liwork, 1); octave_idx_type* piwork = iwork.fortran_vec (); F77_XFCN (zgelsd, ZGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, @@ -2868,9 +2858,9 @@ lwork, prwork, piwork, info)); lwork = static_cast (std::real (work(0))); - work.resize (lwork); - rwork.resize (static_cast (rwork(0))); - iwork.resize (iwork(0)); + work.resize (lwork, 1); + rwork.resize (static_cast (rwork(0)), 1); + iwork.resize (iwork(0), 1); F77_XFCN (zgelsd, ZGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, ps, rcon, rank, @@ -3259,7 +3249,7 @@ ComplexMatrix ComplexMatrix::diag (octave_idx_type k) const { - return MArray2::diag (k); + return MArray::diag (k); } bool @@ -3318,7 +3308,7 @@ if (nr > 0 && nc > 0) { result.resize (nr); - idx_arg.resize (nr); + idx_arg.resize (nr, 1); for (octave_idx_type i = 0; i < nr; i++) { @@ -3392,7 +3382,7 @@ if (nr > 0 && nc > 0) { result.resize (nr); - idx_arg.resize (nr); + idx_arg.resize (nr, 1); for (octave_idx_type i = 0; i < nr; i++) { @@ -3466,7 +3456,7 @@ if (nr > 0 && nc > 0) { result.resize (nc); - idx_arg.resize (nc); + idx_arg.resize (1, nc); for (octave_idx_type j = 0; j < nc; j++) { @@ -3540,7 +3530,7 @@ if (nr > 0 && nc > 0) { result.resize (nc); - idx_arg.resize (nc); + idx_arg.resize (1, nc); for (octave_idx_type j = 0; j < nc; j++) { diff --git a/liboctave/CMatrix.h b/liboctave/CMatrix.h --- a/liboctave/CMatrix.h +++ b/liboctave/CMatrix.h @@ -24,7 +24,8 @@ #if !defined (octave_ComplexMatrix_h) #define octave_ComplexMatrix_h 1 -#include "MArray2.h" +#include "Array2.h" +#include "MArray.h" #include "MDiagArray2.h" #include "MatrixType.h" @@ -35,7 +36,7 @@ class OCTAVE_API -ComplexMatrix : public MArray2 +ComplexMatrix : public MArray { public: @@ -44,28 +45,28 @@ typedef void (*solve_singularity_handler) (double rcon); - ComplexMatrix (void) : MArray2 () { } + ComplexMatrix (void) : MArray () { } - ComplexMatrix (octave_idx_type r, octave_idx_type c) : MArray2 (r, c) { } + ComplexMatrix (octave_idx_type r, octave_idx_type c) : MArray (r, c) { } ComplexMatrix (octave_idx_type r, octave_idx_type c, const Complex& val) - : MArray2 (r, c, val) { } + : MArray (r, c, val) { } - ComplexMatrix (const dim_vector& dv) : MArray2 (dv) { } + ComplexMatrix (const dim_vector& dv) : MArray (dv.redim (2)) { } ComplexMatrix (const dim_vector& dv, const Complex& val) - : MArray2 (dv, val) { } + : MArray (dv.redim (2), val) { } - ComplexMatrix (const ComplexMatrix& a) : MArray2 (a) { } + ComplexMatrix (const ComplexMatrix& a) : MArray (a) { } template - ComplexMatrix (const MArray2& a) : MArray2 (a) { } + ComplexMatrix (const MArray& a) : MArray (a.as_matrix ()) { } template - ComplexMatrix (const Array2& a) : MArray2 (a) { } + ComplexMatrix (const Array2& a) : MArray (a) { } template - ComplexMatrix (const Array& a) : MArray2 (a) { } + ComplexMatrix (const Array& a) : MArray (a.as_matrix ()) { } ComplexMatrix (const Matrix& re, const Matrix& im); @@ -89,7 +90,7 @@ ComplexMatrix& operator = (const ComplexMatrix& a) { - MArray2::operator = (a); + MArray::operator = (a); return *this; } @@ -136,9 +137,9 @@ ComplexMatrix stack (const ComplexDiagMatrix& a) const; ComplexMatrix hermitian (void) const - { return MArray2::hermitian (std::conj); } + { return MArray::hermitian (std::conj); } ComplexMatrix transpose (void) const - { return MArray2::transpose (); } + { return MArray::transpose (); } friend OCTAVE_API ComplexMatrix conj (const ComplexMatrix& a); @@ -378,7 +379,7 @@ private: - ComplexMatrix (Complex *d, octave_idx_type r, octave_idx_type c) : MArray2 (d, r, c) { } + ComplexMatrix (Complex *d, octave_idx_type r, octave_idx_type c) : MArray (d, r, c) { } }; extern OCTAVE_API ComplexMatrix conj (const ComplexMatrix& a); @@ -431,6 +432,6 @@ MM_CMP_OP_DECLS (ComplexMatrix, ComplexMatrix, OCTAVE_API) MM_BOOL_OP_DECLS (ComplexMatrix, ComplexMatrix, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArray2, ComplexMatrix, Complex) +MARRAY_FORWARD_DEFS (MArray, ComplexMatrix, Complex) #endif diff --git a/liboctave/CNDArray.cc b/liboctave/CNDArray.cc --- a/liboctave/CNDArray.cc +++ b/liboctave/CNDArray.cc @@ -46,7 +46,7 @@ #include "bsxfun-defs.cc" ComplexNDArray::ComplexNDArray (const charNDArray& a) - : MArrayN (a.dims ()) + : MArray (a.dims ()) { octave_idx_type n = a.numel (); for (octave_idx_type i = 0; i < n; i++) @@ -217,7 +217,7 @@ ComplexNDArray retval (dv); octave_idx_type npts = dv(dim); octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); Complex *pwsave = wsave.fortran_vec (); OCTAVE_LOCAL_BUFFER (Complex, tmp, npts); @@ -264,7 +264,7 @@ ComplexNDArray retval (dv); octave_idx_type npts = dv(dim); octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); Complex *pwsave = wsave.fortran_vec (); OCTAVE_LOCAL_BUFFER (Complex, tmp, npts); @@ -314,9 +314,9 @@ { octave_idx_type npts = dv2(i); octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); Complex *pwsave = wsave.fortran_vec (); - Array row (npts); + Array row (npts, 1); Complex *prow = row.fortran_vec (); octave_idx_type howmany = numel () / npts; @@ -362,9 +362,9 @@ { octave_idx_type npts = dv2(i); octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); Complex *pwsave = wsave.fortran_vec (); - Array row (npts); + Array row (npts, 1); Complex *prow = row.fortran_vec (); octave_idx_type howmany = numel () / npts; @@ -410,9 +410,9 @@ { octave_idx_type npts = dv(i); octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); Complex *pwsave = wsave.fortran_vec (); - Array row (npts); + Array row (npts, 1); Complex *prow = row.fortran_vec (); octave_idx_type howmany = numel () / npts; @@ -457,9 +457,9 @@ { octave_idx_type npts = dv(i); octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); Complex *pwsave = wsave.fortran_vec (); - Array row (npts); + Array row (npts, 1); Complex *prow = row.fortran_vec (); octave_idx_type howmany = numel () / npts; @@ -786,7 +786,7 @@ if (n == dimensions.length ()) { - Array a_ra_idx (a_dv.length (), 0); + Array a_ra_idx (a_dv.length (), 1, 0); a_ra_idx.elem (0) = r; a_ra_idx.elem (1) = c; @@ -873,7 +873,7 @@ ComplexNDArray ComplexNDArray::diag (octave_idx_type k) const { - return MArrayN::diag (k); + return MArray::diag (k); } // This contains no information on the array structure !!! diff --git a/liboctave/CNDArray.h b/liboctave/CNDArray.h --- a/liboctave/CNDArray.h +++ b/liboctave/CNDArray.h @@ -23,7 +23,7 @@ #if !defined (octave_ComplexNDArray_h) #define octave_ComplexNDArray_h 1 -#include "MArrayN.h" +#include "MArray.h" #include "CMatrix.h" #include "mx-defs.h" @@ -32,34 +32,34 @@ class OCTAVE_API -ComplexNDArray : public MArrayN +ComplexNDArray : public MArray { public: typedef ComplexMatrix matrix_type; - ComplexNDArray (void) : MArrayN () { } + ComplexNDArray (void) : MArray () { } - ComplexNDArray (const dim_vector& dv) : MArrayN (dv) { } + ComplexNDArray (const dim_vector& dv) : MArray (dv) { } ComplexNDArray (const dim_vector& dv, const Complex& val) - : MArrayN (dv, val) { } + : MArray (dv, val) { } - ComplexNDArray (const ComplexNDArray& a) : MArrayN (a) { } + ComplexNDArray (const ComplexNDArray& a) : MArray (a) { } - ComplexNDArray (const ComplexMatrix& a) : MArrayN (a) { } + ComplexNDArray (const ComplexMatrix& a) : MArray (a) { } template - ComplexNDArray (const MArrayN& a) : MArrayN (a) { } + ComplexNDArray (const MArray& a) : MArray (a) { } template - ComplexNDArray (const Array& a) : MArrayN (a) { } + ComplexNDArray (const Array& a) : MArray (a) { } ComplexNDArray (const charNDArray&); ComplexNDArray& operator = (const ComplexNDArray& a) { - MArrayN::operator = (a); + MArray::operator = (a); return *this; } @@ -121,7 +121,7 @@ ComplexMatrix matrix_value (void) const; - ComplexNDArray squeeze (void) const { return MArrayN::squeeze (); } + ComplexNDArray squeeze (void) const { return MArray::squeeze (); } static void increment_index (Array& ra_idx, const dim_vector& dimensions, @@ -144,14 +144,14 @@ ComplexNDArray& changesign (void) { - MArrayN::changesign (); + MArray::changesign (); return *this; } private: ComplexNDArray (Complex *d, const dim_vector& dv) - : MArrayN (d, dv) { } + : MArray (d, dv) { } }; extern OCTAVE_API ComplexNDArray conj (const ComplexNDArray& a); @@ -167,7 +167,7 @@ NDND_CMP_OP_DECLS (ComplexNDArray, ComplexNDArray, OCTAVE_API) NDND_BOOL_OP_DECLS (ComplexNDArray, ComplexNDArray, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArrayN, ComplexNDArray, Complex) +MARRAY_FORWARD_DEFS (MArray, ComplexNDArray, Complex) extern OCTAVE_API ComplexNDArray& operator *= (ComplexNDArray& a, double s); extern OCTAVE_API ComplexNDArray& operator /= (ComplexNDArray& a, double s); diff --git a/liboctave/CRowVector.cc b/liboctave/CRowVector.cc --- a/liboctave/CRowVector.cc +++ b/liboctave/CRowVector.cc @@ -54,13 +54,6 @@ // Complex Row Vector class -ComplexRowVector::ComplexRowVector (const RowVector& a) - : MArray (a.length ()) -{ - for (octave_idx_type i = 0; i < length (); i++) - elem (i) = a.elem (i); -} - bool ComplexRowVector::operator == (const ComplexRowVector& a) const { diff --git a/liboctave/CRowVector.h b/liboctave/CRowVector.h --- a/liboctave/CRowVector.h +++ b/liboctave/CRowVector.h @@ -25,6 +25,7 @@ #define octave_ComplexRowVector_h 1 #include "MArray.h" +#include "dRowVector.h" #include "mx-defs.h" @@ -36,19 +37,20 @@ public: - ComplexRowVector (void) : MArray () { } + ComplexRowVector (void) : MArray (1, 0) { } - explicit ComplexRowVector (octave_idx_type n) : MArray (n) { } + explicit ComplexRowVector (octave_idx_type n) : MArray (1, n) { } explicit ComplexRowVector (const dim_vector& dv) : MArray (dv) { } - ComplexRowVector (octave_idx_type n, const Complex& val) : MArray (n, val) { } + ComplexRowVector (octave_idx_type n, const Complex& val) : MArray (1, n, val) { } ComplexRowVector (const ComplexRowVector& a) : MArray (a) { } - ComplexRowVector (const MArray& a) : MArray (a) { } + ComplexRowVector (const MArray& a) : MArray (a.as_row ()) { } + ComplexRowVector (const Array& a) : MArray (a.as_row ()) { } - explicit ComplexRowVector (const RowVector& a); + explicit ComplexRowVector (const RowVector& a) : MArray (a) { } ComplexRowVector& operator = (const ComplexRowVector& a) { @@ -106,9 +108,15 @@ friend std::ostream& operator << (std::ostream& os, const ComplexRowVector& a); friend std::istream& operator >> (std::istream& is, ComplexRowVector& a); + void resize (octave_idx_type n, const Complex& rfv = Array::resize_fill_value ()) + { Array::resize (1, n, rfv); } + + void clear (octave_idx_type n) + { Array::clear (1, n); } + private: - ComplexRowVector (Complex *d, octave_idx_type l) : MArray (d, l) { } + ComplexRowVector (Complex *d, octave_idx_type l) : MArray (d, 1, l) { } }; // row vector by column vector -> scalar diff --git a/liboctave/CSparse.cc b/liboctave/CSparse.cc --- a/liboctave/CSparse.cc +++ b/liboctave/CSparse.cc @@ -325,7 +325,7 @@ } else { - idx_arg.resize_fill (nr, 1, 0); + idx_arg.resize (nr, 1, 0); for (octave_idx_type i = cidx(0); i < cidx(1); i++) idx_arg.elem(ridx(i)) = -1; @@ -480,7 +480,7 @@ } else { - idx_arg.resize_fill (nr, 1, 0); + idx_arg.resize (nr, 1, 0); for (octave_idx_type i = cidx(0); i < cidx(1); i++) idx_arg.elem(ridx(i)) = -1; @@ -3922,7 +3922,7 @@ OCTAVE_LOCAL_BUFFER (Complex, DU, nr - 1); OCTAVE_LOCAL_BUFFER (Complex, D, nr); OCTAVE_LOCAL_BUFFER (Complex, DL, nr - 1); - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); if (mattype.is_dense ()) @@ -4222,7 +4222,7 @@ OCTAVE_LOCAL_BUFFER (Complex, DU, nr - 1); OCTAVE_LOCAL_BUFFER (Complex, D, nr); OCTAVE_LOCAL_BUFFER (Complex, DL, nr - 1); - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); if (mattype.is_dense ()) @@ -4416,9 +4416,9 @@ { if (calc_cond) { - Array z (2 * nr); + Array z (2 * nr, 1); Complex *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); double *piz = iz.fortran_vec (); F77_XFCN (zpbcon, ZPBCON, @@ -4510,7 +4510,7 @@ } } - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); F77_XFCN (zgbtrf, ZGBTRF, (nr, nc, n_lower, n_upper, tmp_data, @@ -4537,9 +4537,9 @@ if (calc_cond) { char job = '1'; - Array z (2 * nr); + Array z (2 * nr, 1); Complex *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); double *piz = iz.fortran_vec (); F77_XFCN (zgbcon, ZGBCON, @@ -4663,9 +4663,9 @@ { if (calc_cond) { - Array z (2 * nr); + Array z (2 * nr, 1); Complex *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); double *piz = iz.fortran_vec (); F77_XFCN (zpbcon, ZPBCON, @@ -4792,7 +4792,7 @@ } } - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); F77_XFCN (zgbtrf, ZGBTRF, (nr, nr, n_lower, n_upper, tmp_data, @@ -4818,9 +4818,9 @@ if (calc_cond) { char job = '1'; - Array z (2 * nr); + Array z (2 * nr, 1); Complex *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); double *piz = iz.fortran_vec (); F77_XFCN (zgbcon, ZGBCON, @@ -4983,9 +4983,9 @@ { if (calc_cond) { - Array z (2 * nr); + Array z (2 * nr, 1); Complex *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); double *piz = iz.fortran_vec (); F77_XFCN (zpbcon, ZPBCON, @@ -5077,7 +5077,7 @@ } } - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); F77_XFCN (zgbtrf, ZGBTRF, (nr, nr, n_lower, n_upper, tmp_data, @@ -5102,9 +5102,9 @@ if (calc_cond) { char job = '1'; - Array z (2 * nr); + Array z (2 * nr, 1); Complex *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); double *piz = iz.fortran_vec (); F77_XFCN (zgbcon, ZGBCON, @@ -5230,9 +5230,9 @@ { if (calc_cond) { - Array z (2 * nr); + Array z (2 * nr, 1); Complex *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); double *piz = iz.fortran_vec (); F77_XFCN (zpbcon, ZPBCON, @@ -5364,7 +5364,7 @@ } } - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); F77_XFCN (zgbtrf, ZGBTRF, (nr, nr, n_lower, n_upper, tmp_data, @@ -5390,9 +5390,9 @@ if (calc_cond) { char job = '1'; - Array z (2 * nr); + Array z (2 * nr, 1); Complex *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); double *piz = iz.fortran_vec (); F77_XFCN (zgbcon, ZGBCON, diff --git a/liboctave/ChangeLog b/liboctave/ChangeLog --- a/liboctave/ChangeLog +++ b/liboctave/ChangeLog @@ -1,3 +1,133 @@ +2010-02-23 Jaroslav Hajek + + * Array.h (Array): Define 2D constructors. Remove conflicting 1D + initialized constructor. Deprecate 1D constructor. Deprecate 1D resize. + Add 2D resize, resize1. Remove resize_fill. Make resize_fill_value + return a reference. Remove 1D clear. + + * MArray.h (MArray): Merge with MArrayN. Define 2D constructors, sync + with Array changes. + + * MArrayN.h, MArray2.h: Deprecate headers, use compatibility #defines. + * MArrayN.cc, MArray2.cc: Remove sources. + * Makefile.am: Update. + + * fCMatrix.h (FloatComplexMatrix): Rebase on MArray. + * fMatrix.h (FloatMatrix): Ditto. + * dMatrix.h (Matrix): Ditto. + * CMatrix.h (ComplexMatrix): Ditto. + * fCNDArray.h (FloatComplexNDArray): Rebase on MArray. + * fNDArray.h (FloatNDArray): Ditto. + * dNDArray.h (NDArray): Ditto. + * CNDArray.h (ComplexNDArray): Ditto. + + * Array-util.cc: Update. + * Array.cc: Ditto. + * Array2.h: Ditto. + * Array3.h: Ditto. + * CColVector.cc: Ditto. + * CColVector.h: Ditto. + * CMatrix.cc: Ditto. + * CNDArray.cc: Ditto. + * CRowVector.cc: Ditto. + * CSparse.cc: Ditto. + * ChangeLog: Ditto. + * CmplxCHOL.cc: Ditto. + * CmplxHESS.cc: Ditto. + * CmplxLU.cc: Ditto. + * CmplxQRP.cc: Ditto. + * CmplxSCHUR.cc: Ditto. + * CmplxSVD.cc: Ditto. + * CollocWt.cc: Ditto. + * DASPK-opts.in: Ditto. + * DASPK.cc: Ditto. + * DASRT-opts.in: Ditto. + * DASRT.cc: Ditto. + * DASSL-opts.in: Ditto. + * DASSL.cc: Ditto. + * DiagArray2.cc: Ditto. + * DiagArray2.h: Ditto. + * EIG.cc: Ditto. + * LSODE-opts.in: Ditto. + * LSODE.cc: Ditto. + * MArray-C.cc: Ditto. + * MArray-d.cc: Ditto. + * MArray-defs.h: Ditto. + * MArray-f.cc: Ditto. + * MArray-fC.cc: Ditto. + * MArray-i.cc: Ditto. + * MArray-s.cc: Ditto. + * MArray.cc: Ditto. + * MDiagArray2.h: Ditto. + * MSparse-defs.h: Ditto. + * MSparse.cc: Ditto. + * MSparse.h: Ditto. + * Makefile.am: Ditto. + * MatrixType.cc: Ditto. + * PermMatrix.cc: Ditto. + * Quad.cc: Ditto. + * SparseCmplxLU.cc: Ditto. + * SparseCmplxQR.cc: Ditto. + * SparseCmplxQR.h: Ditto. + * SparseQR.cc: Ditto. + * SparseQR.h: Ditto. + * SparsedbleLU.cc: Ditto. + * base-lu.cc: Ditto. + * dColVector.h: Ditto. + * dMatrix.cc: Ditto. + * dNDArray.cc: Ditto. + * dRowVector.h: Ditto. + * dSparse.cc: Ditto. + * dbleCHOL.cc: Ditto. + * dbleHESS.cc: Ditto. + * dbleLU.cc: Ditto. + * dbleQRP.cc: Ditto. + * dbleSCHUR.cc: Ditto. + * dbleSVD.cc: Ditto. + * dim-vector.h: Ditto. + * eigs-base.cc: Ditto. + * fCColVector.cc: Ditto. + * fCColVector.h: Ditto. + * fCMatrix.cc: Ditto. + * fCNDArray.cc: Ditto. + * fCRowVector.cc: Ditto. + * fCRowVector.h: Ditto. + * fCmplxCHOL.cc: Ditto. + * fCmplxHESS.cc: Ditto. + * fCmplxLU.cc: Ditto. + * fCmplxQRP.cc: Ditto. + * fCmplxSCHUR.cc: Ditto. + * fCmplxSVD.cc: Ditto. + * fColVector.h: Ditto. + * fEIG.cc: Ditto. + * fMatrix.cc: Ditto. + * fNDArray.cc: Ditto. + * fRowVector.h: Ditto. + * floatCHOL.cc: Ditto. + * floatHESS.cc: Ditto. + * floatLU.cc: Ditto. + * floatQRP.cc: Ditto. + * floatSCHUR.cc: Ditto. + * floatSVD.cc: Ditto. + * glob-match.h: Ditto. + * int16NDArray.h: Ditto. + * int32NDArray.h: Ditto. + * int64NDArray.h: Ditto. + * int8NDArray.h: Ditto. + * intNDArray.cc: Ditto. + * intNDArray.h: Ditto. + * oct-fftw.cc: Ditto. + * oct-norm.cc: Ditto. + * oct-rand.cc: Ditto. + * regex-match.cc: Ditto. + * sparse-dmsolve.cc: Ditto. + * str-vec.cc: Ditto. + * str-vec.h: Ditto. + * uint16NDArray.h: Ditto. + * uint32NDArray.h: Ditto. + * uint64NDArray.h: Ditto. + * uint8NDArray.h: Ditto. + 2010-02-22 John W. Eaton * data-conv.cc, data-conv.h (read_floats, read_doubles, diff --git a/liboctave/CmplxCHOL.cc b/liboctave/CmplxCHOL.cc --- a/liboctave/CmplxCHOL.cc +++ b/liboctave/CmplxCHOL.cc @@ -123,9 +123,9 @@ octave_idx_type zpocon_info = 0; // Now calculate the condition number for non-singular matrix. - Array z (2*n); + Array z (2*n, 1); Complex *pz = z.fortran_vec (); - Array rz (n); + Array rz (n, 1); double *prz = rz.fortran_vec (); F77_XFCN (zpocon, ZPOCON, (F77_CONST_CHAR_ARG2 ("U", 1), n, h, n, anorm, xrcond, pz, prz, zpocon_info @@ -415,7 +415,7 @@ else { ComplexMatrix a = chol_mat.hermitian () * chol_mat; - Array p (n); + Array p (n, 1); for (octave_idx_type k = 0; k < n; k++) p(k) = k; if (i < j) { diff --git a/liboctave/CmplxHESS.cc b/liboctave/CmplxHESS.cc --- a/liboctave/CmplxHESS.cc +++ b/liboctave/CmplxHESS.cc @@ -81,17 +81,17 @@ hess_mat = a; Complex *h = hess_mat.fortran_vec (); - Array scale (n); + Array scale (n, 1); double *pscale = scale.fortran_vec (); F77_XFCN (zgebal, ZGEBAL, (F77_CONST_CHAR_ARG2 (&job, 1), n, h, n, ilo, ihi, pscale, info F77_CHAR_ARG_LEN (1))); - Array tau (n-1); + Array tau (n-1, 1); Complex *ptau = tau.fortran_vec (); - Array work (lwork); + Array work (lwork, 1); Complex *pwork = work.fortran_vec (); F77_XFCN (zgehrd, ZGEHRD, (n, ilo, ihi, h, n, ptau, pwork, lwork, info)); diff --git a/liboctave/CmplxLU.cc b/liboctave/CmplxLU.cc --- a/liboctave/CmplxLU.cc +++ b/liboctave/CmplxLU.cc @@ -69,7 +69,7 @@ octave_idx_type a_nc = a.cols (); octave_idx_type mn = (a_nr < a_nc ? a_nr : a_nc); - ipvt.resize (mn); + ipvt.resize (mn, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); a_fact = a; diff --git a/liboctave/CmplxQRP.cc b/liboctave/CmplxQRP.cc --- a/liboctave/CmplxQRP.cc +++ b/liboctave/CmplxQRP.cc @@ -65,7 +65,7 @@ if (m > n && qr_type == qr_type_std) afact.resize (m, m); - MArray jpvt (n, 0); + MArray jpvt (n, 1, 0); if (m > 0) { diff --git a/liboctave/CmplxSCHUR.cc b/liboctave/CmplxSCHUR.cc --- a/liboctave/CmplxSCHUR.cc +++ b/liboctave/CmplxSCHUR.cc @@ -109,17 +109,17 @@ Complex *s = schur_mat.fortran_vec (); Complex *q = unitary_mat.fortran_vec (); - Array rwork (n); + Array rwork (n, 1); double *prwork = rwork.fortran_vec (); - Array w (n); + Array w (n, 1); Complex *pw = w.fortran_vec (); - Array work (lwork); + Array work (lwork, 1); Complex *pwork = work.fortran_vec (); // BWORK is not referenced for non-ordered Schur. - Array bwork ((ord_char == 'N' || ord_char == 'n') ? 0 : n); + Array bwork ((ord_char == 'N' || ord_char == 'n') ? 0 : n, 1); octave_idx_type *pbwork = bwork.fortran_vec (); F77_XFCN (zgeesx, ZGEESX, (F77_CONST_CHAR_ARG2 (&jobvs, 1), diff --git a/liboctave/CmplxSVD.cc b/liboctave/CmplxSVD.cc --- a/liboctave/CmplxSVD.cc +++ b/liboctave/CmplxSVD.cc @@ -133,13 +133,13 @@ octave_idx_type lrwork = 5*max_mn; - Array rwork (lrwork); + Array rwork (lrwork, 1); // Ask ZGESVD what the dimension of WORK should be. octave_idx_type lwork = -1; - Array work (1); + Array work (1, 1); octave_idx_type one = 1; octave_idx_type m1 = std::max (m, one), nrow_vt1 = std::max (nrow_vt, one); @@ -153,7 +153,7 @@ F77_CHAR_ARG_LEN (1))); lwork = static_cast (work(0).real ()); - work.resize (lwork); + work.resize (lwork, 1); F77_XFCN (zgesvd, ZGESVD, (F77_CONST_CHAR_ARG2 (&jobu, 1), F77_CONST_CHAR_ARG2 (&jobv, 1), diff --git a/liboctave/CollocWt.cc b/liboctave/CollocWt.cc --- a/liboctave/CollocWt.cc +++ b/liboctave/CollocWt.cc @@ -102,20 +102,20 @@ else if (nt == 0) return; - Array dif1 (nt); + Array dif1 (nt, 1); double *pdif1 = dif1.fortran_vec (); - Array dif2 (nt); + Array dif2 (nt, 1); double *pdif2 = dif2.fortran_vec (); - Array dif3 (nt); + Array dif3 (nt, 1); double *pdif3 = dif3.fortran_vec (); - Array vect (nt); + Array vect (nt, 1); double *pvect = vect.fortran_vec (); - r.resize (nt); - q.resize (nt); + r.resize (nt, 1); + q.resize (nt, 1); A.resize (nt, nt); B.resize (nt, nt); diff --git a/liboctave/DASPK-opts.in b/liboctave/DASPK-opts.in --- a/liboctave/DASPK-opts.in +++ b/liboctave/DASPK-opts.in @@ -30,13 +30,13 @@ TYPE = "Array" SET_ARG_TYPE = "const $TYPE&" INIT_BODY - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = ::sqrt (DBL_EPSILON); END_INIT_BODY SET_CODE void set_$OPT (double val) { - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = (val > 0.0) ? val : ::sqrt (DBL_EPSILON); reset = true; } @@ -65,13 +65,13 @@ TYPE = "Array" SET_ARG_TYPE = "const $TYPE&" INIT_BODY - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = ::sqrt (DBL_EPSILON); END_INIT_BODY SET_CODE void set_$OPT (double val) { - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = (val > 0.0) ? val : ::sqrt (DBL_EPSILON); reset = true; } @@ -156,7 +156,7 @@ TYPE = "Array" SET_ARG_TYPE = "const $TYPE&" INIT_BODY - $OPTVAR.resize (6); + $OPTVAR.resize (6, 1); $OPTVAR(0) = 5.0; $OPTVAR(1) = 6.0; $OPTVAR(2) = 5.0; @@ -205,13 +205,13 @@ TYPE = "Array" SET_ARG_TYPE = const $TYPE& INIT_BODY - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = 0; END_INIT_BODY SET_CODE void set_$OPT (int val) { - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = val; reset = true; } @@ -266,13 +266,13 @@ TYPE = "Array" SET_ARG_TYPE = const $TYPE& INIT_BODY - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = 0; END_INIT_BODY SET_CODE void set_$OPT (octave_idx_type val) { - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = val; reset = true; } diff --git a/liboctave/DASPK.cc b/liboctave/DASPK.cc --- a/liboctave/DASPK.cc +++ b/liboctave/DASPK.cc @@ -160,7 +160,7 @@ initialized = true; - info.resize (20); + info.resize (20, 1); for (octave_idx_type i = 0; i < 20; i++) info(i) = 0; @@ -231,8 +231,8 @@ if (eavfet == 1) lrw += n; - iwork.resize (liw); - rwork.resize (lrw); + iwork.resize (liw, 1); + rwork.resize (lrw, 1); piwork = iwork.fortran_vec (); prwork = rwork.fortran_vec (); diff --git a/liboctave/DASRT-opts.in b/liboctave/DASRT-opts.in --- a/liboctave/DASRT-opts.in +++ b/liboctave/DASRT-opts.in @@ -30,13 +30,13 @@ TYPE = "Array" SET_ARG_TYPE = "const $TYPE&" INIT_BODY - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = ::sqrt (DBL_EPSILON); END_INIT_BODY SET_CODE void set_$OPT (double val) { - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = (val > 0.0) ? val : ::sqrt (DBL_EPSILON); reset = true; } @@ -64,13 +64,13 @@ TYPE = "Array" SET_ARG_TYPE = "const $TYPE&" INIT_BODY - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = ::sqrt (DBL_EPSILON); END_INIT_BODY SET_CODE void set_$OPT (double val) { - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = (val > 0.0) ? val : ::sqrt (DBL_EPSILON); reset = true; } diff --git a/liboctave/DASRT.cc b/liboctave/DASRT.cc --- a/liboctave/DASRT.cc +++ b/liboctave/DASRT.cc @@ -156,7 +156,7 @@ initialized = true; - info.resize (15); + info.resize (15, 1); for (octave_idx_type i = 0; i < 15; i++) info(i) = 0; @@ -199,8 +199,8 @@ liw = 21 + n; lrw = 50 + 9*n + n*n + 3*ng; - iwork.resize (liw); - rwork.resize (lrw); + iwork.resize (liw, 1); + rwork.resize (lrw, 1); info(0) = 0; @@ -253,7 +253,7 @@ DAEFunc::reset = false; - jroot.resize (ng, 1); + jroot.resize (ng, 1, 1); pjroot = jroot.fortran_vec (); diff --git a/liboctave/DASSL-opts.in b/liboctave/DASSL-opts.in --- a/liboctave/DASSL-opts.in +++ b/liboctave/DASSL-opts.in @@ -30,13 +30,13 @@ TYPE = "Array" SET_ARG_TYPE = "const $TYPE&" INIT_BODY - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = ::sqrt (DBL_EPSILON); END_INIT_BODY SET_CODE void set_$OPT (double val) { - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = (val > 0.0) ? val : ::sqrt (DBL_EPSILON); reset = true; } @@ -65,13 +65,13 @@ TYPE = "Array" SET_ARG_TYPE = "const $TYPE&" INIT_BODY - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = ::sqrt (DBL_EPSILON); END_INIT_BODY SET_CODE void set_$OPT (double val) { - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = (val > 0.0) ? val : ::sqrt (DBL_EPSILON); reset = true; } diff --git a/liboctave/DASSL.cc b/liboctave/DASSL.cc --- a/liboctave/DASSL.cc +++ b/liboctave/DASSL.cc @@ -132,7 +132,7 @@ initialized = true; - info.resize (15); + info.resize (15, 1); for (octave_idx_type i = 0; i < 15; i++) info(i) = 0; @@ -146,8 +146,8 @@ nn = n; - iwork.resize (liw); - rwork.resize (lrw); + iwork.resize (liw, 1); + rwork.resize (lrw, 1); info(0) = 0; diff --git a/liboctave/DiagArray2.cc b/liboctave/DiagArray2.cc --- a/liboctave/DiagArray2.cc +++ b/liboctave/DiagArray2.cc @@ -74,9 +74,9 @@ // The main diagonal is shallow-copied. d = *this; else if (k > 0 && k < cols ()) - d = Array (std::min (cols () - k, rows ()), T ()); + d = Array (std::min (cols () - k, rows ()), 1, T ()); else if (k < 0 && -k < rows ()) - d = Array (std::min (rows () + k, cols ()), T ()); + d = Array (std::min (rows () + k, cols ()), 1, T ()); else (*current_liboctave_error_handler) ("diag: requested diagonal out of range"); @@ -135,7 +135,8 @@ template void -DiagArray2::resize (octave_idx_type r, octave_idx_type c) +DiagArray2::resize (octave_idx_type r, octave_idx_type c, + const T& rfv) { if (r < 0 || c < 0) { @@ -145,24 +146,7 @@ if (r != dim1 () || c != dim2 ()) { - Array::resize (std::min (r, c)); - d1 = r; d2 = c; - } -} - -template -void -DiagArray2::resize_fill (octave_idx_type r, octave_idx_type c, const T& val) -{ - if (r < 0 || c < 0) - { - (*current_liboctave_error_handler) ("can't resize to negative dimensions"); - return; - } - - if (r != dim1 () || c != dim2 ()) - { - Array::resize_fill (std::min (r, c), val); + Array::resize (std::min (r, c), 1, rfv); d1 = r; d2 = c; } } diff --git a/liboctave/DiagArray2.h b/liboctave/DiagArray2.h --- a/liboctave/DiagArray2.h +++ b/liboctave/DiagArray2.h @@ -90,7 +90,7 @@ octave_idx_type d1, d2; DiagArray2 (T *d, octave_idx_type r, octave_idx_type c) - : Array (d, std::min (r, c)), d1 (r), d2 (c) { } + : Array (d, std::min (r, c), 1), d1 (r), d2 (c) { } public: @@ -100,20 +100,20 @@ : Array (), d1 (0), d2 (0) { } DiagArray2 (octave_idx_type r, octave_idx_type c) - : Array (std::min (r, c)), d1 (r), d2 (c) { } + : Array (std::min (r, c), 1), d1 (r), d2 (c) { } DiagArray2 (octave_idx_type r, octave_idx_type c, const T& val) - : Array (std::min (r, c), val), d1 (r), d2 (c) { } + : Array (std::min (r, c), 1, val), d1 (r), d2 (c) { } DiagArray2 (const dim_vector& dv) - : Array (std::min (dv(0), dv(1))), d1 (dv(0)), d2 (dv(0)) + : Array (std::min (dv(0), dv(1)), 1), d1 (dv(0)), d2 (dv(0)) { if (dv.length () != 2) (*current_liboctave_error_handler) ("too many dimensions"); } DiagArray2 (const Array& a) - : Array (a), d1 (a.numel ()), d2 (a.numel ()) { } + : Array (a.as_column ()), d1 (a.numel ()), d2 (a.numel ()) { } DiagArray2 (const DiagArray2& a) : Array (a), d1 (a.d1), d2 (a.d2) { } @@ -213,8 +213,8 @@ T dgxelem (octave_idx_type i) const { return Array::xelem (i); } - void resize (octave_idx_type n, octave_idx_type m); - void resize_fill (octave_idx_type n, octave_idx_type m, const T& val); + void resize (octave_idx_type n, octave_idx_type m, + const T& rfv = Array::resize_fill_value ()); DiagArray2 transpose (void) const; DiagArray2 hermitian (T (*fcn) (const T&) = 0) const; diff --git a/liboctave/EIG.cc b/liboctave/EIG.cc --- a/liboctave/EIG.cc +++ b/liboctave/EIG.cc @@ -155,10 +155,10 @@ Matrix atmp = a; double *tmp_data = atmp.fortran_vec (); - Array wr (n); + Array wr (n, 1); double *pwr = wr.fortran_vec (); - Array wi (n); + Array wi (n, 1); double *pwi = wi.fortran_vec (); octave_idx_type tnvr = calc_ev ? n : 0; @@ -181,7 +181,7 @@ if (info == 0) { lwork = static_cast (dummy_work); - Array work (lwork); + Array work (lwork, 1); double *pwork = work.fortran_vec (); F77_XFCN (dgeev, DGEEV, (F77_CONST_CHAR_ARG2 ("N", 1), @@ -274,7 +274,7 @@ if (info == 0) { lwork = static_cast (dummy_work); - Array work (lwork); + Array work (lwork, 1); double *pwork = work.fortran_vec (); F77_XFCN (dsyev, DSYEV, (F77_CONST_CHAR_ARG2 (calc_ev ? "V" : "N", 1), @@ -341,7 +341,7 @@ Complex dummy_work; octave_idx_type lrwork = 2*n; - Array rwork (lrwork); + Array rwork (lrwork, 1); double *prwork = rwork.fortran_vec (); Complex *dummy = 0; @@ -357,7 +357,7 @@ if (info == 0) { lwork = static_cast (dummy_work.real ()); - Array work (lwork); + Array work (lwork, 1); Complex *pwork = work.fortran_vec (); F77_XFCN (zgeev, ZGEEV, (F77_CONST_CHAR_ARG2 ("N", 1), @@ -411,7 +411,7 @@ Complex dummy_work; octave_idx_type lrwork = 3*n; - Array rwork (lrwork); + Array rwork (lrwork, 1); double *prwork = rwork.fortran_vec (); F77_XFCN (zheev, ZHEEV, (F77_CONST_CHAR_ARG2 (calc_ev ? "V" : "N", 1), @@ -424,7 +424,7 @@ if (info == 0) { lwork = static_cast (dummy_work.real ()); - Array work (lwork); + Array work (lwork, 1); Complex *pwork = work.fortran_vec (); F77_XFCN (zheev, ZHEEV, (F77_CONST_CHAR_ARG2 (calc_ev ? "V" : "N", 1), @@ -499,13 +499,13 @@ Matrix btmp = b; double *btmp_data = btmp.fortran_vec (); - Array ar (n); + Array ar (n, 1); double *par = ar.fortran_vec (); - Array ai (n); + Array ai (n, 1); double *pai = ai.fortran_vec (); - Array beta (n); + Array beta (n, 1); double *pbeta = beta.fortran_vec (); octave_idx_type tnvr = calc_ev ? n : 0; @@ -530,7 +530,7 @@ if (info == 0) { lwork = static_cast (dummy_work); - Array work (lwork); + Array work (lwork, 1); double *pwork = work.fortran_vec (); F77_XFCN (dggev, DGGEV, (F77_CONST_CHAR_ARG2 ("N", 1), @@ -639,7 +639,7 @@ if (info == 0) { lwork = static_cast (dummy_work); - Array work (lwork); + Array work (lwork, 1); double *pwork = work.fortran_vec (); F77_XFCN (dsygv, DSYGV, (1, F77_CONST_CHAR_ARG2 (calc_ev ? "V" : "N", 1), @@ -730,7 +730,7 @@ Complex dummy_work; octave_idx_type lrwork = 8*n; - Array rwork (lrwork); + Array rwork (lrwork, 1); double *prwork = rwork.fortran_vec (); Complex *dummy = 0; @@ -747,7 +747,7 @@ if (info == 0) { lwork = static_cast (dummy_work.real ()); - Array work (lwork); + Array work (lwork, 1); Complex *pwork = work.fortran_vec (); F77_XFCN (zggev, ZGGEV, (F77_CONST_CHAR_ARG2 ("N", 1), @@ -816,7 +816,7 @@ Complex dummy_work; octave_idx_type lrwork = 3*n; - Array rwork (lrwork); + Array rwork (lrwork, 1); double *prwork = rwork.fortran_vec (); F77_XFCN (zhegv, ZHEGV, (1, F77_CONST_CHAR_ARG2 (calc_ev ? "V" : "N", 1), @@ -831,7 +831,7 @@ if (info == 0) { lwork = static_cast (dummy_work.real ()); - Array work (lwork); + Array work (lwork, 1); Complex *pwork = work.fortran_vec (); F77_XFCN (zhegv, ZHEGV, (1, F77_CONST_CHAR_ARG2 (calc_ev ? "V" : "N", 1), diff --git a/liboctave/LSODE-opts.in b/liboctave/LSODE-opts.in --- a/liboctave/LSODE-opts.in +++ b/liboctave/LSODE-opts.in @@ -29,13 +29,13 @@ TYPE = "Array" SET_ARG_TYPE = "const $TYPE&" INIT_BODY - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = ::sqrt (DBL_EPSILON); END_INIT_BODY SET_CODE void set_$OPT (double val) { - $OPTVAR.resize (1); + $OPTVAR.resize (1, 1); $OPTVAR(0) = (val > 0.0) ? val : ::sqrt (DBL_EPSILON); reset = true; } diff --git a/liboctave/LSODE.cc b/liboctave/LSODE.cc --- a/liboctave/LSODE.cc +++ b/liboctave/LSODE.cc @@ -150,12 +150,12 @@ maxord = maximum_order (); - iwork.resize (liw); + iwork.resize (liw, 1); for (octave_idx_type i = 4; i < 9; i++) iwork(i) = 0; - rwork.resize (lrw); + rwork.resize (lrw, 1); for (octave_idx_type i = 4; i < 9; i++) rwork(i) = 0; diff --git a/liboctave/MArray-C.cc b/liboctave/MArray-C.cc --- a/liboctave/MArray-C.cc +++ b/liboctave/MArray-C.cc @@ -31,35 +31,11 @@ #include "MArray.h" #include "MArray.cc" -template <> OCTAVE_API double MArray::norm (double p) const; -#include "CColVector.h" -#include "oct-norm.h" - -template <> -OCTAVE_API double -MArray::norm (double p) const -{ - return xnorm (ComplexColumnVector (*this), p); -} template class OCTAVE_API MArray; INSTANTIATE_MARRAY_FRIENDS (Complex, OCTAVE_API) -#include "MArray2.h" -#include "MArray2.cc" - -template class OCTAVE_API MArray2; - -INSTANTIATE_MARRAY2_FRIENDS (Complex, OCTAVE_API) - -#include "MArrayN.h" -#include "MArrayN.cc" - -template class OCTAVE_API MArrayN; - -INSTANTIATE_MARRAYN_FRIENDS (Complex, OCTAVE_API) - #include "MDiagArray2.h" #include "MDiagArray2.cc" diff --git a/liboctave/MArray-d.cc b/liboctave/MArray-d.cc --- a/liboctave/MArray-d.cc +++ b/liboctave/MArray-d.cc @@ -28,35 +28,11 @@ #include "MArray.h" #include "MArray.cc" -template <> OCTAVE_API double MArray::norm (double p) const; -#include "dColVector.h" -#include "oct-norm.h" - -template <> -OCTAVE_API double -MArray::norm (double p) const -{ - return xnorm (ColumnVector (*this), p); -} template class OCTAVE_API MArray; INSTANTIATE_MARRAY_FRIENDS (double, OCTAVE_API) -#include "MArray2.h" -#include "MArray2.cc" - -template class OCTAVE_API MArray2; - -INSTANTIATE_MARRAY2_FRIENDS (double, OCTAVE_API) - -#include "MArrayN.h" -#include "MArrayN.cc" - -template class OCTAVE_API MArrayN; - -INSTANTIATE_MARRAYN_FRIENDS (double, OCTAVE_API) - #include "MDiagArray2.h" #include "MDiagArray2.cc" diff --git a/liboctave/MArray-defs.h b/liboctave/MArray-defs.h --- a/liboctave/MArray-defs.h +++ b/liboctave/MArray-defs.h @@ -58,20 +58,6 @@ MARRAY_UNOP_DEFS (MArray, T, API) \ MARRAY_BINOP_DEFS (MArray, T, API) -// Instantiate all the MArray2 friends for MArray2 element type T. -#define INSTANTIATE_MARRAY2_FRIENDS(T, API) \ - MARRAY_OP_ASSIGN_DEFS1 (MArray2, T, T, API) \ - MARRAY_OP_ASSIGN_DEFS (MArray2, T, MArray2, API) \ - MARRAY_UNOP_DEFS (MArray2, T, API) \ - MARRAY_BINOP_DEFS (MArray2, T, API) - -// Instantiate all the MArrayN friends for MArrayN element type T. -#define INSTANTIATE_MARRAYN_FRIENDS(T, API) \ - MARRAY_OP_ASSIGN_DEFS1 (MArrayN, T, T, API) \ - MARRAY_OP_ASSIGN_DEFS (MArrayN, T, MArrayN, API) \ - MARRAY_UNOP_DEFS (MArrayN, T, API) \ - MARRAY_BINOP_DEFS (MArrayN, T, API) - // Instantiate all the MDiagArray2 friends for MDiagArray2 element type T. #define INSTANTIATE_MDIAGARRAY2_FRIENDS(T, API) \ MARRAY_UNOP_DEFS (MDiagArray2, T, API) \ diff --git a/liboctave/MArray-f.cc b/liboctave/MArray-f.cc --- a/liboctave/MArray-f.cc +++ b/liboctave/MArray-f.cc @@ -29,35 +29,11 @@ #include "MArray.h" #include "MArray.cc" -template <> OCTAVE_API float MArray::norm (float p) const; -#include "fColVector.h" -#include "oct-norm.h" - -template <> -OCTAVE_API float -MArray::norm (float p) const -{ - return xnorm (FloatColumnVector (*this), p); -} template class OCTAVE_API MArray; INSTANTIATE_MARRAY_FRIENDS (float, OCTAVE_API) -#include "MArray2.h" -#include "MArray2.cc" - -template class OCTAVE_API MArray2; - -INSTANTIATE_MARRAY2_FRIENDS (float, OCTAVE_API) - -#include "MArrayN.h" -#include "MArrayN.cc" - -template class OCTAVE_API MArrayN; - -INSTANTIATE_MARRAYN_FRIENDS (float, OCTAVE_API) - #include "MDiagArray2.h" #include "MDiagArray2.cc" diff --git a/liboctave/MArray-fC.cc b/liboctave/MArray-fC.cc --- a/liboctave/MArray-fC.cc +++ b/liboctave/MArray-fC.cc @@ -31,35 +31,11 @@ #include "MArray.h" #include "MArray.cc" -template <> OCTAVE_API float MArray::norm (float p) const; -#include "fCColVector.h" -#include "oct-norm.h" - -template <> -OCTAVE_API float -MArray::norm (float p) const -{ - return xnorm (FloatComplexColumnVector (*this), p); -} template class OCTAVE_API MArray; INSTANTIATE_MARRAY_FRIENDS (FloatComplex, OCTAVE_API) -#include "MArray2.h" -#include "MArray2.cc" - -template class OCTAVE_API MArray2; - -INSTANTIATE_MARRAY2_FRIENDS (FloatComplex, OCTAVE_API) - -#include "MArrayN.h" -#include "MArrayN.cc" - -template class OCTAVE_API MArrayN; - -INSTANTIATE_MARRAYN_FRIENDS (FloatComplex, OCTAVE_API) - #include "MDiagArray2.h" #include "MDiagArray2.cc" diff --git a/liboctave/MArray-i.cc b/liboctave/MArray-i.cc --- a/liboctave/MArray-i.cc +++ b/liboctave/MArray-i.cc @@ -57,40 +57,6 @@ INSTANTIATE_MARRAY_FRIENDS (octave_uint32, OCTAVE_API) INSTANTIATE_MARRAY_FRIENDS (octave_uint64, OCTAVE_API) -#include "MArray2.h" -#include "MArray2.cc" - -template class OCTAVE_API MArray2; - -INSTANTIATE_MARRAY2_FRIENDS (int, OCTAVE_API) - -#include "MArrayN.h" -#include "MArrayN.cc" - -template class OCTAVE_API MArrayN; - -INSTANTIATE_MARRAYN_FRIENDS (int, OCTAVE_API) - -template class OCTAVE_API MArrayN; -template class OCTAVE_API MArrayN; -template class OCTAVE_API MArrayN; -template class OCTAVE_API MArrayN; - -INSTANTIATE_MARRAYN_FRIENDS (octave_int8, OCTAVE_API) -INSTANTIATE_MARRAYN_FRIENDS (octave_int16, OCTAVE_API) -INSTANTIATE_MARRAYN_FRIENDS (octave_int32, OCTAVE_API) -INSTANTIATE_MARRAYN_FRIENDS (octave_int64, OCTAVE_API) - -template class OCTAVE_API MArrayN; -template class OCTAVE_API MArrayN; -template class OCTAVE_API MArrayN; -template class OCTAVE_API MArrayN; - -INSTANTIATE_MARRAYN_FRIENDS (octave_uint8, OCTAVE_API) -INSTANTIATE_MARRAYN_FRIENDS (octave_uint16, OCTAVE_API) -INSTANTIATE_MARRAYN_FRIENDS (octave_uint32, OCTAVE_API) -INSTANTIATE_MARRAYN_FRIENDS (octave_uint64, OCTAVE_API) - #include "MDiagArray2.h" #include "MDiagArray2.cc" diff --git a/liboctave/MArray-s.cc b/liboctave/MArray-s.cc --- a/liboctave/MArray-s.cc +++ b/liboctave/MArray-s.cc @@ -33,13 +33,6 @@ INSTANTIATE_MARRAY_FRIENDS (short, OCTAVE_API) -#include "MArray2.h" -#include "MArray2.cc" - -template class OCTAVE_API MArray2; - -INSTANTIATE_MARRAY2_FRIENDS (short, OCTAVE_API) - #include "MDiagArray2.h" #include "MDiagArray2.cc" diff --git a/liboctave/MArray.cc b/liboctave/MArray.cc --- a/liboctave/MArray.cc +++ b/liboctave/MArray.cc @@ -31,27 +31,119 @@ #include "lo-error.h" #include "MArray-defs.h" +#include "mx-inlines.cc" -// One dimensional array with math ops. +template +struct _idxadds_helper +{ + T *array; + T val; + _idxadds_helper (T *a, T v) : array (a), val (v) { } + void operator () (octave_idx_type i) + { array[i] += val; } +}; template -double -MArray::norm (double) const +struct _idxadda_helper +{ + T *array; + const T *vals; + _idxadda_helper (T *a, const T *v) : array (a), vals (v) { } + void operator () (octave_idx_type i) + { array[i] += *vals++; } +}; + +template +void +MArray::idx_add (const idx_vector& idx, T val) { - (*current_liboctave_error_handler) - ("norm: only implemented for double and complex values"); + octave_idx_type n = this->length (); + octave_idx_type ext = idx.extent (n); + if (ext > n) + { + this->resize1 (ext); + n = ext; + } - return 0; + octave_quit (); + + octave_idx_type len = idx.length (n); + idx.loop (len, _idxadds_helper (this->fortran_vec (), val)); } template -float -MArray::norm (float) const +void +MArray::idx_add (const idx_vector& idx, const MArray& vals) +{ + octave_idx_type n = this->length (); + octave_idx_type ext = idx.extent (n); + if (ext > n) + { + this->resize1 (ext); + n = ext; + } + + octave_quit (); + + octave_idx_type len = std::min (idx.length (n), vals.length ()); + idx.loop (len, _idxadda_helper (this->fortran_vec (), vals.data ())); +} + +template ::type, typename ref_param::type)> +struct _idxbinop_helper +{ + T *array; + const T *vals; + _idxbinop_helper (T *a, const T *v) : array (a), vals (v) { } + void operator () (octave_idx_type i) + { array[i] = op (array[i], *vals++); } +}; + +template +void +MArray::idx_min (const idx_vector& idx, const MArray& vals) { - (*current_liboctave_error_handler) - ("norm: only implemented for double and complex values"); + octave_idx_type n = this->length (); + octave_idx_type ext = idx.extent (n); + if (ext > n) + { + this->resize1 (ext); + n = ext; + } + + octave_quit (); + + octave_idx_type len = std::min (idx.length (n), vals.length ()); + idx.loop (len, _idxbinop_helper (this->fortran_vec (), vals.data ())); +} - return 0; +template +void +MArray::idx_max (const idx_vector& idx, const MArray& vals) +{ + octave_idx_type n = this->length (); + octave_idx_type ext = idx.extent (n); + if (ext > n) + { + this->resize1 (ext); + n = ext; + } + + octave_quit (); + + octave_idx_type len = std::min (idx.length (n), vals.length ()); + idx.loop (len, _idxbinop_helper (this->fortran_vec (), vals.data ())); +} + +// N-dimensional array with math ops. +template +void +MArray::changesign (void) +{ + if (Array::is_shared ()) + *this = - *this; + else + do_mx_inplace_op > (*this, mx_inline_uminus2); } // Element by element MArray by scalar ops. @@ -124,6 +216,7 @@ return a; } + template MArray& product_eq (MArray& a, const MArray& b) @@ -148,7 +241,7 @@ // Element by element MArray by scalar ops. -#define MARRAY_AS_OP(OP, FN) \ +#define MARRAY_NDS_OP(OP, FN) \ template \ MArray \ operator OP (const MArray& a, const T& s) \ @@ -156,14 +249,14 @@ return do_ms_binary_op, MArray, T> (a, s, FN); \ } -MARRAY_AS_OP (+, mx_inline_add) -MARRAY_AS_OP (-, mx_inline_sub) -MARRAY_AS_OP (*, mx_inline_mul) -MARRAY_AS_OP (/, mx_inline_div) +MARRAY_NDS_OP (+, mx_inline_add) +MARRAY_NDS_OP (-, mx_inline_sub) +MARRAY_NDS_OP (*, mx_inline_mul) +MARRAY_NDS_OP (/, mx_inline_div) // Element by element scalar by MArray ops. -#define MARRAY_SA_OP(OP, FN) \ +#define MARRAY_SND_OP(OP, FN) \ template \ MArray \ operator OP (const T& s, const MArray& a) \ @@ -171,14 +264,14 @@ return do_sm_binary_op, T, MArray > (s, a, FN); \ } -MARRAY_SA_OP(+, mx_inline_add) -MARRAY_SA_OP(-, mx_inline_sub) -MARRAY_SA_OP(*, mx_inline_mul) -MARRAY_SA_OP(/, mx_inline_div) +MARRAY_SND_OP (+, mx_inline_add) +MARRAY_SND_OP (-, mx_inline_sub) +MARRAY_SND_OP (*, mx_inline_mul) +MARRAY_SND_OP (/, mx_inline_div) // Element by element MArray by MArray ops. -#define MARRAY_AA_OP(FCN, OP, FN) \ +#define MARRAY_NDND_OP(FCN, OP, FN) \ template \ MArray \ FCN (const MArray& a, const MArray& b) \ @@ -186,12 +279,10 @@ return do_mm_binary_op, MArray, MArray > (a, b, FN, #FCN); \ } -MARRAY_AA_OP (operator +, +, mx_inline_add) -MARRAY_AA_OP (operator -, -, mx_inline_sub) -MARRAY_AA_OP (product, *, mx_inline_mul) -MARRAY_AA_OP (quotient, /, mx_inline_div) - -// Unary MArray ops. +MARRAY_NDND_OP (operator +, +, mx_inline_add) +MARRAY_NDND_OP (operator -, -, mx_inline_sub) +MARRAY_NDND_OP (product, *, mx_inline_mul) +MARRAY_NDND_OP (quotient, /, mx_inline_div) template MArray diff --git a/liboctave/MArray.h b/liboctave/MArray.h --- a/liboctave/MArray.h +++ b/liboctave/MArray.h @@ -27,7 +27,7 @@ #include "Array.h" -// One dimensional array with math ops. +// N-dimensional array with math ops. // But first, some preprocessor abuse... @@ -41,22 +41,29 @@ { protected: - MArray (T *d, octave_idx_type l) : Array (d, l) { } + MArray (T *d, octave_idx_type m, octave_idx_type n) : Array (d, m, n) { } + MArray (T *d, const dim_vector& dv) : Array (d, dv) { } public: - MArray (void) : Array () { } + MArray (void) : Array () {} + + explicit MArray (octave_idx_type m, octave_idx_type n) + : Array (m, n) { } - explicit MArray (octave_idx_type n) : Array (n) { } + explicit MArray (octave_idx_type m, octave_idx_type n, const T& val) + : Array (m, n, val) { } - MArray (octave_idx_type n, const T& val) : Array (n, val) { } + explicit MArray (const dim_vector& dv) + : Array (dv) { } + + explicit MArray (const dim_vector& dv, const T& val) + : Array (dv, val) { } MArray (const MArray& a) : Array (a) { } - // FIXME: kluge. - MArray (const Array& a) : Array (a, dim_vector (a.length ())) { } - - MArray (const dim_vector& dv) : Array (dv) { } + template + MArray (const Array& a) : Array (a) { } ~MArray (void) { } @@ -66,31 +73,35 @@ return *this; } - // FIXME: kluge again. This design really sucks. - void resize (octave_idx_type n, const T& val = Array::resize_fill_value ()) - { Array::resize_fill (n, 1, val); } + MArray reshape (const dim_vector& new_dims) const + { return Array::reshape (new_dims); } + + MArray permute (const Array& vec, + bool inv = false) const + { return Array::permute (vec, inv); } - MArray transpose (void) const { return Array::transpose (); } - MArray hermitian (T (*fcn) (const T&) = 0) const { return Array::hermitian (fcn); } + MArray ipermute (const Array& vec) const + { return Array::ipermute (vec); } - double norm (double p) const; - float norm (float p) const; + MArray squeeze (void) const { return Array::squeeze (); } + + MArray transpose (void) const + { return Array::transpose (); } - // FIXME: should go away. - template - MArray - map (U (&fcn) (T)) const - { return Array::template map (fcn); } + MArray hermitian (T (*fcn) (const T&) = 0) const + { return Array::hermitian (fcn); } + + // Performs indexed accumulative addition. + + void idx_add (const idx_vector& idx, T val); - template - MArray - map (U (&fcn) (const T&)) const - { return Array::template map (fcn); } + void idx_add (const idx_vector& idx, const MArray& vals); + + void idx_min (const idx_vector& idx, const MArray& vals); - // Currently, the OPS functions don't need to be friends, but that - // may change. + void idx_max (const idx_vector& idx, const MArray& vals); - // MARRAY_OPS_FRIEND_DECLS (MArray) + void changesign (void); }; #endif diff --git a/liboctave/MArray2.cc b/liboctave/MArray2.cc deleted file mode 100644 --- a/liboctave/MArray2.cc +++ /dev/null @@ -1,188 +0,0 @@ -/* - -Copyright (C) 1996, 1997, 1998, 2000, 2002, 2003, 2004, 2005, 2007 - John W. Eaton - -This file is part of Octave. - -Octave is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 3 of the License, or (at your -option) any later version. - -Octave is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License -along with Octave; see the file COPYING. If not, see -. - -*/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "MArray2.h" -#include "Array-util.h" -#include "lo-error.h" - -#include "MArray-defs.h" - -// Two dimensional array with math ops. - -// Element by element MArray2 by scalar ops. - -template -MArray2& -operator += (MArray2& a, const T& s) -{ - if (a.is_shared ()) - a = a + s; - else - do_ms_inplace_op, T> (a, s, mx_inline_add2); - return a; -} - -template -MArray2& -operator -= (MArray2& a, const T& s) -{ - if (a.is_shared ()) - a = a - s; - else - do_ms_inplace_op, T> (a, s, mx_inline_sub2); - return a; -} - -template -MArray2& -operator *= (MArray2& a, const T& s) -{ - if (a.is_shared ()) - a = a * s; - else - do_ms_inplace_op, T> (a, s, mx_inline_mul2); - return a; -} - -template -MArray2& -operator /= (MArray2& a, const T& s) -{ - if (a.is_shared ()) - a = a / s; - else - do_ms_inplace_op, T> (a, s, mx_inline_div2); - return a; -} - -// Element by element MArray2 by MArray2 ops. - -template -MArray2& -operator += (MArray2& a, const MArray2& b) -{ - if (a.is_shared ()) - a = a + b; - else - do_mm_inplace_op, MArray2 > (a, b, mx_inline_add2, "+="); - return a; -} - -template -MArray2& -operator -= (MArray2& a, const MArray2& b) -{ - if (a.is_shared ()) - a = a - b; - else - do_mm_inplace_op, MArray2 > (a, b, mx_inline_sub2, "-="); - return a; -} - - -template -MArray2& -product_eq (MArray2& a, const MArray2& b) -{ - if (a.is_shared ()) - return a = product (a, b); - else - do_mm_inplace_op, MArray2 > (a, b, mx_inline_mul2, ".*="); - return a; -} - -template -MArray2& -quotient_eq (MArray2& a, const MArray2& b) -{ - if (a.is_shared ()) - return a = quotient (a, b); - else - do_mm_inplace_op, MArray2 > (a, b, mx_inline_div2, "./="); - return a; -} - -// Element by element MArray2 by scalar ops. - -#define MARRAY_A2S_OP(OP, FN) \ - template \ - MArray2 \ - operator OP (const MArray2& a, const T& s) \ - { \ - return do_ms_binary_op, MArray2, T> (a, s, FN); \ - } - -MARRAY_A2S_OP (+, mx_inline_add) -MARRAY_A2S_OP (-, mx_inline_sub) -MARRAY_A2S_OP (*, mx_inline_mul) -MARRAY_A2S_OP (/, mx_inline_div) - -// Element by element scalar by MArray2 ops. - -#define MARRAY_SA2_OP(OP, FN) \ - template \ - MArray2 \ - operator OP (const T& s, const MArray2& a) \ - { \ - return do_sm_binary_op, T, MArray2 > (s, a, FN); \ - } - -MARRAY_SA2_OP (+, mx_inline_add) -MARRAY_SA2_OP (-, mx_inline_sub) -MARRAY_SA2_OP (*, mx_inline_mul) -MARRAY_SA2_OP (/, mx_inline_div) - -// Element by element MArray2 by MArray2 ops. - -#define MARRAY_A2A2_OP(FCN, OP, FN) \ - template \ - MArray2 \ - FCN (const MArray2& a, const MArray2& b) \ - { \ - return do_mm_binary_op, MArray2, MArray2 > (a, b, FN, #FCN); \ - } - -MARRAY_A2A2_OP (operator +, +, mx_inline_add) -MARRAY_A2A2_OP (operator -, -, mx_inline_sub) -MARRAY_A2A2_OP (product, *, mx_inline_mul) -MARRAY_A2A2_OP (quotient, /, mx_inline_div) - -// Unary MArray2 ops. - -template -MArray2 -operator + (const MArray2& a) -{ - return a; -} - -template -MArray2 -operator - (const MArray2& a) -{ - return do_mx_unary_op, MArray2 > (a, mx_inline_uminus); -} diff --git a/liboctave/MArray2.h b/liboctave/MArray2.h --- a/liboctave/MArray2.h +++ b/liboctave/MArray2.h @@ -25,83 +25,14 @@ #if !defined (octave_MArray2_h) #define octave_MArray2_h 1 -#include "Array2.h" - -// Two dimensional array with math ops. - -// But first, some preprocessor abuse... - -#include "MArray-decl.h" - -MARRAY_OPS_FORWARD_DECLS (MArray2, ) - -template -class -MArray2 : public Array2 -{ -protected: - - MArray2 (T *d, octave_idx_type n, octave_idx_type m) : Array2 (d, n, m) { } - -public: - - MArray2 (void) : Array2 () { } - - MArray2 (octave_idx_type n, octave_idx_type m) : Array2 (n, m) { } - - MArray2 (octave_idx_type n, octave_idx_type m, const T& val) : Array2 (n, m, val) { } - - MArray2 (const dim_vector& dv) : Array2 (dv) { } - - MArray2 (const dim_vector& dv, const T& val) : Array2 (dv, val) { } - - MArray2 (const MArray2& a) : Array2 (a) { } - - MArray2 (const Array2& a) : Array2 (a) { } - - template - MArray2 (const Array2& a) : Array2 (a) { } +#include "MArray.h" +#define MArray2 MArray - template - MArray2 (const MArray2& a) : Array2 (a) { } - - ~MArray2 (void) { } - - MArray2& operator = (const MArray2& a) - { - Array2::operator = (a); - return *this; - } - - MArray2& insert (const Array2& a, octave_idx_type r, octave_idx_type c) - { - Array2::insert (a, r, c); - return *this; - } - - MArray2 transpose (void) const { return Array2::transpose (); } - MArray2 hermitian (T (*fcn) (const T&) = 0) const { return Array2::hermitian (fcn); } +// If we're with GNU C++, issue a warning. +#ifdef __GNUC__ +#warning Using MArray2 is deprecated. Use MArray. +#endif - MArray2 diag (octave_idx_type k) const - { - return Array2::diag (k); - } - // FIXME: should go away. - template - MArray2 - map (U (&fcn) (T)) const - { return Array2::template map (fcn); } - - template - MArray2 - map (U (&fcn) (const T&)) const - { return Array2::template map (fcn); } - - // Currently, the OPS functions don't need to be friends, but that - // may change. - - // MARRAY_OPS_FRIEND_DECLS (MArray2) -}; #endif diff --git a/liboctave/MArrayN.cc b/liboctave/MArrayN.cc deleted file mode 100644 --- a/liboctave/MArrayN.cc +++ /dev/null @@ -1,297 +0,0 @@ -/* - -Copyright (C) 1996, 1997, 2003, 2004, 2005, 2007, 2009 John W. Eaton - -This file is part of Octave. - -Octave is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 3 of the License, or (at your -option) any later version. - -Octave is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License -along with Octave; see the file COPYING. If not, see -. - -*/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "MArrayN.h" -#include "Array-util.h" -#include "lo-error.h" - -#include "MArray-defs.h" -#include "mx-inlines.cc" - -template -struct _idxadds_helper -{ - T *array; - T val; - _idxadds_helper (T *a, T v) : array (a), val (v) { } - void operator () (octave_idx_type i) - { array[i] += val; } -}; - -template -struct _idxadda_helper -{ - T *array; - const T *vals; - _idxadda_helper (T *a, const T *v) : array (a), vals (v) { } - void operator () (octave_idx_type i) - { array[i] += *vals++; } -}; - -template -void -MArrayN::idx_add (const idx_vector& idx, T val) -{ - octave_idx_type n = this->length (); - octave_idx_type ext = idx.extent (n); - if (ext > n) - { - this->resize (ext); - n = ext; - } - - octave_quit (); - - octave_idx_type len = idx.length (n); - idx.loop (len, _idxadds_helper (this->fortran_vec (), val)); -} - -template -void -MArrayN::idx_add (const idx_vector& idx, const MArrayN& vals) -{ - octave_idx_type n = this->length (); - octave_idx_type ext = idx.extent (n); - if (ext > n) - { - this->resize (ext); - n = ext; - } - - octave_quit (); - - octave_idx_type len = std::min (idx.length (n), vals.length ()); - idx.loop (len, _idxadda_helper (this->fortran_vec (), vals.data ())); -} - -template ::type, typename ref_param::type)> -struct _idxbinop_helper -{ - T *array; - const T *vals; - _idxbinop_helper (T *a, const T *v) : array (a), vals (v) { } - void operator () (octave_idx_type i) - { array[i] = op (array[i], *vals++); } -}; - -template -void -MArrayN::idx_min (const idx_vector& idx, const MArrayN& vals) -{ - octave_idx_type n = this->length (); - octave_idx_type ext = idx.extent (n); - if (ext > n) - { - this->resize (ext); - n = ext; - } - - octave_quit (); - - octave_idx_type len = std::min (idx.length (n), vals.length ()); - idx.loop (len, _idxbinop_helper (this->fortran_vec (), vals.data ())); -} - -template -void -MArrayN::idx_max (const idx_vector& idx, const MArrayN& vals) -{ - octave_idx_type n = this->length (); - octave_idx_type ext = idx.extent (n); - if (ext > n) - { - this->resize (ext); - n = ext; - } - - octave_quit (); - - octave_idx_type len = std::min (idx.length (n), vals.length ()); - idx.loop (len, _idxbinop_helper (this->fortran_vec (), vals.data ())); -} - -// N-dimensional array with math ops. -template -void -MArrayN::changesign (void) -{ - if (Array::is_shared ()) - *this = - *this; - else - do_mx_inplace_op > (*this, mx_inline_uminus2); -} - -// Element by element MArrayN by scalar ops. - -template -MArrayN& -operator += (MArrayN& a, const T& s) -{ - if (a.is_shared ()) - a = a + s; - else - do_ms_inplace_op, T> (a, s, mx_inline_add2); - return a; -} - -template -MArrayN& -operator -= (MArrayN& a, const T& s) -{ - if (a.is_shared ()) - a = a - s; - else - do_ms_inplace_op, T> (a, s, mx_inline_sub2); - return a; -} - -template -MArrayN& -operator *= (MArrayN& a, const T& s) -{ - if (a.is_shared ()) - a = a * s; - else - do_ms_inplace_op, T> (a, s, mx_inline_mul2); - return a; -} - -template -MArrayN& -operator /= (MArrayN& a, const T& s) -{ - if (a.is_shared ()) - a = a / s; - else - do_ms_inplace_op, T> (a, s, mx_inline_div2); - return a; -} - -// Element by element MArrayN by MArrayN ops. - -template -MArrayN& -operator += (MArrayN& a, const MArrayN& b) -{ - if (a.is_shared ()) - a = a + b; - else - do_mm_inplace_op, MArrayN > (a, b, mx_inline_add2, "+="); - return a; -} - -template -MArrayN& -operator -= (MArrayN& a, const MArrayN& b) -{ - if (a.is_shared ()) - a = a - b; - else - do_mm_inplace_op, MArrayN > (a, b, mx_inline_sub2, "-="); - return a; -} - - -template -MArrayN& -product_eq (MArrayN& a, const MArrayN& b) -{ - if (a.is_shared ()) - return a = product (a, b); - else - do_mm_inplace_op, MArrayN > (a, b, mx_inline_mul2, ".*="); - return a; -} - -template -MArrayN& -quotient_eq (MArrayN& a, const MArrayN& b) -{ - if (a.is_shared ()) - return a = quotient (a, b); - else - do_mm_inplace_op, MArrayN > (a, b, mx_inline_div2, "./="); - return a; -} - -// Element by element MArrayN by scalar ops. - -#define MARRAY_NDS_OP(OP, FN) \ - template \ - MArrayN \ - operator OP (const MArrayN& a, const T& s) \ - { \ - return do_ms_binary_op, MArrayN, T> (a, s, FN); \ - } - -MARRAY_NDS_OP (+, mx_inline_add) -MARRAY_NDS_OP (-, mx_inline_sub) -MARRAY_NDS_OP (*, mx_inline_mul) -MARRAY_NDS_OP (/, mx_inline_div) - -// Element by element scalar by MArrayN ops. - -#define MARRAY_SND_OP(OP, FN) \ - template \ - MArrayN \ - operator OP (const T& s, const MArrayN& a) \ - { \ - return do_sm_binary_op, T, MArrayN > (s, a, FN); \ - } - -MARRAY_SND_OP (+, mx_inline_add) -MARRAY_SND_OP (-, mx_inline_sub) -MARRAY_SND_OP (*, mx_inline_mul) -MARRAY_SND_OP (/, mx_inline_div) - -// Element by element MArrayN by MArrayN ops. - -#define MARRAY_NDND_OP(FCN, OP, FN) \ - template \ - MArrayN \ - FCN (const MArrayN& a, const MArrayN& b) \ - { \ - return do_mm_binary_op, MArrayN, MArrayN > (a, b, FN, #FCN); \ - } - -MARRAY_NDND_OP (operator +, +, mx_inline_add) -MARRAY_NDND_OP (operator -, -, mx_inline_sub) -MARRAY_NDND_OP (product, *, mx_inline_mul) -MARRAY_NDND_OP (quotient, /, mx_inline_div) - -template -MArrayN -operator + (const MArrayN& a) -{ - return a; -} - -template -MArrayN -operator - (const MArrayN& a) -{ - return do_mx_unary_op, MArrayN > (a, mx_inline_uminus); -} diff --git a/liboctave/MArrayN.h b/liboctave/MArrayN.h --- a/liboctave/MArrayN.h +++ b/liboctave/MArrayN.h @@ -25,79 +25,12 @@ #if !defined (octave_MArrayN_h) #define octave_MArrayN_h 1 -#include "Array.h" -#include "MArray2.h" -#include "dim-vector.h" - -// N-dimensional array with math ops. - -// But first, some preprocessor abuse... - -#include "MArray-decl.h" - -MARRAY_OPS_FORWARD_DECLS (MArrayN, ) - -template -class -MArrayN : public Array -{ -protected: - - MArrayN (T *d, const dim_vector& dv) : Array (d, dv) { } - -public: - - MArrayN (void) : Array () {} - - MArrayN (const dim_vector& dv) : Array (dv) { } - - MArrayN (const dim_vector& dv, const T& val) : Array (dv, val) { } - - template - explicit MArrayN (const Array2& a) : Array (a) { } - - template - MArrayN (const Array& a) : Array (a) { } - - template - MArrayN (const MArrayN& a) : Array (a) { } +#include "MArray.h" +#define MArrayN MArray - ~MArrayN (void) { } - - MArrayN& operator = (const MArrayN& a) - { - Array::operator = (a); - return *this; - } - - MArrayN reshape (const dim_vector& new_dims) const - { return Array::reshape (new_dims); } - - MArrayN permute (const Array& vec, - bool inv = false) const - { return Array::permute (vec, inv); } - - MArrayN ipermute (const Array& vec) const - { return Array::ipermute (vec); } - - MArrayN squeeze (void) const { return Array::squeeze (); } - - MArrayN diag (octave_idx_type k) const - { - return Array::diag (k); - } - - // Performs indexed accumulative addition. - - void idx_add (const idx_vector& idx, T val); - - void idx_add (const idx_vector& idx, const MArrayN& vals); - - void idx_min (const idx_vector& idx, const MArrayN& vals); - - void idx_max (const idx_vector& idx, const MArrayN& vals); - - void changesign (void); -}; +// If we're with GNU C++, issue a warning. +#ifdef __GNUC__ +#warning Using MArrayN is deprecated. Use MArray. +#endif #endif diff --git a/liboctave/MDiagArray2.h b/liboctave/MDiagArray2.h --- a/liboctave/MDiagArray2.h +++ b/liboctave/MDiagArray2.h @@ -26,7 +26,6 @@ #define octave_MDiagArray2_h 1 #include "DiagArray2.h" -#include "MArray2.h" #include "MArray.h" // Two dimensional diagonal array with math ops. @@ -72,7 +71,7 @@ return *this; } - operator MArray2 () const + operator MArray () const { return DiagArray2::operator Array2 (); } diff --git a/liboctave/MSparse-defs.h b/liboctave/MSparse-defs.h --- a/liboctave/MSparse-defs.h +++ b/liboctave/MSparse-defs.h @@ -184,7 +184,7 @@ /* SPARSE_OP_ASSIGN_DEFS (MSparse, T, T) */ \ SPARSE_OP_ASSIGN_DEFS (MSparse, T, MSparse, API) \ SPARSE_UNOP_DEFS (MSparse, T, API) \ - SPARSE_BINOP_DEFS (MSparse, MArray2, T, API) + SPARSE_BINOP_DEFS (MSparse, MArray, T, API) // Define all the MSparse forwarding functions for return type R and // MSparse element type T diff --git a/liboctave/MSparse.cc b/liboctave/MSparse.cc --- a/liboctave/MSparse.cc +++ b/liboctave/MSparse.cc @@ -27,7 +27,7 @@ #include "quit.h" #include "lo-error.h" -#include "MArray2.h" +#include "MArray.h" #include "Array-util.h" #include "MSparse.h" @@ -187,13 +187,13 @@ #define SPARSE_A2S_OP_1(OP) \ template \ - MArray2 \ + MArray \ operator OP (const MSparse& a, const T& s) \ { \ octave_idx_type nr = a.rows (); \ octave_idx_type nc = a.cols (); \ \ - MArray2 r (nr, nc, (0.0 OP s)); \ + MArray r (nr, nc, (0.0 OP s)); \ \ for (octave_idx_type j = 0; j < nc; j++) \ for (octave_idx_type i = a.cidx(j); i < a.cidx(j+1); i++) \ @@ -233,13 +233,13 @@ #define SPARSE_SA2_OP_1(OP) \ template \ - MArray2 \ + MArray \ operator OP (const T& s, const MSparse& a) \ { \ octave_idx_type nr = a.rows (); \ octave_idx_type nc = a.cols (); \ \ - MArray2 r (nr, nc, (s OP 0.0)); \ + MArray r (nr, nc, (s OP 0.0)); \ \ for (octave_idx_type j = 0; j < nc; j++) \ for (octave_idx_type i = a.cidx(j); i < a.cidx(j+1); i++) \ diff --git a/liboctave/MSparse.h b/liboctave/MSparse.h --- a/liboctave/MSparse.h +++ b/liboctave/MSparse.h @@ -24,7 +24,7 @@ #if !defined (octave_MSparse_h) #define octave_MSparse_h 1 -#include "MArray2.h" +#include "MArray.h" #include "Sparse.h" @@ -34,7 +34,7 @@ #include "MSparse-defs.h" -SPARSE_OPS_FORWARD_DECLS (MSparse, MArray2, ) +SPARSE_OPS_FORWARD_DECLS (MSparse, MArray, ) template class @@ -131,7 +131,7 @@ // Currently, the OPS functions don't need to be friends, but that // may change. - // SPARSE_OPS_FRIEND_DECLS (MSparse, MArray2) + // SPARSE_OPS_FRIEND_DECLS (MSparse, MArray) }; #endif diff --git a/liboctave/Makefile.am b/liboctave/Makefile.am --- a/liboctave/Makefile.am +++ b/liboctave/Makefile.am @@ -271,8 +271,6 @@ Array.cc \ DiagArray2.cc \ MArray.cc \ - MArray2.cc \ - MArrayN.cc \ MDiagArray2.cc \ base-lu.cc \ base-qr.cc \ diff --git a/liboctave/MatrixType.cc b/liboctave/MatrixType.cc --- a/liboctave/MatrixType.cc +++ b/liboctave/MatrixType.cc @@ -58,7 +58,7 @@ template MatrixType::matrix_type -matrix_real_probe (const MArray2& a) +matrix_real_probe (const MArray& a) { MatrixType::matrix_type typ; octave_idx_type nrows = a.rows (); @@ -115,7 +115,7 @@ template MatrixType::matrix_type -matrix_complex_probe (const MArray2& a) +matrix_complex_probe (const MArray& a) { MatrixType::matrix_type typ; octave_idx_type nrows = a.rows (); diff --git a/liboctave/PermMatrix.cc b/liboctave/PermMatrix.cc --- a/liboctave/PermMatrix.cc +++ b/liboctave/PermMatrix.cc @@ -57,14 +57,14 @@ gripe_invalid_permutation (); else { - Array idxa (len); + Array idxa (len, 1); for (octave_idx_type i = 0; i < len; i++) idxa(i) = idx(i); Array::operator = (idxa); } } PermMatrix::PermMatrix (octave_idx_type n) - : Array (n), _colp (false) + : Array (n, 1), _colp (false) { for (octave_idx_type i = 0; i < n; i++) xelem (i) = i; } @@ -145,7 +145,7 @@ return PermMatrix (n); const octave_idx_type *p = data (); - Array res_pvec (n, -1); + Array res_pvec (n, 1, -1); octave_idx_type *q = res_pvec.fortran_vec (); for (octave_idx_type ics = 0; ics < n; ics++) @@ -181,7 +181,7 @@ PermMatrix PermMatrix::eye (octave_idx_type n) { - Array p(n); + Array p(n, 1); for (octave_idx_type i = 0; i < n; i++) p(i) = i; @@ -204,7 +204,7 @@ } else { - Array ra (n); + Array ra (n, 1); if (a._colp) ra.assign (idx_vector (ib), ia); else diff --git a/liboctave/Quad.cc b/liboctave/Quad.cc --- a/liboctave/Quad.cc +++ b/liboctave/Quad.cc @@ -126,11 +126,11 @@ double result = 0.0; octave_idx_type leniw = 183*npts - 122; - Array iwork (leniw); + Array iwork (leniw, 1); octave_idx_type *piwork = iwork.fortran_vec (); octave_idx_type lenw = 2*leniw - npts; - Array work (lenw); + Array work (lenw, 1); double *pwork = work.fortran_vec (); user_fcn = f; @@ -160,11 +160,11 @@ double result = 0.0; octave_idx_type leniw = 128; - Array iwork (leniw); + Array iwork (leniw, 1); octave_idx_type *piwork = iwork.fortran_vec (); octave_idx_type lenw = 8*leniw; - Array work (lenw); + Array work (lenw, 1); double *pwork = work.fortran_vec (); user_fcn = f; @@ -222,11 +222,11 @@ float result = 0.0; octave_idx_type leniw = 183*npts - 122; - Array iwork (leniw); + Array iwork (leniw, 1); octave_idx_type *piwork = iwork.fortran_vec (); octave_idx_type lenw = 2*leniw - npts; - Array work (lenw); + Array work (lenw, 1); float *pwork = work.fortran_vec (); float_user_fcn = ff; @@ -256,11 +256,11 @@ float result = 0.0; octave_idx_type leniw = 128; - Array iwork (leniw); + Array iwork (leniw, 1); octave_idx_type *piwork = iwork.fortran_vec (); octave_idx_type lenw = 8*leniw; - Array work (lenw); + Array work (lenw, 1); float *pwork = work.fortran_vec (); float_user_fcn = ff; diff --git a/liboctave/SparseCmplxLU.cc b/liboctave/SparseCmplxLU.cc --- a/liboctave/SparseCmplxLU.cc +++ b/liboctave/SparseCmplxLU.cc @@ -190,10 +190,10 @@ Rfact.xcidx (nr) = nr; double *Rx = Rfact.data (); - P.resize (nr); + P.resize (nr, 1); octave_idx_type *p = P.fortran_vec (); - Q.resize (nc); + Q.resize (nc, 1); octave_idx_type *q = Q.fortran_vec (); octave_idx_type do_recip; @@ -417,10 +417,10 @@ Rfact.xcidx (nr) = nr; double *Rx = Rfact.data (); - P.resize (nr); + P.resize (nr, 1); octave_idx_type *p = P.fortran_vec (); - Q.resize (nc); + Q.resize (nc, 1); octave_idx_type *q = Q.fortran_vec (); octave_idx_type do_recip; diff --git a/liboctave/SparseCmplxQR.cc b/liboctave/SparseCmplxQR.cc --- a/liboctave/SparseCmplxQR.cc +++ b/liboctave/SparseCmplxQR.cc @@ -882,14 +882,14 @@ } ComplexMatrix -qrsolve (const SparseComplexMatrix &a, const MArray2 &b, +qrsolve (const SparseComplexMatrix &a, const MArray &b, octave_idx_type &info) { return qrsolve (a, Matrix (b), info); } ComplexMatrix -qrsolve (const SparseComplexMatrix &a, const MArray2 &b, +qrsolve (const SparseComplexMatrix &a, const MArray &b, octave_idx_type &info) { return qrsolve (a, ComplexMatrix (b), info); diff --git a/liboctave/SparseCmplxQR.h b/liboctave/SparseCmplxQR.h --- a/liboctave/SparseCmplxQR.h +++ b/liboctave/SparseCmplxQR.h @@ -150,7 +150,7 @@ octave_idx_type &info); extern ComplexMatrix qrsolve (const SparseComplexMatrix &a, - const MArray2 &b, + const MArray &b, octave_idx_type &info); extern SparseComplexMatrix qrsolve (const SparseComplexMatrix &a, @@ -162,7 +162,7 @@ octave_idx_type &info); extern ComplexMatrix qrsolve (const SparseComplexMatrix &a, - const MArray2 &b, + const MArray &b, octave_idx_type &info); extern SparseComplexMatrix qrsolve (const SparseComplexMatrix &a, diff --git a/liboctave/SparseQR.cc b/liboctave/SparseQR.cc --- a/liboctave/SparseQR.cc +++ b/liboctave/SparseQR.cc @@ -898,14 +898,14 @@ } Matrix -qrsolve(const SparseMatrix &a, const MArray2 &b, +qrsolve(const SparseMatrix &a, const MArray &b, octave_idx_type &info) { return qrsolve (a, Matrix (b), info); } ComplexMatrix -qrsolve(const SparseMatrix &a, const MArray2 &b, +qrsolve(const SparseMatrix &a, const MArray &b, octave_idx_type &info) { return qrsolve (a, ComplexMatrix (b), info); diff --git a/liboctave/SparseQR.h b/liboctave/SparseQR.h --- a/liboctave/SparseQR.h +++ b/liboctave/SparseQR.h @@ -145,7 +145,7 @@ extern Matrix qrsolve (const SparseMatrix &a, const Matrix &b, octave_idx_type &info); -extern Matrix qrsolve (const SparseMatrix &a, const MArray2 &b, +extern Matrix qrsolve (const SparseMatrix &a, const MArray &b, octave_idx_type &info); extern SparseMatrix qrsolve (const SparseMatrix &a, const SparseMatrix &b, @@ -154,7 +154,7 @@ extern ComplexMatrix qrsolve (const SparseMatrix &a, const ComplexMatrix &b, octave_idx_type &info); -extern ComplexMatrix qrsolve (const SparseMatrix &a, const MArray2 &b, +extern ComplexMatrix qrsolve (const SparseMatrix &a, const MArray &b, octave_idx_type &info); extern SparseComplexMatrix qrsolve (const SparseMatrix &a, diff --git a/liboctave/SparsedbleLU.cc b/liboctave/SparsedbleLU.cc --- a/liboctave/SparsedbleLU.cc +++ b/liboctave/SparsedbleLU.cc @@ -183,10 +183,10 @@ Rfact.xcidx (nr) = nr; double *Rx = Rfact.data (); - P.resize (nr); + P.resize (nr, 1); octave_idx_type *p = P.fortran_vec (); - Q.resize (nc); + Q.resize (nc, 1); octave_idx_type *q = Q.fortran_vec (); octave_idx_type do_recip; @@ -399,10 +399,10 @@ Rfact.xcidx (nr) = nr; double *Rx = Rfact.data (); - P.resize (nr); + P.resize (nr, 1); octave_idx_type *p = P.fortran_vec (); - Q.resize (nc); + Q.resize (nc, 1); octave_idx_type *q = Q.fortran_vec (); octave_idx_type do_recip; diff --git a/liboctave/base-lu.cc b/liboctave/base-lu.cc --- a/liboctave/base-lu.cc +++ b/liboctave/base-lu.cc @@ -122,7 +122,7 @@ { octave_idx_type a_nr = a_fact.rows (); - Array pvt (a_nr); + Array pvt (a_nr, 1); for (octave_idx_type i = 0; i < a_nr; i++) pvt.xelem (i) = i; diff --git a/liboctave/dColVector.h b/liboctave/dColVector.h --- a/liboctave/dColVector.h +++ b/liboctave/dColVector.h @@ -34,17 +34,19 @@ { public: - ColumnVector (void) : MArray () { } + ColumnVector (void) : MArray (0, 1) { } - explicit ColumnVector (octave_idx_type n) : MArray (n) { } + explicit ColumnVector (octave_idx_type n) : MArray (n, 1) { } - explicit ColumnVector (const dim_vector& dv) : MArray (dv) { } + explicit ColumnVector (const dim_vector& dv) + : MArray (dv.as_column ()) { } - ColumnVector (octave_idx_type n, double val) : MArray (n, val) { } + ColumnVector (octave_idx_type n, double val) : MArray (n, 1, val) { } ColumnVector (const ColumnVector& a) : MArray (a) { } - ColumnVector (const MArray& a) : MArray (a) { } + ColumnVector (const MArray& a) : MArray (a.as_column ()) { } + ColumnVector (const Array& a) : MArray (a.as_column ()) { } ColumnVector& operator = (const ColumnVector& a) { @@ -93,9 +95,15 @@ friend OCTAVE_API std::ostream& operator << (std::ostream& os, const ColumnVector& a); friend OCTAVE_API std::istream& operator >> (std::istream& is, ColumnVector& a); + void resize (octave_idx_type n, const double& rfv = Array::resize_fill_value ()) + { Array::resize (n, 1, rfv); } + + void clear (octave_idx_type n) + { Array::clear (n, 1); } + private: - ColumnVector (double *d, octave_idx_type l) : MArray (d, l) { } + ColumnVector (double *d, octave_idx_type l) : MArray (d, l, 1) { } }; // Publish externally used friend functions. diff --git a/liboctave/dMatrix.cc b/liboctave/dMatrix.cc --- a/liboctave/dMatrix.cc +++ b/liboctave/dMatrix.cc @@ -214,24 +214,24 @@ // Matrix class. Matrix::Matrix (const RowVector& rv) - : MArray2 (Array2 (rv, 1, rv.length ())) + : MArray (rv) { } Matrix::Matrix (const ColumnVector& cv) - : MArray2 (Array2 (cv, cv.length (), 1)) + : MArray (cv) { } Matrix::Matrix (const DiagMatrix& a) - : MArray2 (a.rows (), a.cols (), 0.0) + : MArray (a.rows (), a.cols (), 0.0) { for (octave_idx_type i = 0; i < a.length (); i++) elem (i, i) = a.elem (i, i); } Matrix::Matrix (const PermMatrix& a) - : MArray2 (a.rows (), a.cols (), 0.0) + : MArray (a.rows (), a.cols (), 0.0) { const Array ia (a.pvec ()); octave_idx_type len = a.rows (); @@ -247,15 +247,12 @@ // here? Matrix::Matrix (const boolMatrix& a) - : MArray2 (a.rows (), a.cols ()) + : MArray (a) { - for (octave_idx_type i = 0; i < a.rows (); i++) - for (octave_idx_type j = 0; j < a.cols (); j++) - elem (i, j) = a.elem (i, j); } Matrix::Matrix (const charMatrix& a) - : MArray2 (a.rows (), a.cols ()) + : MArray (a.rows (), a.cols ()) { for (octave_idx_type i = 0; i < a.rows (); i++) for (octave_idx_type j = 0; j < a.cols (); j++) @@ -296,7 +293,7 @@ Matrix& Matrix::insert (const Matrix& a, octave_idx_type r, octave_idx_type c) { - Array2::insert (a, r, c); + Array::insert (a, r, c); return *this; } @@ -614,13 +611,13 @@ RowVector Matrix::row (octave_idx_type i) const { - return MArray (index (idx_vector (i), idx_vector::colon)); + return index (idx_vector (i), idx_vector::colon); } ColumnVector Matrix::column (octave_idx_type i) const { - return MArray (index (idx_vector::colon, idx_vector (i))); + return index (idx_vector::colon, idx_vector (i)); } Matrix @@ -734,13 +731,13 @@ (*current_liboctave_error_handler) ("inverse requires square matrix"); else { - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); retval = *this; double *tmp_data = retval.fortran_vec (); - Array z(1); + Array z(1, 1); octave_idx_type lwork = -1; // Query the optimum work array size. @@ -749,7 +746,7 @@ lwork = static_cast (z(0)); lwork = (lwork < 2 *nc ? 2*nc : lwork); - z.resize (lwork); + z.resize (lwork, 1); double *pz = z.fortran_vec (); info = 0; @@ -771,7 +768,7 @@ // Now calculate the condition number for non-singular matrix. char job = '1'; - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dgecon, DGECON, (F77_CONST_CHAR_ARG2 (&job, 1), nc, tmp_data, nr, anorm, @@ -1006,7 +1003,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); Complex *pwsave = wsave.fortran_vec (); retval = ComplexMatrix (*this); @@ -1047,7 +1044,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); Complex *pwsave = wsave.fortran_vec (); retval = ComplexMatrix (*this); @@ -1091,7 +1088,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); Complex *pwsave = wsave.fortran_vec (); retval = ComplexMatrix (*this); @@ -1110,10 +1107,10 @@ nsamples = nr; nn = 4*npts+15; - wsave.resize (nn); + wsave.resize (nn, 1); pwsave = wsave.fortran_vec (); - Array tmp (npts); + Array tmp (npts, 1); Complex *prow = tmp.fortran_vec (); F77_FUNC (zffti, ZFFTI) (npts, pwsave); @@ -1157,7 +1154,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); Complex *pwsave = wsave.fortran_vec (); retval = ComplexMatrix (*this); @@ -1179,10 +1176,10 @@ nsamples = nr; nn = 4*npts+15; - wsave.resize (nn); + wsave.resize (nn, 1); pwsave = wsave.fortran_vec (); - Array tmp (npts); + Array tmp (npts, 1); Complex *prow = tmp.fortran_vec (); F77_FUNC (zffti, ZFFTI) (npts, pwsave); @@ -1279,9 +1276,9 @@ } else { - Array z (3 * nc); + Array z (3 * nc, 1); double *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dpocon, DPOCON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -1303,7 +1300,7 @@ if (typ == MatrixType::Full) { - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); Matrix atmp = *this; @@ -1330,9 +1327,9 @@ { // Now calc the condition number for non-singular matrix. char job = '1'; - Array z (4 * nc); + Array z (4 * nc, 1); double *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dgecon, DGECON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -1395,9 +1392,9 @@ char uplo = 'U'; char dia = 'N'; - Array z (3 * nc); + Array z (3 * nc, 1); double *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dtrcon, DTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -1423,9 +1420,9 @@ char uplo = 'L'; char dia = 'N'; - Array z (3 * nc); + Array z (3 * nc, 1); double *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dtrcon, DTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -1468,9 +1465,9 @@ } else { - Array z (3 * nc); + Array z (3 * nc, 1); double *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dpocon, DPOCON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -1487,16 +1484,16 @@ { octave_idx_type info = 0; - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); if(anorm < 0.) anorm = atmp.abs().sum(). row(static_cast(0)).max(); - Array z (4 * nc); + Array z (4 * nc, 1); double *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dgetrf, DGETRF, (nr, nr, tmp_data, nr, pipvt, info)); @@ -1567,9 +1564,9 @@ char uplo = 'U'; char dia = 'N'; - Array z (3 * nc); + Array z (3 * nc, 1); double *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dtrcon, DTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -1667,9 +1664,9 @@ char uplo = 'L'; char dia = 'N'; - Array z (3 * nc); + Array z (3 * nc, 1); double *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dtrcon, DTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -1773,9 +1770,9 @@ { if (calc_cond) { - Array z (3 * nc); + Array z (3 * nc, 1); double *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dpocon, DPOCON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -1825,7 +1822,7 @@ { info = 0; - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); Matrix atmp = *this; @@ -1833,9 +1830,9 @@ if(anorm < 0.) anorm = atmp.abs().sum().row(static_cast(0)).max(); - Array z (4 * nc); + Array z (4 * nc, 1); double *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dgetrf, DGETRF, (nr, nr, tmp_data, nr, pipvt, info)); @@ -2264,13 +2261,13 @@ double *tmp_data = atmp.fortran_vec (); double *pretval = retval.fortran_vec (); - Array s (minmn); + Array s (minmn, 1); double *ps = s.fortran_vec (); // Ask DGELSD what the dimension of WORK should be. octave_idx_type lwork = -1; - Array work (1); + Array work (1, 1); octave_idx_type smlsiz; F77_FUNC (xilaenv, XILAENV) (9, F77_CONST_CHAR_ARG2 ("DGELSD", 6), @@ -2302,7 +2299,7 @@ octave_idx_type liwork = 3 * minmn * nlvl + 11 * minmn; if (liwork < 1) liwork = 1; - Array iwork (liwork); + Array iwork (liwork, 1); octave_idx_type* piwork = iwork.fortran_vec (); F77_XFCN (dgelsd, DGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, @@ -2347,7 +2344,7 @@ } lwork = static_cast (work(0)); - work.resize (lwork); + work.resize (lwork, 1); F77_XFCN (dgelsd, DGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, ps, rcon, rank, @@ -2465,13 +2462,13 @@ double *tmp_data = atmp.fortran_vec (); double *pretval = retval.fortran_vec (); - Array s (minmn); + Array s (minmn, 1); double *ps = s.fortran_vec (); // Ask DGELSD what the dimension of WORK should be. octave_idx_type lwork = -1; - Array work (1); + Array work (1, 1); octave_idx_type smlsiz; F77_FUNC (xilaenv, XILAENV) (9, F77_CONST_CHAR_ARG2 ("DGELSD", 6), @@ -2496,7 +2493,7 @@ octave_idx_type liwork = 3 * minmn * nlvl + 11 * minmn; if (liwork < 1) liwork = 1; - Array iwork (liwork); + Array iwork (liwork, 1); octave_idx_type* piwork = iwork.fortran_vec (); F77_XFCN (dgelsd, DGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, @@ -2504,7 +2501,7 @@ lwork, piwork, info)); lwork = static_cast (work(0)); - work.resize (lwork); + work.resize (lwork, 1); F77_XFCN (dgelsd, DGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, ps, rcon, rank, @@ -2831,7 +2828,7 @@ Matrix Matrix::diag (octave_idx_type k) const { - return MArray2::diag (k); + return MArray::diag (k); } ColumnVector @@ -2852,7 +2849,7 @@ if (nr > 0 && nc > 0) { result.resize (nr); - idx_arg.resize (nr); + idx_arg.resize (nr, 1); for (octave_idx_type i = 0; i < nr; i++) { @@ -2907,7 +2904,7 @@ if (nr > 0 && nc > 0) { result.resize (nr); - idx_arg.resize (nr); + idx_arg.resize (nr, 1); for (octave_idx_type i = 0; i < nr; i++) { @@ -2962,7 +2959,7 @@ if (nr > 0 && nc > 0) { result.resize (nc); - idx_arg.resize (nc); + idx_arg.resize (1, nc); for (octave_idx_type j = 0; j < nc; j++) { @@ -3017,7 +3014,7 @@ if (nr > 0 && nc > 0) { result.resize (nc); - idx_arg.resize (nc); + idx_arg.resize (1, nc); for (octave_idx_type j = 0; j < nc; j++) { diff --git a/liboctave/dMatrix.h b/liboctave/dMatrix.h --- a/liboctave/dMatrix.h +++ b/liboctave/dMatrix.h @@ -24,7 +24,8 @@ #if !defined (octave_Matrix_int_h) #define octave_Matrix_int_h 1 -#include "MArray2.h" +#include "MArray.h" +#include "Array2.h" #include "MDiagArray2.h" #include "MatrixType.h" @@ -34,7 +35,7 @@ class OCTAVE_API -Matrix : public MArray2 +Matrix : public MArray { public: @@ -43,26 +44,26 @@ typedef void (*solve_singularity_handler) (double rcon); - Matrix (void) : MArray2 () { } + Matrix (void) : MArray () { } - Matrix (octave_idx_type r, octave_idx_type c) : MArray2 (r, c) { } + Matrix (octave_idx_type r, octave_idx_type c) : MArray (r, c) { } - Matrix (octave_idx_type r, octave_idx_type c, double val) : MArray2 (r, c, val) { } + Matrix (octave_idx_type r, octave_idx_type c, double val) : MArray (r, c, val) { } - Matrix (const dim_vector& dv) : MArray2 (dv) { } + Matrix (const dim_vector& dv) : MArray (dv.redim (2)) { } - Matrix (const dim_vector& dv, double val) : MArray2 (dv, val) { } + Matrix (const dim_vector& dv, double val) : MArray (dv.redim (2), val) { } - Matrix (const Matrix& a) : MArray2 (a) { } + Matrix (const Matrix& a) : MArray (a) { } template - Matrix (const MArray2& a) : MArray2 (a) { } + Matrix (const MArray& a) : MArray (a.as_matrix ()) { } template - Matrix (const Array2& a) : MArray2 (a) { } + Matrix (const Array2& a) : MArray (a) { } template - Matrix (const Array& a) : MArray2 (a) { } + Matrix (const Array& a) : MArray (a.as_matrix ()) { } explicit Matrix (const RowVector& rv); @@ -78,7 +79,7 @@ Matrix& operator = (const Matrix& a) { - MArray2::operator = (a); + MArray::operator = (a); return *this; } @@ -112,7 +113,7 @@ friend class ComplexMatrix; - Matrix transpose (void) const { return MArray2::transpose (); } + Matrix transpose (void) const { return MArray::transpose (); } // resize is the destructive equivalent for this one @@ -331,7 +332,7 @@ private: - Matrix (double *d, octave_idx_type r, octave_idx_type c) : MArray2 (d, r, c) { } + Matrix (double *d, octave_idx_type r, octave_idx_type c) : MArray (d, r, c) { } }; // Publish externally used friend functions. @@ -376,7 +377,7 @@ MM_CMP_OP_DECLS (Matrix, Matrix, OCTAVE_API) MM_BOOL_OP_DECLS (Matrix, Matrix, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArray2, Matrix, double) +MARRAY_FORWARD_DEFS (MArray, Matrix, double) template void read_int (std::istream& is, bool swap_bytes, T& val); diff --git a/liboctave/dNDArray.cc b/liboctave/dNDArray.cc --- a/liboctave/dNDArray.cc +++ b/liboctave/dNDArray.cc @@ -88,7 +88,7 @@ } NDArray::NDArray (const charNDArray& a) - : MArrayN (a.dims ()) + : MArray (a.dims ()) { octave_idx_type n = a.numel (); for (octave_idx_type i = 0; i < n; i++) @@ -940,7 +940,7 @@ NDArray NDArray::diag (octave_idx_type k) const { - return MArrayN::diag (k); + return MArray::diag (k); } // This contains no information on the array structure !!! diff --git a/liboctave/dNDArray.h b/liboctave/dNDArray.h --- a/liboctave/dNDArray.h +++ b/liboctave/dNDArray.h @@ -24,7 +24,7 @@ #if !defined (octave_NDArray_h) #define octave_NDArray_h 1 -#include "MArrayN.h" +#include "MArray.h" #include "dMatrix.h" #include "intNDArray.h" @@ -34,40 +34,40 @@ class OCTAVE_API -NDArray : public MArrayN +NDArray : public MArray { public: typedef Matrix matrix_type; - NDArray (void) : MArrayN () { } + NDArray (void) : MArray () { } - NDArray (const dim_vector& dv) : MArrayN (dv) { } + NDArray (const dim_vector& dv) : MArray (dv) { } NDArray (const dim_vector& dv, double val) - : MArrayN (dv, val) { } + : MArray (dv, val) { } - NDArray (const NDArray& a) : MArrayN (a) { } + NDArray (const NDArray& a) : MArray (a) { } - NDArray (const Matrix& a) : MArrayN (a) { } + NDArray (const Matrix& a) : MArray (a) { } NDArray (const Array& a, bool zero_based = false, bool negative_to_nan = false); template - NDArray (const MArrayN& a) : MArrayN (a) { } + NDArray (const MArray& a) : MArray (a) { } template - NDArray (const Array& a) : MArrayN (a) { } + NDArray (const Array& a) : MArray (a) { } template - explicit NDArray (const intNDArray& a) : MArrayN (a) { } + explicit NDArray (const intNDArray& a) : MArray (a) { } NDArray (const charNDArray&); NDArray& operator = (const NDArray& a) { - MArrayN::operator = (a); + MArray::operator = (a); return *this; } @@ -136,7 +136,7 @@ Matrix matrix_value (void) const; - NDArray squeeze (void) const { return MArrayN::squeeze (); } + NDArray squeeze (void) const { return MArray::squeeze (); } static void increment_index (Array& ra_idx, const dim_vector& dimensions, @@ -156,13 +156,13 @@ NDArray& changesign (void) { - MArrayN::changesign (); + MArray::changesign (); return *this; } private: - NDArray (double *d, const dim_vector& dv) : MArrayN (d, dv) { } + NDArray (double *d, const dim_vector& dv) : MArray (d, dv) { } }; // Publish externally used friend functions. @@ -181,7 +181,7 @@ NDND_CMP_OP_DECLS (NDArray, NDArray, OCTAVE_API) NDND_BOOL_OP_DECLS (NDArray, NDArray, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArrayN, NDArray, double) +MARRAY_FORWARD_DEFS (MArray, NDArray, double) BSXFUN_STDOP_DECLS (NDArray, OCTAVE_API) BSXFUN_STDREL_DECLS (NDArray, OCTAVE_API) diff --git a/liboctave/dRowVector.h b/liboctave/dRowVector.h --- a/liboctave/dRowVector.h +++ b/liboctave/dRowVector.h @@ -34,17 +34,18 @@ { public: - RowVector (void) : MArray () { } + RowVector (void) : MArray (1, 0) { } - explicit RowVector (octave_idx_type n) : MArray (n) { } + explicit RowVector (octave_idx_type n) : MArray (1, n) { } - explicit RowVector (const dim_vector& dv) : MArray (dv) { } + explicit RowVector (const dim_vector& dv) : MArray (dv.as_row ()) { } - RowVector (octave_idx_type n, double val) : MArray (n, val) { } + RowVector (octave_idx_type n, double val) : MArray (1, n, val) { } RowVector (const RowVector& a) : MArray (a) { } - RowVector (const MArray& a) : MArray (a) { } + RowVector (const MArray& a) : MArray (a.as_row ()) { } + RowVector (const Array& a) : MArray (a.as_row ()) { } RowVector& operator = (const RowVector& a) { @@ -89,9 +90,15 @@ friend OCTAVE_API std::ostream& operator << (std::ostream& os, const RowVector& a); friend OCTAVE_API std::istream& operator >> (std::istream& is, RowVector& a); + void resize (octave_idx_type n, const double& rfv = Array::resize_fill_value ()) + { Array::resize (1, n, rfv); } + + void clear (octave_idx_type n) + { Array::clear (1, n); } + private: - RowVector (double *d, octave_idx_type l) : MArray (d, l) { } + RowVector (double *d, octave_idx_type l) : MArray (d, 1, l) { } }; // row vector by column vector -> scalar diff --git a/liboctave/dSparse.cc b/liboctave/dSparse.cc --- a/liboctave/dSparse.cc +++ b/liboctave/dSparse.cc @@ -349,7 +349,7 @@ } else { - idx_arg.resize_fill (nr, 1, 0); + idx_arg.resize (nr, 1, 0); for (octave_idx_type i = cidx(0); i < cidx(1); i++) idx_arg.elem(ridx(i)) = -1; @@ -498,7 +498,7 @@ } else { - idx_arg.resize_fill (nr, 1, 0); + idx_arg.resize (nr, 1, 0); for (octave_idx_type i = cidx(0); i < cidx(1); i++) idx_arg.elem(ridx(i)) = -1; @@ -4019,7 +4019,7 @@ OCTAVE_LOCAL_BUFFER (double, DU, nr - 1); OCTAVE_LOCAL_BUFFER (double, D, nr); OCTAVE_LOCAL_BUFFER (double, DL, nr - 1); - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); if (mattype.is_dense ()) @@ -4318,7 +4318,7 @@ OCTAVE_LOCAL_BUFFER (double, DU, nr - 1); OCTAVE_LOCAL_BUFFER (double, D, nr); OCTAVE_LOCAL_BUFFER (double, DL, nr - 1); - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); if (mattype.is_dense ()) @@ -4533,9 +4533,9 @@ { if (calc_cond) { - Array z (3 * nr); + Array z (3 * nr, 1); double *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dpbcon, DPBCON, @@ -4627,7 +4627,7 @@ } } - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); F77_XFCN (dgbtrf, DGBTRF, (nr, nr, n_lower, n_upper, tmp_data, @@ -4655,9 +4655,9 @@ if (calc_cond) { char job = '1'; - Array z (3 * nr); + Array z (3 * nr, 1); double *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dgbcon, DGBCON, @@ -4781,9 +4781,9 @@ { if (calc_cond) { - Array z (3 * nr); + Array z (3 * nr, 1); double *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dpbcon, DPBCON, @@ -4910,7 +4910,7 @@ } } - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); F77_XFCN (dgbtrf, DGBTRF, (nr, nr, n_lower, n_upper, tmp_data, @@ -4936,9 +4936,9 @@ if (calc_cond) { char job = '1'; - Array z (3 * nr); + Array z (3 * nr, 1); double *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dgbcon, DGBCON, @@ -5101,9 +5101,9 @@ { if (calc_cond) { - Array z (3 * nr); + Array z (3 * nr, 1); double *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dpbcon, DPBCON, @@ -5226,7 +5226,7 @@ } } - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); F77_XFCN (dgbtrf, DGBTRF, (nr, nr, n_lower, n_upper, tmp_data, @@ -5252,9 +5252,9 @@ if (calc_cond) { char job = '1'; - Array z (3 * nr); + Array z (3 * nr, 1); double *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dpbcon, DPBCON, @@ -5401,9 +5401,9 @@ { if (calc_cond) { - Array z (3 * nr); + Array z (3 * nr, 1); double *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dpbcon, DPBCON, @@ -5556,7 +5556,7 @@ } } - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); F77_XFCN (dgbtrf, DGBTRF, (nr, nr, n_lower, n_upper, tmp_data, @@ -5582,9 +5582,9 @@ if (calc_cond) { char job = '1'; - Array z (3 * nr); + Array z (3 * nr, 1); double *pz = z.fortran_vec (); - Array iz (nr); + Array iz (nr, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dgbcon, DGBCON, diff --git a/liboctave/dbleCHOL.cc b/liboctave/dbleCHOL.cc --- a/liboctave/dbleCHOL.cc +++ b/liboctave/dbleCHOL.cc @@ -123,9 +123,9 @@ octave_idx_type dpocon_info = 0; // Now calculate the condition number for non-singular matrix. - Array z (3*n); + Array z (3*n, 1); double *pz = z.fortran_vec (); - Array iz (n); + Array iz (n, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (dpocon, DPOCON, (F77_CONST_CHAR_ARG2 ("U", 1), n, h, n, anorm, xrcond, pz, piz, dpocon_info @@ -416,7 +416,7 @@ else { Matrix a = chol_mat.transpose () * chol_mat; - Array p (n); + Array p (n, 1); for (octave_idx_type k = 0; k < n; k++) p(k) = k; if (i < j) { diff --git a/liboctave/dbleHESS.cc b/liboctave/dbleHESS.cc --- a/liboctave/dbleHESS.cc +++ b/liboctave/dbleHESS.cc @@ -80,17 +80,17 @@ hess_mat = a; double *h = hess_mat.fortran_vec (); - Array scale (n); + Array scale (n, 1); double *pscale = scale.fortran_vec (); F77_XFCN (dgebal, DGEBAL, (F77_CONST_CHAR_ARG2 (&job, 1), n, h, n, ilo, ihi, pscale, info F77_CHAR_ARG_LEN (1))); - Array tau (n-1); + Array tau (n-1, 1); double *ptau = tau.fortran_vec (); - Array work (lwork); + Array work (lwork, 1); double *pwork = work.fortran_vec (); F77_XFCN (dgehrd, DGEHRD, (n, ilo, ihi, h, n, ptau, pwork, diff --git a/liboctave/dbleLU.cc b/liboctave/dbleLU.cc --- a/liboctave/dbleLU.cc +++ b/liboctave/dbleLU.cc @@ -69,7 +69,7 @@ octave_idx_type a_nc = a.cols (); octave_idx_type mn = (a_nr < a_nc ? a_nr : a_nc); - ipvt.resize (mn); + ipvt.resize (mn, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); a_fact = a; diff --git a/liboctave/dbleQRP.cc b/liboctave/dbleQRP.cc --- a/liboctave/dbleQRP.cc +++ b/liboctave/dbleQRP.cc @@ -65,7 +65,7 @@ if (m > n && qr_type == qr_type_std) afact.resize (m, m); - MArray jpvt (n, 0); + MArray jpvt (n, 1, 0); if (m > 0) { diff --git a/liboctave/dbleSCHUR.cc b/liboctave/dbleSCHUR.cc --- a/liboctave/dbleSCHUR.cc +++ b/liboctave/dbleSCHUR.cc @@ -111,20 +111,20 @@ double *s = schur_mat.fortran_vec (); double *q = unitary_mat.fortran_vec (); - Array wr (n); + Array wr (n, 1); double *pwr = wr.fortran_vec (); - Array wi (n); + Array wi (n, 1); double *pwi = wi.fortran_vec (); - Array work (lwork); + Array work (lwork, 1); double *pwork = work.fortran_vec (); // BWORK is not referenced for the non-ordered Schur routine. - Array bwork ((ord_char == 'N' || ord_char == 'n') ? 0 : n); + Array bwork ((ord_char == 'N' || ord_char == 'n') ? 0 : n, 1); octave_idx_type *pbwork = bwork.fortran_vec (); - Array iwork (liwork); + Array iwork (liwork, 1); octave_idx_type *piwork = iwork.fortran_vec (); F77_XFCN (dgeesx, DGEESX, (F77_CONST_CHAR_ARG2 (&jobvs, 1), diff --git a/liboctave/dbleSVD.cc b/liboctave/dbleSVD.cc --- a/liboctave/dbleSVD.cc +++ b/liboctave/dbleSVD.cc @@ -135,7 +135,7 @@ octave_idx_type lwork = -1; - Array work (1); + Array work (1, 1); octave_idx_type one = 1; octave_idx_type m1 = std::max (m, one), nrow_vt1 = std::max (nrow_vt, one); @@ -148,7 +148,7 @@ F77_CHAR_ARG_LEN (1))); lwork = static_cast (work(0)); - work.resize (lwork); + work.resize (lwork, 1); F77_XFCN (dgesvd, DGESVD, (F77_CONST_CHAR_ARG2 (&jobu, 1), F77_CONST_CHAR_ARG2 (&jobv, 1), diff --git a/liboctave/dim-vector.h b/liboctave/dim-vector.h --- a/liboctave/dim-vector.h +++ b/liboctave/dim-vector.h @@ -133,7 +133,7 @@ public: - explicit dim_vector (octave_idx_type n) + explicit dim_vector (octave_idx_type n) GCC_ATTR_DEPRECATED : rep (newrep (2)) { rep[0] = n; @@ -555,6 +555,22 @@ } } + dim_vector as_column (void) const + { + if (length () == 2 && elem (1) == 1) + return *this; + else + return dim_vector (numel (), 1); + } + + dim_vector as_row (void) const + { + if (length () == 2 && elem (0) == 1) + return *this; + else + return dim_vector (1, numel ()); + } + bool is_vector (void) const { return (length () == 2 && (elem (0) == 1 || elem (1) == 1)); diff --git a/liboctave/eigs-base.cc b/liboctave/eigs-base.cc --- a/liboctave/eigs-base.cc +++ b/liboctave/eigs-base.cc @@ -828,7 +828,7 @@ } else { - Array checked(n,false); + Array checked(n, 1, false); for (octave_idx_type i = 0; i < n; i++) { octave_idx_type bidx = @@ -886,7 +886,7 @@ } } - Array ip (11); + Array ip (11, 1); octave_idx_type *iparam = ip.fortran_vec (); ip(0) = 1; //ishift @@ -902,7 +902,7 @@ ip(10) = 0; // ip(7) to ip(10) return values - Array iptr (14); + Array iptr (14, 1); octave_idx_type *ipntr = iptr.fortran_vec (); octave_idx_type ido = 0; @@ -989,7 +989,7 @@ // long as the HOWMNY arg is not "S", the logical array // is just workspace for ARPACK, so use int type to // avoid problems. - Array s (p); + Array s (p, 1); octave_idx_type *sel = s.fortran_vec (); eig_vec.resize (n, k); @@ -1151,7 +1151,7 @@ } else { - Array checked(n,false); + Array checked (n, 1, false); for (octave_idx_type i = 0; i < n; i++) { octave_idx_type bidx = @@ -1171,7 +1171,7 @@ if (have_b) bmat = 'G'; - Array ip (11); + Array ip (11, 1); octave_idx_type *iparam = ip.fortran_vec (); ip(0) = 1; //ishift @@ -1187,7 +1187,7 @@ ip(10) = 0; // ip(7) to ip(10) return values - Array iptr (14); + Array iptr (14, 1); octave_idx_type *ipntr = iptr.fortran_vec (); octave_idx_type ido = 0; @@ -1326,7 +1326,7 @@ // long as the HOWMNY arg is not "S", the logical array // is just workspace for ARPACK, so use int type to // avoid problems. - Array s (p); + Array s (p, 1); octave_idx_type *sel = s.fortran_vec (); eig_vec.resize (n, k); @@ -1480,7 +1480,7 @@ mode = 3; } - Array ip (11); + Array ip (11, 1); octave_idx_type *iparam = ip.fortran_vec (); ip(0) = 1; //ishift @@ -1496,7 +1496,7 @@ ip(10) = 0; // ip(7) to ip(10) return values - Array iptr (14); + Array iptr (14, 1); octave_idx_type *ipntr = iptr.fortran_vec (); octave_idx_type ido = 0; @@ -1584,7 +1584,7 @@ // long as the HOWMNY arg is not "S", the logical array // is just workspace for ARPACK, so use int type to // avoid problems. - Array s (p); + Array s (p, 1); octave_idx_type *sel = s.fortran_vec (); eig_vec.resize (n, k); @@ -1742,7 +1742,7 @@ } else { - Array checked(n,false); + Array checked (n, 1, false); for (octave_idx_type i = 0; i < n; i++) { octave_idx_type bidx = @@ -1800,7 +1800,7 @@ } } - Array ip (11); + Array ip (11, 1); octave_idx_type *iparam = ip.fortran_vec (); ip(0) = 1; //ishift @@ -1816,7 +1816,7 @@ ip(10) = 0; // ip(7) to ip(10) return values - Array iptr (14); + Array iptr (14, 1); octave_idx_type *ipntr = iptr.fortran_vec (); octave_idx_type ido = 0; @@ -1903,7 +1903,7 @@ // long as the HOWMNY arg is not "S", the logical array // is just workspace for ARPACK, so use int type to // avoid problems. - Array s (p); + Array s (p, 1); octave_idx_type *sel = s.fortran_vec (); Matrix eig_vec2 (n, k + 1); @@ -2107,7 +2107,7 @@ } else { - Array checked(n,false); + Array checked (n, 1, false); for (octave_idx_type i = 0; i < n; i++) { octave_idx_type bidx = @@ -2127,7 +2127,7 @@ if (have_b) bmat = 'G'; - Array ip (11); + Array ip (11, 1); octave_idx_type *iparam = ip.fortran_vec (); ip(0) = 1; //ishift @@ -2143,7 +2143,7 @@ ip(10) = 0; // ip(7) to ip(10) return values - Array iptr (14); + Array iptr (14, 1); octave_idx_type *ipntr = iptr.fortran_vec (); octave_idx_type ido = 0; @@ -2282,7 +2282,7 @@ // long as the HOWMNY arg is not "S", the logical array // is just workspace for ARPACK, so use int type to // avoid problems. - Array s (p); + Array s (p, 1); octave_idx_type *sel = s.fortran_vec (); Matrix eig_vec2 (n, k + 1); @@ -2484,7 +2484,7 @@ mode = 3; } - Array ip (11); + Array ip (11, 1); octave_idx_type *iparam = ip.fortran_vec (); ip(0) = 1; //ishift @@ -2500,7 +2500,7 @@ ip(10) = 0; // ip(7) to ip(10) return values - Array iptr (14); + Array iptr (14, 1); octave_idx_type *ipntr = iptr.fortran_vec (); octave_idx_type ido = 0; @@ -2587,7 +2587,7 @@ // long as the HOWMNY arg is not "S", the logical array // is just workspace for ARPACK, so use int type to // avoid problems. - Array s (p); + Array s (p, 1); octave_idx_type *sel = s.fortran_vec (); Matrix eig_vec2 (n, k + 1); @@ -2789,7 +2789,7 @@ } else { - Array checked(n,false); + Array checked (n, 1, false); for (octave_idx_type i = 0; i < n; i++) { octave_idx_type bidx = @@ -2847,7 +2847,7 @@ } } - Array ip (11); + Array ip (11, 1); octave_idx_type *iparam = ip.fortran_vec (); ip(0) = 1; //ishift @@ -2863,7 +2863,7 @@ ip(10) = 0; // ip(7) to ip(10) return values - Array iptr (14); + Array iptr (14, 1); octave_idx_type *ipntr = iptr.fortran_vec (); octave_idx_type ido = 0; @@ -2950,7 +2950,7 @@ // long as the HOWMNY arg is not "S", the logical array // is just workspace for ARPACK, so use int type to // avoid problems. - Array s (p); + Array s (p, 1); octave_idx_type *sel = s.fortran_vec (); eig_vec.resize (n, k); @@ -3113,7 +3113,7 @@ } else { - Array checked(n,false); + Array checked (n, 1, false); for (octave_idx_type i = 0; i < n; i++) { octave_idx_type bidx = @@ -3133,7 +3133,7 @@ if (have_b) bmat = 'G'; - Array ip (11); + Array ip (11, 1); octave_idx_type *iparam = ip.fortran_vec (); ip(0) = 1; //ishift @@ -3149,7 +3149,7 @@ ip(10) = 0; // ip(7) to ip(10) return values - Array iptr (14); + Array iptr (14, 1); octave_idx_type *ipntr = iptr.fortran_vec (); octave_idx_type ido = 0; @@ -3290,7 +3290,7 @@ // long as the HOWMNY arg is not "S", the logical array // is just workspace for ARPACK, so use int type to // avoid problems. - Array s (p); + Array s (p, 1); octave_idx_type *sel = s.fortran_vec (); eig_vec.resize (n, k); @@ -3450,7 +3450,7 @@ mode = 3; } - Array ip (11); + Array ip (11, 1); octave_idx_type *iparam = ip.fortran_vec (); ip(0) = 1; //ishift @@ -3466,7 +3466,7 @@ ip(10) = 0; // ip(7) to ip(10) return values - Array iptr (14); + Array iptr (14, 1); octave_idx_type *ipntr = iptr.fortran_vec (); octave_idx_type ido = 0; diff --git a/liboctave/fCColVector.cc b/liboctave/fCColVector.cc --- a/liboctave/fCColVector.cc +++ b/liboctave/fCColVector.cc @@ -51,10 +51,8 @@ // FloatComplex Column Vector class FloatComplexColumnVector::FloatComplexColumnVector (const FloatColumnVector& a) - : MArray (a.length ()) + : MArray (a) { - for (octave_idx_type i = 0; i < length (); i++) - elem (i) = a.elem (i); } bool diff --git a/liboctave/fCColVector.h b/liboctave/fCColVector.h --- a/liboctave/fCColVector.h +++ b/liboctave/fCColVector.h @@ -37,18 +37,20 @@ public: - FloatComplexColumnVector (void) : MArray () { } + FloatComplexColumnVector (void) : MArray (0, 1) { } - explicit FloatComplexColumnVector (octave_idx_type n) : MArray (n) { } + explicit FloatComplexColumnVector (octave_idx_type n) : MArray (n, 1) { } - explicit FloatComplexColumnVector (const dim_vector& dv) : MArray (dv) { } + explicit FloatComplexColumnVector (const dim_vector& dv) + : MArray (dv.as_column ()) { } FloatComplexColumnVector (octave_idx_type n, const FloatComplex& val) - : MArray (n, val) { } + : MArray (n, 1, val) { } FloatComplexColumnVector (const FloatComplexColumnVector& a) : MArray (a) { } - FloatComplexColumnVector (const MArray& a) : MArray (a) { } + FloatComplexColumnVector (const MArray& a) : MArray (a.as_column ()) { } + FloatComplexColumnVector (const Array& a) : MArray (a.as_column ()) { } explicit FloatComplexColumnVector (const FloatColumnVector& a); @@ -124,9 +126,15 @@ friend OCTAVE_API std::ostream& operator << (std::ostream& os, const FloatComplexColumnVector& a); friend OCTAVE_API std::istream& operator >> (std::istream& is, FloatComplexColumnVector& a); + void resize (octave_idx_type n, const FloatComplex& rfv = Array::resize_fill_value ()) + { Array::resize (n, 1, rfv); } + + void clear (octave_idx_type n) + { Array::clear (n, 1); } + private: - FloatComplexColumnVector (FloatComplex *d, octave_idx_type l) : MArray (d, l) { } + FloatComplexColumnVector (FloatComplex *d, octave_idx_type l) : MArray (d, l, 1) { } }; MARRAY_FORWARD_DEFS (MArray, FloatComplexColumnVector, FloatComplex) diff --git a/liboctave/fCMatrix.cc b/liboctave/fCMatrix.cc --- a/liboctave/fCMatrix.cc +++ b/liboctave/fCMatrix.cc @@ -232,46 +232,39 @@ // FloatComplex Matrix class FloatComplexMatrix::FloatComplexMatrix (const FloatMatrix& a) - : MArray2 (a.rows (), a.cols ()) + : MArray (a) { - for (octave_idx_type j = 0; j < cols (); j++) - for (octave_idx_type i = 0; i < rows (); i++) - elem (i, j) = a.elem (i, j); } FloatComplexMatrix::FloatComplexMatrix (const FloatRowVector& rv) - : MArray2 (1, rv.length (), 0.0) + : MArray (rv) { - for (octave_idx_type i = 0; i < rv.length (); i++) - elem (0, i) = rv.elem (i); } FloatComplexMatrix::FloatComplexMatrix (const FloatColumnVector& cv) - : MArray2 (cv.length (), 1, 0.0) + : MArray (cv) { - for (octave_idx_type i = 0; i < cv.length (); i++) - elem (i, 0) = cv.elem (i); } FloatComplexMatrix::FloatComplexMatrix (const FloatDiagMatrix& a) - : MArray2 (a.rows (), a.cols (), 0.0) + : MArray (a.rows (), a.cols (), 0.0) { for (octave_idx_type i = 0; i < a.length (); i++) elem (i, i) = a.elem (i, i); } FloatComplexMatrix::FloatComplexMatrix (const FloatComplexRowVector& rv) - : MArray2 (Array2 (rv, 1, rv.length ())) + : MArray (rv) { } FloatComplexMatrix::FloatComplexMatrix (const FloatComplexColumnVector& cv) - : MArray2 (Array2 (cv, cv.length (), 1)) + : MArray (cv) { } FloatComplexMatrix::FloatComplexMatrix (const FloatComplexDiagMatrix& a) - : MArray2 (a.rows (), a.cols (), 0.0) + : MArray (a.rows (), a.cols (), 0.0) { for (octave_idx_type i = 0; i < a.length (); i++) elem (i, i) = a.elem (i, i); @@ -281,15 +274,12 @@ // here? FloatComplexMatrix::FloatComplexMatrix (const boolMatrix& a) - : MArray2 (a.rows (), a.cols (), 0.0) + : MArray (a) { - for (octave_idx_type i = 0; i < a.rows (); i++) - for (octave_idx_type j = 0; j < a.cols (); j++) - elem (i, j) = a.elem (i, j); } FloatComplexMatrix::FloatComplexMatrix (const charMatrix& a) - : MArray2 (a.rows (), a.cols (), 0.0) + : MArray (a.rows (), a.cols (), 0.0) { for (octave_idx_type i = 0; i < a.rows (); i++) for (octave_idx_type j = 0; j < a.cols (); j++) @@ -297,7 +287,7 @@ } FloatComplexMatrix::FloatComplexMatrix (const FloatMatrix& re, const FloatMatrix& im) - : MArray2 (re.rows (), re.cols ()) + : MArray (re.rows (), re.cols ()) { if (im.rows () != rows () || im.cols () != cols ()) (*current_liboctave_error_handler) ("complex: internal error"); @@ -441,7 +431,7 @@ FloatComplexMatrix& FloatComplexMatrix::insert (const FloatComplexMatrix& a, octave_idx_type r, octave_idx_type c) { - Array2::insert (a, r, c); + Array::insert (a, r, c); return *this; } @@ -942,13 +932,13 @@ FloatComplexRowVector FloatComplexMatrix::row (octave_idx_type i) const { - return MArray (index (idx_vector (i), idx_vector::colon)); + return index (idx_vector (i), idx_vector::colon); } FloatComplexColumnVector FloatComplexMatrix::column (octave_idx_type i) const { - return MArray (index (idx_vector::colon, idx_vector (i))); + return index (idx_vector::colon, idx_vector (i)); } FloatComplexMatrix @@ -1061,13 +1051,13 @@ (*current_liboctave_error_handler) ("inverse requires square matrix"); else { - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); retval = *this; FloatComplex *tmp_data = retval.fortran_vec (); - Array z(1); + Array z(1, 1); octave_idx_type lwork = -1; // Query the optimum work array size. @@ -1077,7 +1067,7 @@ lwork = static_cast (std::real(z(0))); lwork = (lwork < 2 *nc ? 2*nc : lwork); - z.resize (lwork); + z.resize (lwork, 1); FloatComplex *pz = z.fortran_vec (); info = 0; @@ -1098,7 +1088,7 @@ // Now calculate the condition number for non-singular matrix. octave_idx_type zgecon_info = 0; char job = '1'; - Array rz (2 * nc); + Array rz (2 * nc, 1); float *prz = rz.fortran_vec (); F77_XFCN (cgecon, CGECON, (F77_CONST_CHAR_ARG2 (&job, 1), nc, tmp_data, nr, anorm, @@ -1334,7 +1324,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); FloatComplex *pwsave = wsave.fortran_vec (); retval = *this; @@ -1375,7 +1365,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); FloatComplex *pwsave = wsave.fortran_vec (); retval = *this; @@ -1419,7 +1409,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); FloatComplex *pwsave = wsave.fortran_vec (); retval = *this; @@ -1438,10 +1428,10 @@ nsamples = nr; nn = 4*npts+15; - wsave.resize (nn); + wsave.resize (nn, 1); pwsave = wsave.fortran_vec (); - Array tmp (npts); + Array tmp (npts, 1); FloatComplex *prow = tmp.fortran_vec (); F77_FUNC (cffti, CFFTI) (npts, pwsave); @@ -1485,7 +1475,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); FloatComplex *pwsave = wsave.fortran_vec (); retval = *this; @@ -1507,10 +1497,10 @@ nsamples = nr; nn = 4*npts+15; - wsave.resize (nn); + wsave.resize (nn, 1); pwsave = wsave.fortran_vec (); - Array tmp (npts); + Array tmp (npts, 1); FloatComplex *prow = tmp.fortran_vec (); F77_FUNC (cffti, CFFTI) (npts, pwsave); @@ -1607,9 +1597,9 @@ } else { - Array z (2 * nc); + Array z (2 * nc, 1); FloatComplex *pz = z.fortran_vec (); - Array rz (nc); + Array rz (nc, 1); float *prz = rz.fortran_vec (); F77_XFCN (cpocon, CPOCON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -1631,7 +1621,7 @@ if (typ == MatrixType::Full) { - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); FloatComplexMatrix atmp = *this; @@ -1658,9 +1648,9 @@ { // Now calc the condition number for non-singular matrix. char job = '1'; - Array z (2 * nc); + Array z (2 * nc, 1); FloatComplex *pz = z.fortran_vec (); - Array rz (2 * nc); + Array rz (2 * nc, 1); float *prz = rz.fortran_vec (); F77_XFCN (cgecon, CGECON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -1723,9 +1713,9 @@ char uplo = 'U'; char dia = 'N'; - Array z (2 * nc); + Array z (2 * nc, 1); FloatComplex *pz = z.fortran_vec (); - Array rz (nc); + Array rz (nc, 1); float *prz = rz.fortran_vec (); F77_XFCN (ctrcon, CTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -1751,9 +1741,9 @@ char uplo = 'L'; char dia = 'N'; - Array z (2 * nc); + Array z (2 * nc, 1); FloatComplex *pz = z.fortran_vec (); - Array rz (nc); + Array rz (nc, 1); float *prz = rz.fortran_vec (); F77_XFCN (ctrcon, CTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -1797,9 +1787,9 @@ } else { - Array z (2 * nc); + Array z (2 * nc, 1); FloatComplex *pz = z.fortran_vec (); - Array rz (nc); + Array rz (nc, 1); float *prz = rz.fortran_vec (); F77_XFCN (cpocon, CPOCON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -1817,16 +1807,16 @@ { octave_idx_type info = 0; - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); if(anorm < 0.) anorm = atmp.abs().sum(). row(static_cast(0)).max(); - Array z (2 * nc); + Array z (2 * nc, 1); FloatComplex *pz = z.fortran_vec (); - Array rz (2 * nc); + Array rz (2 * nc, 1); float *prz = rz.fortran_vec (); F77_XFCN (cgetrf, CGETRF, (nr, nr, tmp_data, nr, pipvt, info)); @@ -1898,9 +1888,9 @@ char uplo = 'U'; char dia = 'N'; - Array z (2 * nc); + Array z (2 * nc, 1); FloatComplex *pz = z.fortran_vec (); - Array rz (nc); + Array rz (nc, 1); float *prz = rz.fortran_vec (); F77_XFCN (ctrcon, CTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -1999,9 +1989,9 @@ char uplo = 'L'; char dia = 'N'; - Array z (2 * nc); + Array z (2 * nc, 1); FloatComplex *pz = z.fortran_vec (); - Array rz (nc); + Array rz (nc, 1); float *prz = rz.fortran_vec (); F77_XFCN (ctrcon, CTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -2107,9 +2097,9 @@ { if (calc_cond) { - Array z (2 * nc); + Array z (2 * nc, 1); FloatComplex *pz = z.fortran_vec (); - Array rz (nc); + Array rz (nc, 1); float *prz = rz.fortran_vec (); F77_XFCN (cpocon, CPOCON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -2159,15 +2149,15 @@ { info = 0; - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); FloatComplexMatrix atmp = *this; FloatComplex *tmp_data = atmp.fortran_vec (); - Array z (2 * nc); + Array z (2 * nc, 1); FloatComplex *pz = z.fortran_vec (); - Array rz (2 * nc); + Array rz (2 * nc, 1); float *prz = rz.fortran_vec (); // Calculate the norm of the matrix, for later use. @@ -2613,13 +2603,13 @@ FloatComplex *tmp_data = atmp.fortran_vec (); FloatComplex *pretval = retval.fortran_vec (); - Array s (minmn); + Array s (minmn, 1); float *ps = s.fortran_vec (); // Ask ZGELSD what the dimension of WORK should be. octave_idx_type lwork = -1; - Array work (1); + Array work (1, 1); octave_idx_type smlsiz; F77_FUNC (xilaenv, XILAENV) (9, F77_CONST_CHAR_ARG2 ("CGELSD", 6), @@ -2653,13 +2643,13 @@ + 3*smlsiz*nrhs + (smlsiz+1)*(smlsiz+1); if (lrwork < 1) lrwork = 1; - Array rwork (lrwork); + Array rwork (lrwork, 1); float *prwork = rwork.fortran_vec (); octave_idx_type liwork = 3 * minmn * nlvl + 11 * minmn; if (liwork < 1) liwork = 1; - Array iwork (liwork); + Array iwork (liwork, 1); octave_idx_type* piwork = iwork.fortran_vec (); F77_XFCN (cgelsd, CGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, @@ -2697,7 +2687,7 @@ } lwork = static_cast (std::real (work(0))); - work.resize (lwork); + work.resize (lwork, 1); F77_XFCN (cgelsd, CGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, ps, rcon, rank, @@ -2814,13 +2804,13 @@ FloatComplex *tmp_data = atmp.fortran_vec (); FloatComplex *pretval = retval.fortran_vec (); - Array s (minmn); + Array s (minmn, 1); float *ps = s.fortran_vec (); // Ask ZGELSD what the dimension of WORK should be. octave_idx_type lwork = -1; - Array work (1); + Array work (1, 1); octave_idx_type smlsiz; F77_FUNC (xilaenv, XILAENV) (9, F77_CONST_CHAR_ARG2 ("CGELSD", 6), @@ -2847,13 +2837,13 @@ + 3*smlsiz*nrhs + (smlsiz+1)*(smlsiz+1); if (lrwork < 1) lrwork = 1; - Array rwork (lrwork); + Array rwork (lrwork, 1); float *prwork = rwork.fortran_vec (); octave_idx_type liwork = 3 * minmn * nlvl + 11 * minmn; if (liwork < 1) liwork = 1; - Array iwork (liwork); + Array iwork (liwork, 1); octave_idx_type* piwork = iwork.fortran_vec (); F77_XFCN (cgelsd, CGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, @@ -2861,9 +2851,9 @@ lwork, prwork, piwork, info)); lwork = static_cast (std::real (work(0))); - work.resize (lwork); - rwork.resize (static_cast (rwork(0))); - iwork.resize (iwork(0)); + work.resize (lwork, 1); + rwork.resize (static_cast (rwork(0)), 1); + iwork.resize (iwork(0), 1); F77_XFCN (cgelsd, CGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, ps, rcon, rank, @@ -3252,7 +3242,7 @@ FloatComplexMatrix FloatComplexMatrix::diag (octave_idx_type k) const { - return MArray2::diag (k); + return MArray::diag (k); } bool @@ -3311,7 +3301,7 @@ if (nr > 0 && nc > 0) { result.resize (nr); - idx_arg.resize (nr); + idx_arg.resize (nr, 1); for (octave_idx_type i = 0; i < nr; i++) { @@ -3385,7 +3375,7 @@ if (nr > 0 && nc > 0) { result.resize (nr); - idx_arg.resize (nr); + idx_arg.resize (nr, 1); for (octave_idx_type i = 0; i < nr; i++) { @@ -3459,7 +3449,7 @@ if (nr > 0 && nc > 0) { result.resize (nc); - idx_arg.resize (nc); + idx_arg.resize (1, nc); for (octave_idx_type j = 0; j < nc; j++) { @@ -3533,7 +3523,7 @@ if (nr > 0 && nc > 0) { result.resize (nc); - idx_arg.resize (nc); + idx_arg.resize (1, nc); for (octave_idx_type j = 0; j < nc; j++) { diff --git a/liboctave/fCMatrix.h b/liboctave/fCMatrix.h --- a/liboctave/fCMatrix.h +++ b/liboctave/fCMatrix.h @@ -24,7 +24,7 @@ #if !defined (octave_FloatComplexMatrix_h) #define octave_FloatComplexMatrix_h 1 -#include "MArray2.h" +#include "MArray.h" #include "MDiagArray2.h" #include "MatrixType.h" @@ -35,7 +35,7 @@ class OCTAVE_API -FloatComplexMatrix : public MArray2 +FloatComplexMatrix : public MArray { public: @@ -44,28 +44,28 @@ typedef void (*solve_singularity_handler) (float rcon); - FloatComplexMatrix (void) : MArray2 () { } + FloatComplexMatrix (void) : MArray () { } - FloatComplexMatrix (octave_idx_type r, octave_idx_type c) : MArray2 (r, c) { } + FloatComplexMatrix (octave_idx_type r, octave_idx_type c) : MArray (r, c) { } FloatComplexMatrix (octave_idx_type r, octave_idx_type c, const FloatComplex& val) - : MArray2 (r, c, val) { } + : MArray (r, c, val) { } - FloatComplexMatrix (const dim_vector& dv) : MArray2 (dv) { } + FloatComplexMatrix (const dim_vector& dv) : MArray (dv.redim (2)) { } FloatComplexMatrix (const dim_vector& dv, const FloatComplex& val) - : MArray2 (dv, val) { } + : MArray (dv.redim (2), val) { } - FloatComplexMatrix (const FloatComplexMatrix& a) : MArray2 (a) { } + FloatComplexMatrix (const FloatComplexMatrix& a) : MArray (a) { } template - FloatComplexMatrix (const MArray2& a) : MArray2 (a) { } + FloatComplexMatrix (const MArray& a) : MArray (a.as_matrix ()) { } template - FloatComplexMatrix (const Array2& a) : MArray2 (a) { } + FloatComplexMatrix (const Array2& a) : MArray (a) { } template - FloatComplexMatrix (const Array& a) : MArray2 (a) { } + FloatComplexMatrix (const Array& a) : MArray (a.as_matrix ()) { } explicit FloatComplexMatrix (const FloatMatrix& a); @@ -89,7 +89,7 @@ FloatComplexMatrix& operator = (const FloatComplexMatrix& a) { - MArray2::operator = (a); + MArray::operator = (a); return *this; } @@ -136,9 +136,9 @@ FloatComplexMatrix stack (const FloatComplexDiagMatrix& a) const; FloatComplexMatrix hermitian (void) const - { return MArray2::hermitian (std::conj); } + { return MArray::hermitian (std::conj); } FloatComplexMatrix transpose (void) const - { return MArray2::transpose (); } + { return MArray::transpose (); } friend OCTAVE_API FloatComplexMatrix conj (const FloatComplexMatrix& a); @@ -378,7 +378,7 @@ private: - FloatComplexMatrix (FloatComplex *d, octave_idx_type r, octave_idx_type c) : MArray2 (d, r, c) { } + FloatComplexMatrix (FloatComplex *d, octave_idx_type r, octave_idx_type c) : MArray (d, r, c) { } }; extern OCTAVE_API FloatComplexMatrix conj (const FloatComplexMatrix& a); @@ -430,6 +430,6 @@ MM_CMP_OP_DECLS (FloatComplexMatrix, FloatComplexMatrix, OCTAVE_API) MM_BOOL_OP_DECLS (FloatComplexMatrix, FloatComplexMatrix, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArray2, FloatComplexMatrix, FloatComplex) +MARRAY_FORWARD_DEFS (MArray, FloatComplexMatrix, FloatComplex) #endif diff --git a/liboctave/fCNDArray.cc b/liboctave/fCNDArray.cc --- a/liboctave/fCNDArray.cc +++ b/liboctave/fCNDArray.cc @@ -46,7 +46,7 @@ #include "bsxfun-defs.cc" FloatComplexNDArray::FloatComplexNDArray (const charNDArray& a) - : MArrayN (a.dims ()) + : MArray (a.dims ()) { octave_idx_type n = a.numel (); for (octave_idx_type i = 0; i < n; i++) @@ -212,7 +212,7 @@ FloatComplexNDArray retval (dv); octave_idx_type npts = dv(dim); octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); FloatComplex *pwsave = wsave.fortran_vec (); OCTAVE_LOCAL_BUFFER (FloatComplex, tmp, npts); @@ -259,7 +259,7 @@ FloatComplexNDArray retval (dv); octave_idx_type npts = dv(dim); octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); FloatComplex *pwsave = wsave.fortran_vec (); OCTAVE_LOCAL_BUFFER (FloatComplex, tmp, npts); @@ -309,9 +309,9 @@ { octave_idx_type npts = dv2(i); octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); FloatComplex *pwsave = wsave.fortran_vec (); - Array row (npts); + Array row (npts, 1); FloatComplex *prow = row.fortran_vec (); octave_idx_type howmany = numel () / npts; @@ -357,9 +357,9 @@ { octave_idx_type npts = dv2(i); octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); FloatComplex *pwsave = wsave.fortran_vec (); - Array row (npts); + Array row (npts, 1); FloatComplex *prow = row.fortran_vec (); octave_idx_type howmany = numel () / npts; @@ -405,9 +405,9 @@ { octave_idx_type npts = dv(i); octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); FloatComplex *pwsave = wsave.fortran_vec (); - Array row (npts); + Array row (npts, 1); FloatComplex *prow = row.fortran_vec (); octave_idx_type howmany = numel () / npts; @@ -452,9 +452,9 @@ { octave_idx_type npts = dv(i); octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); FloatComplex *pwsave = wsave.fortran_vec (); - Array row (npts); + Array row (npts, 1); FloatComplex *prow = row.fortran_vec (); octave_idx_type howmany = numel () / npts; @@ -781,7 +781,7 @@ if (n == dimensions.length ()) { - Array a_ra_idx (a_dv.length (), 0); + Array a_ra_idx (a_dv.length (), 1, 0); a_ra_idx.elem (0) = r; a_ra_idx.elem (1) = c; @@ -868,7 +868,7 @@ FloatComplexNDArray FloatComplexNDArray::diag (octave_idx_type k) const { - return MArrayN::diag (k); + return MArray::diag (k); } // This contains no information on the array structure !!! diff --git a/liboctave/fCNDArray.h b/liboctave/fCNDArray.h --- a/liboctave/fCNDArray.h +++ b/liboctave/fCNDArray.h @@ -23,7 +23,7 @@ #if !defined (octave_FloatComplexNDArray_h) #define octave_FloatComplexNDArray_h 1 -#include "MArrayN.h" +#include "MArray.h" #include "fCMatrix.h" #include "mx-defs.h" @@ -32,34 +32,34 @@ class OCTAVE_API -FloatComplexNDArray : public MArrayN +FloatComplexNDArray : public MArray { public: typedef FloatComplexMatrix matrix_type; - FloatComplexNDArray (void) : MArrayN () { } + FloatComplexNDArray (void) : MArray () { } - FloatComplexNDArray (const dim_vector& dv) : MArrayN (dv) { } + FloatComplexNDArray (const dim_vector& dv) : MArray (dv) { } FloatComplexNDArray (const dim_vector& dv, const FloatComplex& val) - : MArrayN (dv, val) { } + : MArray (dv, val) { } - FloatComplexNDArray (const FloatComplexNDArray& a) : MArrayN (a) { } + FloatComplexNDArray (const FloatComplexNDArray& a) : MArray (a) { } - FloatComplexNDArray (const FloatComplexMatrix& a) : MArrayN (a) { } + FloatComplexNDArray (const FloatComplexMatrix& a) : MArray (a) { } template - FloatComplexNDArray (const MArrayN& a) : MArrayN (a) { } + FloatComplexNDArray (const MArray& a) : MArray (a) { } template - FloatComplexNDArray (const Array& a) : MArrayN (a) { } + FloatComplexNDArray (const Array& a) : MArray (a) { } FloatComplexNDArray (const charNDArray&); FloatComplexNDArray& operator = (const FloatComplexNDArray& a) { - MArrayN::operator = (a); + MArray::operator = (a); return *this; } @@ -121,7 +121,7 @@ FloatComplexMatrix matrix_value (void) const; - FloatComplexNDArray squeeze (void) const { return MArrayN::squeeze (); } + FloatComplexNDArray squeeze (void) const { return MArray::squeeze (); } static void increment_index (Array& ra_idx, const dim_vector& dimensions, @@ -144,14 +144,14 @@ FloatComplexNDArray& changesign (void) { - MArrayN::changesign (); + MArray::changesign (); return *this; } private: FloatComplexNDArray (FloatComplex *d, const dim_vector& dv) - : MArrayN (d, dv) { } + : MArray (d, dv) { } }; extern OCTAVE_API FloatComplexNDArray conj (const FloatComplexNDArray& a); @@ -167,7 +167,7 @@ NDND_CMP_OP_DECLS (FloatComplexNDArray, FloatComplexNDArray, OCTAVE_API) NDND_BOOL_OP_DECLS (FloatComplexNDArray, FloatComplexNDArray, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArrayN, FloatComplexNDArray, FloatComplex) +MARRAY_FORWARD_DEFS (MArray, FloatComplexNDArray, FloatComplex) extern OCTAVE_API FloatComplexNDArray& operator *= (FloatComplexNDArray& a, float s); extern OCTAVE_API FloatComplexNDArray& operator /= (FloatComplexNDArray& a, float s); diff --git a/liboctave/fCRowVector.cc b/liboctave/fCRowVector.cc --- a/liboctave/fCRowVector.cc +++ b/liboctave/fCRowVector.cc @@ -54,13 +54,6 @@ // FloatComplex Row Vector class -FloatComplexRowVector::FloatComplexRowVector (const FloatRowVector& a) - : MArray (a.length ()) -{ - for (octave_idx_type i = 0; i < length (); i++) - elem (i) = a.elem (i); -} - bool FloatComplexRowVector::operator == (const FloatComplexRowVector& a) const { diff --git a/liboctave/fCRowVector.h b/liboctave/fCRowVector.h --- a/liboctave/fCRowVector.h +++ b/liboctave/fCRowVector.h @@ -25,6 +25,7 @@ #define octave_FloatComplexRowVector_h 1 #include "MArray.h" +#include "fRowVector.h" #include "mx-defs.h" @@ -36,19 +37,21 @@ public: - FloatComplexRowVector (void) : MArray () { } + FloatComplexRowVector (void) : MArray (1, 0) { } - explicit FloatComplexRowVector (octave_idx_type n) : MArray (n) { } + explicit FloatComplexRowVector (octave_idx_type n) : MArray (1, n) { } - explicit FloatComplexRowVector (const dim_vector& dv) : MArray (dv) { } + explicit FloatComplexRowVector (const dim_vector& dv) : MArray (dv.as_row ()) { } - FloatComplexRowVector (octave_idx_type n, const FloatComplex& val) : MArray (n, val) { } + FloatComplexRowVector (octave_idx_type n, const FloatComplex& val) + : MArray (1, n, val) { } FloatComplexRowVector (const FloatComplexRowVector& a) : MArray (a) { } - FloatComplexRowVector (const MArray& a) : MArray (a) { } + FloatComplexRowVector (const MArray& a) : MArray (a.as_row ()) { } + FloatComplexRowVector (const Array& a) : MArray (a.as_row ()) { } - explicit FloatComplexRowVector (const FloatRowVector& a); + explicit FloatComplexRowVector (const FloatRowVector& a) : MArray (a) { } FloatComplexRowVector& operator = (const FloatComplexRowVector& a) { @@ -106,9 +109,15 @@ friend std::ostream& operator << (std::ostream& os, const FloatComplexRowVector& a); friend std::istream& operator >> (std::istream& is, FloatComplexRowVector& a); + void resize (octave_idx_type n, const FloatComplex& rfv = Array::resize_fill_value ()) + { Array::resize (1, n, rfv); } + + void clear (octave_idx_type n) + { Array::clear (1, n); } + private: - FloatComplexRowVector (FloatComplex *d, octave_idx_type l) : MArray (d, l) { } + FloatComplexRowVector (FloatComplex *d, octave_idx_type l) : MArray (d, 1, l) { } }; // row vector by column vector -> scalar diff --git a/liboctave/fCmplxCHOL.cc b/liboctave/fCmplxCHOL.cc --- a/liboctave/fCmplxCHOL.cc +++ b/liboctave/fCmplxCHOL.cc @@ -123,9 +123,9 @@ octave_idx_type cpocon_info = 0; // Now calculate the condition number for non-singular matrix. - Array z (2*n); + Array z (2*n, 1); FloatComplex *pz = z.fortran_vec (); - Array rz (n); + Array rz (n, 1); float *prz = rz.fortran_vec (); F77_XFCN (cpocon, CPOCON, (F77_CONST_CHAR_ARG2 ("U", 1), n, h, n, anorm, xrcond, pz, prz, cpocon_info @@ -415,7 +415,7 @@ else { FloatComplexMatrix a = chol_mat.hermitian () * chol_mat; - Array p (n); + Array p (n, 1); for (octave_idx_type k = 0; k < n; k++) p(k) = k; if (i < j) { diff --git a/liboctave/fCmplxHESS.cc b/liboctave/fCmplxHESS.cc --- a/liboctave/fCmplxHESS.cc +++ b/liboctave/fCmplxHESS.cc @@ -81,17 +81,17 @@ hess_mat = a; FloatComplex *h = hess_mat.fortran_vec (); - Array scale (n); + Array scale (n, 1); float *pscale = scale.fortran_vec (); F77_XFCN (cgebal, CGEBAL, (F77_CONST_CHAR_ARG2 (&job, 1), n, h, n, ilo, ihi, pscale, info F77_CHAR_ARG_LEN (1))); - Array tau (n-1); + Array tau (n-1, 1); FloatComplex *ptau = tau.fortran_vec (); - Array work (lwork); + Array work (lwork, 1); FloatComplex *pwork = work.fortran_vec (); F77_XFCN (cgehrd, CGEHRD, (n, ilo, ihi, h, n, ptau, pwork, lwork, info)); diff --git a/liboctave/fCmplxLU.cc b/liboctave/fCmplxLU.cc --- a/liboctave/fCmplxLU.cc +++ b/liboctave/fCmplxLU.cc @@ -69,7 +69,7 @@ octave_idx_type a_nc = a.cols (); octave_idx_type mn = (a_nr < a_nc ? a_nr : a_nc); - ipvt.resize (mn); + ipvt.resize (mn, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); a_fact = a; diff --git a/liboctave/fCmplxQRP.cc b/liboctave/fCmplxQRP.cc --- a/liboctave/fCmplxQRP.cc +++ b/liboctave/fCmplxQRP.cc @@ -65,7 +65,7 @@ if (m > n && qr_type == qr_type_std) afact.resize (m, m); - MArray jpvt (n, 0); + MArray jpvt (n, 1, 0); if (m > 0) { diff --git a/liboctave/fCmplxSCHUR.cc b/liboctave/fCmplxSCHUR.cc --- a/liboctave/fCmplxSCHUR.cc +++ b/liboctave/fCmplxSCHUR.cc @@ -109,17 +109,17 @@ FloatComplex *s = schur_mat.fortran_vec (); FloatComplex *q = unitary_mat.fortran_vec (); - Array rwork (n); + Array rwork (n, 1); float *prwork = rwork.fortran_vec (); - Array w (n); + Array w (n, 1); FloatComplex *pw = w.fortran_vec (); - Array work (lwork); + Array work (lwork, 1); FloatComplex *pwork = work.fortran_vec (); // BWORK is not referenced for non-ordered Schur. - Array bwork ((ord_char == 'N' || ord_char == 'n') ? 0 : n); + Array bwork ((ord_char == 'N' || ord_char == 'n') ? 0 : n, 1); octave_idx_type *pbwork = bwork.fortran_vec (); F77_XFCN (cgeesx, CGEESX, (F77_CONST_CHAR_ARG2 (&jobvs, 1), diff --git a/liboctave/fCmplxSVD.cc b/liboctave/fCmplxSVD.cc --- a/liboctave/fCmplxSVD.cc +++ b/liboctave/fCmplxSVD.cc @@ -133,13 +133,13 @@ octave_idx_type lrwork = 5*max_mn; - Array rwork (lrwork); + Array rwork (lrwork, 1); // Ask ZGESVD what the dimension of WORK should be. octave_idx_type lwork = -1; - Array work (1); + Array work (1, 1); octave_idx_type one = 1; octave_idx_type m1 = std::max (m, one), nrow_vt1 = std::max (nrow_vt, one); @@ -153,7 +153,7 @@ F77_CHAR_ARG_LEN (1))); lwork = static_cast (work(0).real ()); - work.resize (lwork); + work.resize (lwork, 1); F77_XFCN (cgesvd, CGESVD, (F77_CONST_CHAR_ARG2 (&jobu, 1), F77_CONST_CHAR_ARG2 (&jobv, 1), diff --git a/liboctave/fColVector.h b/liboctave/fColVector.h --- a/liboctave/fColVector.h +++ b/liboctave/fColVector.h @@ -34,17 +34,19 @@ { public: - FloatColumnVector (void) : MArray () { } + FloatColumnVector (void) : MArray (0, 1) { } - explicit FloatColumnVector (octave_idx_type n) : MArray (n) { } + explicit FloatColumnVector (octave_idx_type n) : MArray (n, 1) { } - explicit FloatColumnVector (const dim_vector& dv) : MArray (dv) { } + explicit FloatColumnVector (const dim_vector& dv) + : MArray (dv.as_column ()) { } - FloatColumnVector (octave_idx_type n, float val) : MArray (n, val) { } + FloatColumnVector (octave_idx_type n, float val) : MArray (n, 1, val) { } FloatColumnVector (const FloatColumnVector& a) : MArray (a) { } - FloatColumnVector (const MArray& a) : MArray (a) { } + FloatColumnVector (const MArray& a) : MArray (a.as_column ()) { } + FloatColumnVector (const Array& a) : MArray (a.as_column ()) { } FloatColumnVector& operator = (const FloatColumnVector& a) { @@ -93,9 +95,15 @@ friend OCTAVE_API std::ostream& operator << (std::ostream& os, const FloatColumnVector& a); friend OCTAVE_API std::istream& operator >> (std::istream& is, FloatColumnVector& a); + void resize (octave_idx_type n, const float& rfv = Array::resize_fill_value ()) + { Array::resize (n, 1, rfv); } + + void clear (octave_idx_type n) + { Array::clear (n, 1); } + private: - FloatColumnVector (float *d, octave_idx_type l) : MArray (d, l) { } + FloatColumnVector (float *d, octave_idx_type l) : MArray (d, l, 1) { } }; // Publish externally used friend functions. diff --git a/liboctave/fEIG.cc b/liboctave/fEIG.cc --- a/liboctave/fEIG.cc +++ b/liboctave/fEIG.cc @@ -155,10 +155,10 @@ FloatMatrix atmp = a; float *tmp_data = atmp.fortran_vec (); - Array wr (n); + Array wr (n, 1); float *pwr = wr.fortran_vec (); - Array wi (n); + Array wi (n, 1); float *pwi = wi.fortran_vec (); volatile octave_idx_type nvr = calc_ev ? n : 0; @@ -181,7 +181,7 @@ if (info == 0) { lwork = static_cast (dummy_work); - Array work (lwork); + Array work (lwork, 1); float *pwork = work.fortran_vec (); F77_XFCN (sgeev, SGEEV, (F77_CONST_CHAR_ARG2 ("N", 1), @@ -273,7 +273,7 @@ if (info == 0) { lwork = static_cast (dummy_work); - Array work (lwork); + Array work (lwork, 1); float *pwork = work.fortran_vec (); F77_XFCN (ssyev, SSYEV, (F77_CONST_CHAR_ARG2 (calc_ev ? "V" : "N", 1), @@ -340,7 +340,7 @@ FloatComplex dummy_work; octave_idx_type lrwork = 2*n; - Array rwork (lrwork); + Array rwork (lrwork, 1); float *prwork = rwork.fortran_vec (); FloatComplex *dummy = 0; @@ -356,7 +356,7 @@ if (info == 0) { lwork = static_cast (dummy_work.real ()); - Array work (lwork); + Array work (lwork, 1); FloatComplex *pwork = work.fortran_vec (); F77_XFCN (cgeev, CGEEV, (F77_CONST_CHAR_ARG2 ("N", 1), @@ -410,7 +410,7 @@ FloatComplex dummy_work; octave_idx_type lrwork = 3*n; - Array rwork (lrwork); + Array rwork (lrwork, 1); float *prwork = rwork.fortran_vec (); F77_XFCN (cheev, CHEEV, (F77_CONST_CHAR_ARG2 (calc_ev ? "V" : "N", 1), @@ -423,7 +423,7 @@ if (info == 0) { lwork = static_cast (dummy_work.real ()); - Array work (lwork); + Array work (lwork, 1); FloatComplex *pwork = work.fortran_vec (); F77_XFCN (cheev, CHEEV, (F77_CONST_CHAR_ARG2 (calc_ev ? "V" : "N", 1), @@ -498,13 +498,13 @@ FloatMatrix btmp = b; float *btmp_data = btmp.fortran_vec (); - Array ar (n); + Array ar (n, 1); float *par = ar.fortran_vec (); - Array ai (n); + Array ai (n, 1); float *pai = ai.fortran_vec (); - Array beta (n); + Array beta (n, 1); float *pbeta = beta.fortran_vec (); volatile octave_idx_type nvr = calc_ev ? n : 0; @@ -529,7 +529,7 @@ if (info == 0) { lwork = static_cast (dummy_work); - Array work (lwork); + Array work (lwork, 1); float *pwork = work.fortran_vec (); F77_XFCN (sggev, SGGEV, (F77_CONST_CHAR_ARG2 ("N", 1), @@ -637,7 +637,7 @@ if (info == 0) { lwork = static_cast (dummy_work); - Array work (lwork); + Array work (lwork, 1); float *pwork = work.fortran_vec (); F77_XFCN (ssygv, SSYGV, (1, F77_CONST_CHAR_ARG2 (calc_ev ? "V" : "N", 1), @@ -728,7 +728,7 @@ FloatComplex dummy_work; octave_idx_type lrwork = 8*n; - Array rwork (lrwork); + Array rwork (lrwork, 1); float *prwork = rwork.fortran_vec (); FloatComplex *dummy = 0; @@ -745,7 +745,7 @@ if (info == 0) { lwork = static_cast (dummy_work.real ()); - Array work (lwork); + Array work (lwork, 1); FloatComplex *pwork = work.fortran_vec (); F77_XFCN (cggev, CGGEV, (F77_CONST_CHAR_ARG2 ("N", 1), @@ -814,7 +814,7 @@ FloatComplex dummy_work; octave_idx_type lrwork = 3*n; - Array rwork (lrwork); + Array rwork (lrwork, 1); float *prwork = rwork.fortran_vec (); F77_XFCN (chegv, CHEGV, (1, F77_CONST_CHAR_ARG2 (calc_ev ? "V" : "N", 1), @@ -829,7 +829,7 @@ if (info == 0) { lwork = static_cast (dummy_work.real ()); - Array work (lwork); + Array work (lwork, 1); FloatComplex *pwork = work.fortran_vec (); F77_XFCN (chegv, CHEGV, (1, F77_CONST_CHAR_ARG2 (calc_ev ? "V" : "N", 1), diff --git a/liboctave/fMatrix.cc b/liboctave/fMatrix.cc --- a/liboctave/fMatrix.cc +++ b/liboctave/fMatrix.cc @@ -213,24 +213,24 @@ // Matrix class. FloatMatrix::FloatMatrix (const FloatRowVector& rv) - : MArray2 (Array2 (rv, 1, rv.length ())) + : MArray (rv) { } FloatMatrix::FloatMatrix (const FloatColumnVector& cv) - : MArray2 (Array2 (cv, cv.length (), 1)) + : MArray (cv) { } FloatMatrix::FloatMatrix (const FloatDiagMatrix& a) - : MArray2 (a.rows (), a.cols (), 0.0) + : MArray (a.rows (), a.cols (), 0.0) { for (octave_idx_type i = 0; i < a.length (); i++) elem (i, i) = a.elem (i, i); } FloatMatrix::FloatMatrix (const PermMatrix& a) - : MArray2 (a.rows (), a.cols (), 0.0) + : MArray (a.rows (), a.cols (), 0.0) { const Array ia (a.pvec ()); octave_idx_type len = a.rows (); @@ -246,15 +246,12 @@ // here? FloatMatrix::FloatMatrix (const boolMatrix& a) - : MArray2 (a.rows (), a.cols ()) + : MArray (a) { - for (octave_idx_type i = 0; i < a.rows (); i++) - for (octave_idx_type j = 0; j < a.cols (); j++) - elem (i, j) = a.elem (i, j); } FloatMatrix::FloatMatrix (const charMatrix& a) - : MArray2 (a.rows (), a.cols ()) + : MArray (a.rows (), a.cols ()) { for (octave_idx_type i = 0; i < a.rows (); i++) for (octave_idx_type j = 0; j < a.cols (); j++) @@ -295,7 +292,7 @@ FloatMatrix& FloatMatrix::insert (const FloatMatrix& a, octave_idx_type r, octave_idx_type c) { - Array2::insert (a, r, c); + Array::insert (a, r, c); return *this; } @@ -613,13 +610,13 @@ FloatRowVector FloatMatrix::row (octave_idx_type i) const { - return MArray (index (idx_vector (i), idx_vector::colon)); + return index (idx_vector (i), idx_vector::colon); } FloatColumnVector FloatMatrix::column (octave_idx_type i) const { - return MArray (index (idx_vector::colon, idx_vector (i))); + return index (idx_vector::colon, idx_vector (i)); } FloatMatrix @@ -733,13 +730,13 @@ (*current_liboctave_error_handler) ("inverse requires square matrix"); else { - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); retval = *this; float *tmp_data = retval.fortran_vec (); - Array z(1); + Array z(1, 1); octave_idx_type lwork = -1; // Query the optimum work array size. @@ -748,7 +745,7 @@ lwork = static_cast (z(0)); lwork = (lwork < 2 *nc ? 2*nc : lwork); - z.resize (lwork); + z.resize (lwork, 1); float *pz = z.fortran_vec (); info = 0; @@ -770,7 +767,7 @@ // Now calculate the condition number for non-singular matrix. char job = '1'; - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (sgecon, SGECON, (F77_CONST_CHAR_ARG2 (&job, 1), nc, tmp_data, nr, anorm, @@ -1005,7 +1002,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); FloatComplex *pwsave = wsave.fortran_vec (); retval = FloatComplexMatrix (*this); @@ -1046,7 +1043,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); FloatComplex *pwsave = wsave.fortran_vec (); retval = FloatComplexMatrix (*this); @@ -1090,7 +1087,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); FloatComplex *pwsave = wsave.fortran_vec (); retval = FloatComplexMatrix (*this); @@ -1109,10 +1106,10 @@ nsamples = nr; nn = 4*npts+15; - wsave.resize (nn); + wsave.resize (nn, 1); pwsave = wsave.fortran_vec (); - Array tmp (npts); + Array tmp (npts, 1); FloatComplex *prow = tmp.fortran_vec (); F77_FUNC (cffti, CFFTI) (npts, pwsave); @@ -1156,7 +1153,7 @@ octave_idx_type nn = 4*npts+15; - Array wsave (nn); + Array wsave (nn, 1); FloatComplex *pwsave = wsave.fortran_vec (); retval = FloatComplexMatrix (*this); @@ -1178,10 +1175,10 @@ nsamples = nr; nn = 4*npts+15; - wsave.resize (nn); + wsave.resize (nn, 1); pwsave = wsave.fortran_vec (); - Array tmp (npts); + Array tmp (npts, 1); FloatComplex *prow = tmp.fortran_vec (); F77_FUNC (cffti, CFFTI) (npts, pwsave); @@ -1278,9 +1275,9 @@ } else { - Array z (3 * nc); + Array z (3 * nc, 1); float *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (spocon, SPOCON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -1302,7 +1299,7 @@ if (typ == MatrixType::Full) { - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); FloatMatrix atmp = *this; @@ -1329,9 +1326,9 @@ { // Now calc the condition number for non-singular matrix. char job = '1'; - Array z (4 * nc); + Array z (4 * nc, 1); float *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (sgecon, SGECON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -1394,9 +1391,9 @@ char uplo = 'U'; char dia = 'N'; - Array z (3 * nc); + Array z (3 * nc, 1); float *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (strcon, STRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -1422,9 +1419,9 @@ char uplo = 'L'; char dia = 'N'; - Array z (3 * nc); + Array z (3 * nc, 1); float *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (strcon, STRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -1467,9 +1464,9 @@ } else { - Array z (3 * nc); + Array z (3 * nc, 1); float *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (spocon, SPOCON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -1486,16 +1483,16 @@ { octave_idx_type info = 0; - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); if(anorm < 0.) anorm = atmp.abs().sum(). row(static_cast(0)).max(); - Array z (4 * nc); + Array z (4 * nc, 1); float *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (sgetrf, SGETRF, (nr, nr, tmp_data, nr, pipvt, info)); @@ -1566,9 +1563,9 @@ char uplo = 'U'; char dia = 'N'; - Array z (3 * nc); + Array z (3 * nc, 1); float *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (strcon, STRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -1666,9 +1663,9 @@ char uplo = 'L'; char dia = 'N'; - Array z (3 * nc); + Array z (3 * nc, 1); float *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (strcon, STRCON, (F77_CONST_CHAR_ARG2 (&norm, 1), @@ -1772,9 +1769,9 @@ { if (calc_cond) { - Array z (3 * nc); + Array z (3 * nc, 1); float *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (spocon, SPOCON, (F77_CONST_CHAR_ARG2 (&job, 1), @@ -1824,7 +1821,7 @@ { info = 0; - Array ipvt (nr); + Array ipvt (nr, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); FloatMatrix atmp = *this; @@ -1832,9 +1829,9 @@ if(anorm < 0.) anorm = atmp.abs().sum().row(static_cast(0)).max(); - Array z (4 * nc); + Array z (4 * nc, 1); float *pz = z.fortran_vec (); - Array iz (nc); + Array iz (nc, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (sgetrf, SGETRF, (nr, nr, tmp_data, nr, pipvt, info)); @@ -2263,13 +2260,13 @@ float *tmp_data = atmp.fortran_vec (); float *pretval = retval.fortran_vec (); - Array s (minmn); + Array s (minmn, 1); float *ps = s.fortran_vec (); // Ask DGELSD what the dimension of WORK should be. octave_idx_type lwork = -1; - Array work (1); + Array work (1, 1); octave_idx_type smlsiz; F77_FUNC (xilaenv, XILAENV) (9, F77_CONST_CHAR_ARG2 ("SGELSD", 6), @@ -2301,7 +2298,7 @@ octave_idx_type liwork = 3 * minmn * nlvl + 11 * minmn; if (liwork < 1) liwork = 1; - Array iwork (liwork); + Array iwork (liwork, 1); octave_idx_type* piwork = iwork.fortran_vec (); F77_XFCN (sgelsd, SGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, @@ -2346,7 +2343,7 @@ } lwork = static_cast (work(0)); - work.resize (lwork); + work.resize (lwork, 1); F77_XFCN (sgelsd, SGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, ps, rcon, rank, @@ -2464,13 +2461,13 @@ float *tmp_data = atmp.fortran_vec (); float *pretval = retval.fortran_vec (); - Array s (minmn); + Array s (minmn, 1); float *ps = s.fortran_vec (); // Ask DGELSD what the dimension of WORK should be. octave_idx_type lwork = -1; - Array work (1); + Array work (1, 1); octave_idx_type smlsiz; F77_FUNC (xilaenv, XILAENV) (9, F77_CONST_CHAR_ARG2 ("SGELSD", 6), @@ -2495,7 +2492,7 @@ octave_idx_type liwork = 3 * minmn * nlvl + 11 * minmn; if (liwork < 1) liwork = 1; - Array iwork (liwork); + Array iwork (liwork, 1); octave_idx_type* piwork = iwork.fortran_vec (); F77_XFCN (sgelsd, SGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, @@ -2503,7 +2500,7 @@ lwork, piwork, info)); lwork = static_cast (work(0)); - work.resize (lwork); + work.resize (lwork, 1); F77_XFCN (sgelsd, SGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn, ps, rcon, rank, @@ -2830,7 +2827,7 @@ FloatMatrix FloatMatrix::diag (octave_idx_type k) const { - return MArray2::diag (k); + return MArray::diag (k); } FloatColumnVector @@ -2851,7 +2848,7 @@ if (nr > 0 && nc > 0) { result.resize (nr); - idx_arg.resize (nr); + idx_arg.resize (nr, 1); for (octave_idx_type i = 0; i < nr; i++) { @@ -2906,7 +2903,7 @@ if (nr > 0 && nc > 0) { result.resize (nr); - idx_arg.resize (nr); + idx_arg.resize (nr, 1); for (octave_idx_type i = 0; i < nr; i++) { @@ -2961,7 +2958,7 @@ if (nr > 0 && nc > 0) { result.resize (nc); - idx_arg.resize (nc); + idx_arg.resize (1, nc); for (octave_idx_type j = 0; j < nc; j++) { @@ -3016,7 +3013,7 @@ if (nr > 0 && nc > 0) { result.resize (nc); - idx_arg.resize (nc); + idx_arg.resize (1, nc); for (octave_idx_type j = 0; j < nc; j++) { diff --git a/liboctave/fMatrix.h b/liboctave/fMatrix.h --- a/liboctave/fMatrix.h +++ b/liboctave/fMatrix.h @@ -24,7 +24,8 @@ #if !defined (octave_FloatMatrix_int_h) #define octave_FloatMatrix_int_h 1 -#include "MArray2.h" +#include "Array2.h" +#include "MArray.h" #include "MDiagArray2.h" #include "MatrixType.h" @@ -34,7 +35,7 @@ class OCTAVE_API -FloatMatrix : public MArray2 +FloatMatrix : public MArray { public: @@ -43,26 +44,26 @@ typedef void (*solve_singularity_handler) (float rcon); - FloatMatrix (void) : MArray2 () { } + FloatMatrix (void) : MArray () { } - FloatMatrix (octave_idx_type r, octave_idx_type c) : MArray2 (r, c) { } + FloatMatrix (octave_idx_type r, octave_idx_type c) : MArray (r, c) { } - FloatMatrix (octave_idx_type r, octave_idx_type c, float val) : MArray2 (r, c, val) { } + FloatMatrix (octave_idx_type r, octave_idx_type c, float val) : MArray (r, c, val) { } - FloatMatrix (const dim_vector& dv) : MArray2 (dv) { } + FloatMatrix (const dim_vector& dv) : MArray (dv.redim (2)) { } - FloatMatrix (const dim_vector& dv, float val) : MArray2 (dv, val) { } + FloatMatrix (const dim_vector& dv, float val) : MArray (dv.redim (2), val) { } - FloatMatrix (const FloatMatrix& a) : MArray2 (a) { } + FloatMatrix (const FloatMatrix& a) : MArray (a) { } template - FloatMatrix (const MArray2& a) : MArray2 (a) { } + FloatMatrix (const MArray& a) : MArray (a.as_matrix ()) { } template - FloatMatrix (const Array2& a) : MArray2 (a) { } + FloatMatrix (const Array2& a) : MArray (a) { } template - FloatMatrix (const Array& a) : MArray2 (a) { } + FloatMatrix (const Array& a) : MArray (a.as_matrix ()) { } explicit FloatMatrix (const FloatRowVector& rv); @@ -79,7 +80,7 @@ FloatMatrix& operator = (const FloatMatrix& a) { - MArray2::operator = (a); + MArray::operator = (a); return *this; } @@ -113,7 +114,7 @@ friend class FloatComplexMatrix; - FloatMatrix transpose (void) const { return MArray2::transpose (); } + FloatMatrix transpose (void) const { return MArray::transpose (); } // resize is the destructive equivalent for this one @@ -331,7 +332,7 @@ private: - FloatMatrix (float *d, octave_idx_type r, octave_idx_type c) : MArray2 (d, r, c) { } + FloatMatrix (float *d, octave_idx_type r, octave_idx_type c) : MArray (d, r, c) { } }; // Publish externally used friend functions. @@ -377,7 +378,7 @@ MM_CMP_OP_DECLS (FloatMatrix, FloatMatrix, OCTAVE_API) MM_BOOL_OP_DECLS (FloatMatrix, FloatMatrix, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArray2, FloatMatrix, float) +MARRAY_FORWARD_DEFS (MArray, FloatMatrix, float) template void read_int (std::istream& is, bool swap_bytes, T& val); diff --git a/liboctave/fNDArray.cc b/liboctave/fNDArray.cc --- a/liboctave/fNDArray.cc +++ b/liboctave/fNDArray.cc @@ -46,7 +46,7 @@ #include "bsxfun-defs.cc" FloatNDArray::FloatNDArray (const charNDArray& a) - : MArrayN (a.dims ()) + : MArray (a.dims ()) { octave_idx_type n = a.numel (); for (octave_idx_type i = 0; i < n; i++) @@ -898,7 +898,7 @@ FloatNDArray FloatNDArray::diag (octave_idx_type k) const { - return MArrayN::diag (k); + return MArray::diag (k); } // This contains no information on the array structure !!! diff --git a/liboctave/fNDArray.h b/liboctave/fNDArray.h --- a/liboctave/fNDArray.h +++ b/liboctave/fNDArray.h @@ -24,7 +24,7 @@ #if !defined (octave_FloatNDArray_h) #define octave_FloatNDArray_h 1 -#include "MArrayN.h" +#include "MArray.h" #include "fMatrix.h" #include "intNDArray.h" @@ -34,37 +34,37 @@ class OCTAVE_API -FloatNDArray : public MArrayN +FloatNDArray : public MArray { public: typedef FloatMatrix matrix_type; - FloatNDArray (void) : MArrayN () { } + FloatNDArray (void) : MArray () { } - FloatNDArray (const dim_vector& dv) : MArrayN (dv) { } + FloatNDArray (const dim_vector& dv) : MArray (dv) { } FloatNDArray (const dim_vector& dv, float val) - : MArrayN (dv, val) { } + : MArray (dv, val) { } - FloatNDArray (const FloatNDArray& a) : MArrayN (a) { } + FloatNDArray (const FloatNDArray& a) : MArray (a) { } - FloatNDArray (const FloatMatrix& a) : MArrayN (a) { } + FloatNDArray (const FloatMatrix& a) : MArray (a) { } template - FloatNDArray (const MArrayN& a) : MArrayN (a) { } + FloatNDArray (const MArray& a) : MArray (a) { } template - FloatNDArray (const Array& a) : MArrayN (a) { } + FloatNDArray (const Array& a) : MArray (a) { } template - explicit FloatNDArray (const intNDArray& a) : MArrayN (a) { } + explicit FloatNDArray (const intNDArray& a) : MArray (a) { } FloatNDArray (const charNDArray&); FloatNDArray& operator = (const FloatNDArray& a) { - MArrayN::operator = (a); + MArray::operator = (a); return *this; } @@ -133,7 +133,7 @@ FloatMatrix matrix_value (void) const; - FloatNDArray squeeze (void) const { return MArrayN::squeeze (); } + FloatNDArray squeeze (void) const { return MArray::squeeze (); } static void increment_index (Array& ra_idx, const dim_vector& dimensions, @@ -153,13 +153,13 @@ FloatNDArray& changesign (void) { - MArrayN::changesign (); + MArray::changesign (); return *this; } private: - FloatNDArray (float *d, const dim_vector& dv) : MArrayN (d, dv) { } + FloatNDArray (float *d, const dim_vector& dv) : MArray (d, dv) { } }; // Publish externally used friend functions. @@ -178,7 +178,7 @@ NDND_CMP_OP_DECLS (FloatNDArray, FloatNDArray, OCTAVE_API) NDND_BOOL_OP_DECLS (FloatNDArray, FloatNDArray, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArrayN, FloatNDArray, float) +MARRAY_FORWARD_DEFS (MArray, FloatNDArray, float) BSXFUN_STDOP_DECLS (FloatNDArray, OCTAVE_API) BSXFUN_STDREL_DECLS (FloatNDArray, OCTAVE_API) diff --git a/liboctave/fRowVector.h b/liboctave/fRowVector.h --- a/liboctave/fRowVector.h +++ b/liboctave/fRowVector.h @@ -34,17 +34,18 @@ { public: - FloatRowVector (void) : MArray () { } + FloatRowVector (void) : MArray (1, 0) { } - explicit FloatRowVector (octave_idx_type n) : MArray (n) { } + explicit FloatRowVector (octave_idx_type n) : MArray (1, n) { } - explicit FloatRowVector (const dim_vector& dv) : MArray (dv) { } + explicit FloatRowVector (const dim_vector& dv) : MArray (dv.as_row ()) { } - FloatRowVector (octave_idx_type n, float val) : MArray (n, val) { } + FloatRowVector (octave_idx_type n, float val) : MArray (1, n, val) { } FloatRowVector (const FloatRowVector& a) : MArray (a) { } - FloatRowVector (const MArray& a) : MArray (a) { } + FloatRowVector (const MArray& a) : MArray (a.as_row ()) { } + FloatRowVector (const Array& a) : MArray (a.as_row ()) { } FloatRowVector& operator = (const FloatRowVector& a) { @@ -89,9 +90,15 @@ friend OCTAVE_API std::ostream& operator << (std::ostream& os, const FloatRowVector& a); friend OCTAVE_API std::istream& operator >> (std::istream& is, FloatRowVector& a); + void resize (octave_idx_type n, const float& rfv = Array::resize_fill_value ()) + { Array::resize (1, n, rfv); } + + void clear (octave_idx_type n) + { Array::clear (1, n); } + private: - FloatRowVector (float *d, octave_idx_type l) : MArray (d, l) { } + FloatRowVector (float *d, octave_idx_type l) : MArray (d, 1, l) { } }; // row vector by column vector -> scalar diff --git a/liboctave/floatCHOL.cc b/liboctave/floatCHOL.cc --- a/liboctave/floatCHOL.cc +++ b/liboctave/floatCHOL.cc @@ -123,9 +123,9 @@ octave_idx_type spocon_info = 0; // Now calculate the condition number for non-singular matrix. - Array z (3*n); + Array z (3*n, 1); float *pz = z.fortran_vec (); - Array iz (n); + Array iz (n, 1); octave_idx_type *piz = iz.fortran_vec (); F77_XFCN (spocon, SPOCON, (F77_CONST_CHAR_ARG2 ("U", 1), n, h, n, anorm, xrcond, pz, piz, spocon_info @@ -416,7 +416,7 @@ else { FloatMatrix a = chol_mat.transpose () * chol_mat; - Array p (n); + Array p (n, 1); for (octave_idx_type k = 0; k < n; k++) p(k) = k; if (i < j) { diff --git a/liboctave/floatHESS.cc b/liboctave/floatHESS.cc --- a/liboctave/floatHESS.cc +++ b/liboctave/floatHESS.cc @@ -80,17 +80,17 @@ hess_mat = a; float *h = hess_mat.fortran_vec (); - Array scale (n); + Array scale (n, 1); float *pscale = scale.fortran_vec (); F77_XFCN (sgebal, SGEBAL, (F77_CONST_CHAR_ARG2 (&job, 1), n, h, n, ilo, ihi, pscale, info F77_CHAR_ARG_LEN (1))); - Array tau (n-1); + Array tau (n-1, 1); float *ptau = tau.fortran_vec (); - Array work (lwork); + Array work (lwork, 1); float *pwork = work.fortran_vec (); F77_XFCN (sgehrd, SGEHRD, (n, ilo, ihi, h, n, ptau, pwork, diff --git a/liboctave/floatLU.cc b/liboctave/floatLU.cc --- a/liboctave/floatLU.cc +++ b/liboctave/floatLU.cc @@ -69,7 +69,7 @@ octave_idx_type a_nc = a.cols (); octave_idx_type mn = (a_nr < a_nc ? a_nr : a_nc); - ipvt.resize (mn); + ipvt.resize (mn, 1); octave_idx_type *pipvt = ipvt.fortran_vec (); a_fact = a; diff --git a/liboctave/floatQRP.cc b/liboctave/floatQRP.cc --- a/liboctave/floatQRP.cc +++ b/liboctave/floatQRP.cc @@ -65,7 +65,7 @@ if (m > n && qr_type == qr_type_std) afact.resize (m, m); - MArray jpvt (n, 0); + MArray jpvt (n, 1, 0); if (m > 0) { diff --git a/liboctave/floatSCHUR.cc b/liboctave/floatSCHUR.cc --- a/liboctave/floatSCHUR.cc +++ b/liboctave/floatSCHUR.cc @@ -111,20 +111,20 @@ float *s = schur_mat.fortran_vec (); float *q = unitary_mat.fortran_vec (); - Array wr (n); + Array wr (n, 1); float *pwr = wr.fortran_vec (); - Array wi (n); + Array wi (n, 1); float *pwi = wi.fortran_vec (); - Array work (lwork); + Array work (lwork, 1); float *pwork = work.fortran_vec (); // BWORK is not referenced for the non-ordered Schur routine. - Array bwork ((ord_char == 'N' || ord_char == 'n') ? 0 : n); + Array bwork ((ord_char == 'N' || ord_char == 'n') ? 0 : n, 1); octave_idx_type *pbwork = bwork.fortran_vec (); - Array iwork (liwork); + Array iwork (liwork, 1); octave_idx_type *piwork = iwork.fortran_vec (); F77_XFCN (sgeesx, SGEESX, (F77_CONST_CHAR_ARG2 (&jobvs, 1), diff --git a/liboctave/floatSVD.cc b/liboctave/floatSVD.cc --- a/liboctave/floatSVD.cc +++ b/liboctave/floatSVD.cc @@ -135,7 +135,7 @@ octave_idx_type lwork = -1; - Array work (1); + Array work (1, 1); octave_idx_type one = 1; octave_idx_type m1 = std::max (m, one), nrow_vt1 = std::max (nrow_vt, one); @@ -148,7 +148,7 @@ F77_CHAR_ARG_LEN (1))); lwork = static_cast (work(0)); - work.resize (lwork); + work.resize (lwork, 1); F77_XFCN (sgesvd, SGESVD, (F77_CONST_CHAR_ARG2 (&jobu, 1), F77_CONST_CHAR_ARG2 (&jobv, 1), diff --git a/liboctave/glob-match.h b/liboctave/glob-match.h --- a/liboctave/glob-match.h +++ b/liboctave/glob-match.h @@ -74,7 +74,7 @@ { int n = str.length (); - Array retval (n); + Array retval (n, 1); for (int i = 0; i < n; i++) retval(i) = match (str[i]); diff --git a/liboctave/int16NDArray.h b/liboctave/int16NDArray.h --- a/liboctave/int16NDArray.h +++ b/liboctave/int16NDArray.h @@ -39,7 +39,7 @@ NDND_CMP_OP_DECLS (int16NDArray, int16NDArray, OCTAVE_API) NDND_BOOL_OP_DECLS (int16NDArray, int16NDArray, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArrayN, int16NDArray, octave_int16) +MARRAY_FORWARD_DEFS (MArray, int16NDArray, octave_int16) MINMAX_DECLS (int16NDArray, octave_int16, OCTAVE_API) diff --git a/liboctave/int32NDArray.h b/liboctave/int32NDArray.h --- a/liboctave/int32NDArray.h +++ b/liboctave/int32NDArray.h @@ -39,7 +39,7 @@ NDND_CMP_OP_DECLS (int32NDArray, int32NDArray, OCTAVE_API) NDND_BOOL_OP_DECLS (int32NDArray, int32NDArray, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArrayN, int32NDArray, octave_int32) +MARRAY_FORWARD_DEFS (MArray, int32NDArray, octave_int32) MINMAX_DECLS (int32NDArray, octave_int32, OCTAVE_API) diff --git a/liboctave/int64NDArray.h b/liboctave/int64NDArray.h --- a/liboctave/int64NDArray.h +++ b/liboctave/int64NDArray.h @@ -39,7 +39,7 @@ NDND_CMP_OP_DECLS (int64NDArray, int64NDArray, OCTAVE_API) NDND_BOOL_OP_DECLS (int64NDArray, int64NDArray, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArrayN, int64NDArray, octave_int64) +MARRAY_FORWARD_DEFS (MArray, int64NDArray, octave_int64) MINMAX_DECLS (int64NDArray, octave_int64, OCTAVE_API) diff --git a/liboctave/int8NDArray.h b/liboctave/int8NDArray.h --- a/liboctave/int8NDArray.h +++ b/liboctave/int8NDArray.h @@ -39,7 +39,7 @@ NDND_CMP_OP_DECLS (int8NDArray, int8NDArray, OCTAVE_API) NDND_BOOL_OP_DECLS (int8NDArray, int8NDArray, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArrayN, int8NDArray, octave_int8) +MARRAY_FORWARD_DEFS (MArray, int8NDArray, octave_int8) MINMAX_DECLS (int8NDArray, octave_int8, OCTAVE_API) diff --git a/liboctave/intNDArray.cc b/liboctave/intNDArray.cc --- a/liboctave/intNDArray.cc +++ b/liboctave/intNDArray.cc @@ -66,7 +66,7 @@ intNDArray intNDArray::diag (octave_idx_type k) const { - return MArrayN::diag (k); + return MArray::diag (k); } // FIXME -- this is not quite the right thing. diff --git a/liboctave/intNDArray.h b/liboctave/intNDArray.h --- a/liboctave/intNDArray.h +++ b/liboctave/intNDArray.h @@ -23,39 +23,39 @@ #if !defined (octave_intNDArray_h) #define octave_intNDArray_h 1 -#include "MArrayN.h" +#include "MArray.h" #include "boolNDArray.h" class NDArray; template class -intNDArray : public MArrayN +intNDArray : public MArray { public: - using MArrayN::element_type; + using MArray::element_type; - intNDArray (void) : MArrayN () { } + intNDArray (void) : MArray () { } - intNDArray (T val) : MArrayN (dim_vector (1, 1), val) { } + intNDArray (T val) : MArray (dim_vector (1, 1), val) { } - intNDArray (const dim_vector& dv) : MArrayN (dv) { } + intNDArray (const dim_vector& dv) : MArray (dv) { } intNDArray (const dim_vector& dv, T val) - : MArrayN (dv, val) { } + : MArray (dv, val) { } template - explicit intNDArray (const Array& a) : MArrayN (a) { } + intNDArray (const Array& a) : MArray (a) { } template - intNDArray (const MArrayN& a) : MArrayN (a) { } + intNDArray (const MArray& a) : MArray (a) { } template - intNDArray (const intNDArray& a) : MArrayN (a) { } + intNDArray (const intNDArray& a) : MArray (a) { } intNDArray& operator = (const intNDArray& a) { - MArrayN::operator = (a); + MArray::operator = (a); return *this; } @@ -68,7 +68,7 @@ intNDArray& changesign (void) { - MArrayN::changesign (); + MArray::changesign (); return *this; } @@ -97,10 +97,10 @@ intNDArray signum (void) const; intNDArray squeeze (void) const - { return intNDArray (MArrayN::squeeze ()); } + { return intNDArray (MArray::squeeze ()); } intNDArray transpose (void) const - { return intNDArray (MArrayN::transpose ()); } + { return intNDArray (MArray::transpose ()); } intNDArray concat (const intNDArray& rb, const Array& ra_idx); @@ -118,7 +118,7 @@ protected: - intNDArray (T *d, dim_vector& dv) : MArrayN (d, dv) { } + intNDArray (T *d, dim_vector& dv) : MArray (d, dv) { } }; // i/o diff --git a/liboctave/oct-fftw.cc b/liboctave/oct-fftw.cc --- a/liboctave/oct-fftw.cc +++ b/liboctave/oct-fftw.cc @@ -763,7 +763,7 @@ { dist = (dist < 0 ? npts : dist); - dim_vector dv (npts); + dim_vector dv (npts, 1); fftw_plan plan = octave_fftw_planner::create_plan (1, dv, nsamples, stride, dist, in, out); @@ -783,7 +783,7 @@ { dist = (dist < 0 ? npts : dist); - dim_vector dv (npts); + dim_vector dv (npts, 1); fftw_plan plan = octave_fftw_planner::create_plan (FFTW_FORWARD, 1, dv, nsamples, stride, dist, in, out); @@ -801,7 +801,7 @@ { dist = (dist < 0 ? npts : dist); - dim_vector dv (npts); + dim_vector dv (npts, 1); fftw_plan plan = octave_fftw_planner::create_plan (FFTW_BACKWARD, 1, dv, nsamples, stride, dist, in, out); @@ -891,7 +891,7 @@ { dist = (dist < 0 ? npts : dist); - dim_vector dv (npts); + dim_vector dv (npts, 1); fftwf_plan plan = octave_float_fftw_planner::create_plan (1, dv, nsamples, stride, dist, in, out); @@ -912,7 +912,7 @@ { dist = (dist < 0 ? npts : dist); - dim_vector dv (npts); + dim_vector dv (npts, 1); fftwf_plan plan = octave_float_fftw_planner::create_plan (FFTW_FORWARD, 1, dv, nsamples, stride, dist, @@ -931,7 +931,7 @@ { dist = (dist < 0 ? npts : dist); - dim_vector dv (npts); + dim_vector dv (npts, 1); fftwf_plan plan = octave_float_fftw_planner::create_plan (FFTW_BACKWARD, 1, dv, nsamples, stride, dist, diff --git a/liboctave/oct-norm.cc b/liboctave/oct-norm.cc --- a/liboctave/oct-norm.cc +++ b/liboctave/oct-norm.cc @@ -224,9 +224,9 @@ // dense versions template -void column_norms (const MArray2& m, MArray& res, ACC acc) +void column_norms (const MArray& m, MArray& res, ACC acc) { - res = MArray2 (1, m.columns ()); + res = MArray (1, m.columns ()); for (octave_idx_type j = 0; j < m.columns (); j++) { ACC accj = acc; @@ -238,9 +238,9 @@ } template -void row_norms (const MArray2& m, MArray& res, ACC acc) +void row_norms (const MArray& m, MArray& res, ACC acc) { - res = MArray2 (m.rows (), 1); + res = MArray (m.rows (), 1); std::vector acci (m.rows (), acc); for (octave_idx_type j = 0; j < m.columns (); j++) { @@ -256,7 +256,7 @@ template void column_norms (const MSparse& m, MArray& res, ACC acc) { - res = MArray2 (1, m.columns ()); + res = MArray (1, m.columns ()); for (octave_idx_type j = 0; j < m.columns (); j++) { ACC accj = acc; @@ -270,7 +270,7 @@ template void row_norms (const MSparse& m, MArray& res, ACC acc) { - res = MArray2 (m.rows (), 1); + res = MArray (m.rows (), 1); std::vector acci (m.rows (), acc); for (octave_idx_type j = 0; j < m.columns (); j++) { @@ -309,9 +309,8 @@ } DEFINE_DISPATCHER (vector_norm, MArray, R) -DEFINE_DISPATCHER (vector_norm, MArray2, R) -DEFINE_DISPATCHER (column_norms, MArray2, MArray) -DEFINE_DISPATCHER (row_norms, MArray2, MArray) +DEFINE_DISPATCHER (column_norms, MArray, MArray) +DEFINE_DISPATCHER (row_norms, MArray, MArray) DEFINE_DISPATCHER (column_norms, MSparse, MArray) DEFINE_DISPATCHER (row_norms, MSparse, MArray) diff --git a/liboctave/oct-rand.cc b/liboctave/oct-rand.cc --- a/liboctave/oct-rand.cc +++ b/liboctave/oct-rand.cc @@ -425,7 +425,7 @@ if (n > 0) { - retval.clear (n); + retval.clear (n, 1); fill (retval.capacity (), retval.fortran_vec (), a); } diff --git a/liboctave/regex-match.cc b/liboctave/regex-match.cc --- a/liboctave/regex-match.cc +++ b/liboctave/regex-match.cc @@ -140,7 +140,7 @@ { int n = s.length (); - Array retval (n); + Array retval (n, 1); for (int i = 0; i < n; i++) retval(i) = match (s[i]); diff --git a/liboctave/sparse-dmsolve.cc b/liboctave/sparse-dmsolve.cc --- a/liboctave/sparse-dmsolve.cc +++ b/liboctave/sparse-dmsolve.cc @@ -26,7 +26,7 @@ #include -#include "MArray2.h" +#include "MArray.h" #include "MSparse.h" #include "SparseQR.h" #include "SparseCmplxQR.h" @@ -116,8 +116,8 @@ #endif template -static MArray2 -dmsolve_extract (const MArray2 &m, const octave_idx_type *, +static MArray +dmsolve_extract (const MArray &m, const octave_idx_type *, const octave_idx_type *, octave_idx_type r1, octave_idx_type r2, octave_idx_type c1, octave_idx_type c2) @@ -130,7 +130,7 @@ octave_idx_type new_r = r2 - r1 + 1; octave_idx_type new_c = c2 - c1 + 1; - MArray2 result (new_r, new_c); + MArray result (new_r, new_c); for (octave_idx_type j = 0; j < new_c; j++) for (octave_idx_type i = 0; i < new_r; i++) @@ -140,14 +140,14 @@ } #if !defined (CXX_NEW_FRIEND_TEMPLATE_DECL) -static MArray2 -dmsolve_extract (const MArray2 &m, const octave_idx_type *, +static MArray +dmsolve_extract (const MArray &m, const octave_idx_type *, const octave_idx_type *, octave_idx_type r1, octave_idx_type r2, octave_idx_type c1, octave_idx_type c2) -static MArray2 -dmsolve_extract (const MArray2 &m, const octave_idx_type *, +static MArray +dmsolve_extract (const MArray &m, const octave_idx_type *, const octave_idx_type *, octave_idx_type r1, octave_idx_type r2, octave_idx_type c1, octave_idx_type c2) @@ -155,7 +155,7 @@ template static void -dmsolve_insert (MArray2 &a, const MArray2 &b, const octave_idx_type *Q, +dmsolve_insert (MArray &a, const MArray &b, const octave_idx_type *Q, octave_idx_type r, octave_idx_type c) { T *ax = a.fortran_vec(); @@ -177,11 +177,11 @@ #if !defined (CXX_NEW_FRIEND_TEMPLATE_DECL) static void -dmsolve_insert (MArray2 &a, const MArray2 &b, +dmsolve_insert (MArray &a, const MArray &b, const octave_idx_type *Q, octave_idx_type r, octave_idx_type c); static void -dmsolve_insert (MArray2 &a, const MArray2 &b, +dmsolve_insert (MArray &a, const MArray &b, const octave_idx_type *Q, octave_idx_type r, octave_idx_type c); #endif @@ -274,7 +274,7 @@ template static void -dmsolve_permute (MArray2 &a, const MArray2& b, const octave_idx_type *p) +dmsolve_permute (MArray &a, const MArray& b, const octave_idx_type *p) { octave_idx_type b_nr = b.rows (); octave_idx_type b_nc = b.cols (); @@ -294,15 +294,15 @@ #if !defined (CXX_NEW_FRIEND_TEMPLATE_DECL) static void -dmsolve_permute (MArray2 &a, const MArray2& b, +dmsolve_permute (MArray &a, const MArray& b, const octave_idx_type *p); static void -dmsolve_permute (MArray2 &a, const MArray2& b, +dmsolve_permute (MArray &a, const MArray& b, const octave_idx_type *p); static void -dmsolve_permute (MArray2 &a, const MArray2& b, +dmsolve_permute (MArray &a, const MArray& b, const octave_idx_type *p); #endif diff --git a/liboctave/str-vec.cc b/liboctave/str-vec.cc --- a/liboctave/str-vec.cc +++ b/liboctave/str-vec.cc @@ -95,7 +95,7 @@ // nonnegative. string_vector::string_vector (const char * const *s, octave_idx_type n) - : Array (n) + : Array (1, n) { for (octave_idx_type i = 0; i < n; i++) elem (i) = s[i]; diff --git a/liboctave/str-vec.h b/liboctave/str-vec.h --- a/liboctave/str-vec.h +++ b/liboctave/str-vec.h @@ -39,11 +39,11 @@ string_vector (void) : Array () { } - explicit string_vector (octave_idx_type n) : Array (n) { } + explicit string_vector (octave_idx_type n) : Array (1, n) { } - string_vector (const char *s) : Array (1, s) { } + string_vector (const char *s) : Array (1, 1, s) { } - string_vector (const std::string& s) : Array (1, s) { } + string_vector (const std::string& s) : Array (1, 1, s) { } string_vector (const string_vector& s) : Array (s) { } @@ -83,6 +83,9 @@ return longest; } + void resize (octave_idx_type n, const std::string& rfv = resize_fill_value ()) + { Array::resize (1, n, rfv); } + std::string& operator[] (octave_idx_type i) { return Array::elem (i); } std::string operator[] (octave_idx_type i) const { return Array::elem (i); } diff --git a/liboctave/uint16NDArray.h b/liboctave/uint16NDArray.h --- a/liboctave/uint16NDArray.h +++ b/liboctave/uint16NDArray.h @@ -39,7 +39,7 @@ NDND_CMP_OP_DECLS (uint16NDArray, uint16NDArray, OCTAVE_API) NDND_BOOL_OP_DECLS (uint16NDArray, uint16NDArray, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArrayN, uint16NDArray, octave_uint16) +MARRAY_FORWARD_DEFS (MArray, uint16NDArray, octave_uint16) MINMAX_DECLS (uint16NDArray, octave_uint16, OCTAVE_API) diff --git a/liboctave/uint32NDArray.h b/liboctave/uint32NDArray.h --- a/liboctave/uint32NDArray.h +++ b/liboctave/uint32NDArray.h @@ -39,7 +39,7 @@ NDND_CMP_OP_DECLS (uint32NDArray, uint32NDArray, OCTAVE_API) NDND_BOOL_OP_DECLS (uint32NDArray, uint32NDArray, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArrayN, uint32NDArray, octave_uint32) +MARRAY_FORWARD_DEFS (MArray, uint32NDArray, octave_uint32) MINMAX_DECLS (uint32NDArray, octave_uint32, OCTAVE_API) diff --git a/liboctave/uint64NDArray.h b/liboctave/uint64NDArray.h --- a/liboctave/uint64NDArray.h +++ b/liboctave/uint64NDArray.h @@ -39,7 +39,7 @@ NDND_CMP_OP_DECLS (uint64NDArray, uint64NDArray, OCTAVE_API) NDND_BOOL_OP_DECLS (uint64NDArray, uint64NDArray, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArrayN, uint64NDArray, octave_uint64) +MARRAY_FORWARD_DEFS (MArray, uint64NDArray, octave_uint64) MINMAX_DECLS (uint64NDArray, octave_uint64, OCTAVE_API) diff --git a/liboctave/uint8NDArray.h b/liboctave/uint8NDArray.h --- a/liboctave/uint8NDArray.h +++ b/liboctave/uint8NDArray.h @@ -39,7 +39,7 @@ NDND_CMP_OP_DECLS (uint8NDArray, uint8NDArray, OCTAVE_API) NDND_BOOL_OP_DECLS (uint8NDArray, uint8NDArray, OCTAVE_API) -MARRAY_FORWARD_DEFS (MArrayN, uint8NDArray, octave_uint8) +MARRAY_FORWARD_DEFS (MArray, uint8NDArray, octave_uint8) MINMAX_DECLS (uint8NDArray, octave_uint8, OCTAVE_API) diff --git a/src/Cell.cc b/src/Cell.cc --- a/src/Cell.cc +++ b/src/Cell.cc @@ -175,7 +175,7 @@ default: { - Array iv (n); + Array iv (n, 1); for (octave_idx_type i = 0; i < n; i++) { @@ -202,7 +202,7 @@ { octave_idx_type len = idx_arg.length (); - Array ra_idx (len); + Array ra_idx (len, 1); for (octave_idx_type i = 0; i < len; i++) ra_idx(i) = idx_arg(i).index_vector (); @@ -218,7 +218,7 @@ { octave_idx_type len = idx_arg.length (); - Array ra_idx (len); + Array ra_idx (len, 1); for (octave_idx_type i = 0; i < len; i++) ra_idx.xelem (i) = idx_arg(i).index_vector (); diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,39 @@ +2010-02-23 Jaroslav Hajek + + * Cell.cc: Reflect Array API changes. + * DLD-FUNCTIONS/__convn__.cc: Ditto. + * DLD-FUNCTIONS/__glpk__.cc: Ditto. + * DLD-FUNCTIONS/__magick_read__.cc: Ditto. + * DLD-FUNCTIONS/bsxfun.cc: Ditto. + * DLD-FUNCTIONS/cellfun.cc: Ditto. + * DLD-FUNCTIONS/conv2.cc: Ditto. + * DLD-FUNCTIONS/dlmread.cc: Ditto. + * DLD-FUNCTIONS/filter.cc: Ditto. + * DLD-FUNCTIONS/kron.cc: Ditto. + * DLD-FUNCTIONS/qz.cc: Ditto. + * DLD-FUNCTIONS/regexp.cc: Ditto. + * DLD-FUNCTIONS/sub2ind.cc: Ditto. + * data.cc: Ditto. + * file-io.cc: Ditto. + * gl-render.cc: Ditto. + * ls-mat5.cc: Ditto. + * oct-map.cc: Ditto. + * oct-obj.h: Ditto. + * oct-parse.yy: Ditto. + * oct-stream.cc: Ditto. + * ov-base-mat.cc: Ditto. + * ov-base-sparse.cc: Ditto. + * ov-perm.cc: Ditto. + * ov-struct.cc: Ditto. + * ov-typeinfo.cc: Ditto. + * ov-typeinfo.h: Ditto. + * ov.cc: Ditto. + * pr-output.cc: Ditto. + * pt-mat.cc: Ditto. + * strfns.cc: Ditto. + * txt-eng-ft.cc: Ditto. + * variables.cc: Ditto. + 2010-02-22 John W. Eaton * ls-mat5.cc: Use numel instead of nelem consistently and where diff --git a/src/DLD-FUNCTIONS/__convn__.cc b/src/DLD-FUNCTIONS/__convn__.cc --- a/src/DLD-FUNCTIONS/__convn__.cc +++ b/src/DLD-FUNCTIONS/__convn__.cc @@ -91,7 +91,7 @@ const octave_idx_type out_numel = out.numel (); // Iterate over every element of 'out'. - dim_vector idx_dim (ndims); + dim_vector idx_dim (ndims, 1); Array a_idx (idx_dim); Array b_idx (idx_dim); diff --git a/src/DLD-FUNCTIONS/__glpk__.cc b/src/DLD-FUNCTIONS/__glpk__.cc --- a/src/DLD-FUNCTIONS/__glpk__.cc +++ b/src/DLD-FUNCTIONS/__glpk__.cc @@ -520,8 +520,8 @@ mrowsA = A.rows (); octave_idx_type Anc = A.cols (); octave_idx_type Anz = A.nzmax (); - rn.resize (Anz+1); - cn.resize (Anz+1); + rn.resize (Anz+1, 1); + cn.resize (Anz+1, 1); a.resize (Anz+1, 0.0); if (Anc != mrowsc) @@ -550,8 +550,8 @@ } mrowsA = A.rows (); - rn.resize (mrowsA*mrowsc+1); - cn.resize (mrowsA*mrowsc+1); + rn.resize (mrowsA*mrowsc+1, 1); + cn.resize (mrowsA*mrowsc+1, 1); a.resize (mrowsA*mrowsc+1, 0.0); for (int i = 0; i < mrowsA; i++) @@ -595,7 +595,7 @@ double *lb = LB.fortran_vec (); //-- LB argument, default: Free - Array freeLB (mrowsc); + Array freeLB (mrowsc, 1); for (int i = 0; i < mrowsc; i++) { if (xisinf (lb[i])) @@ -619,7 +619,7 @@ double *ub = UB.fortran_vec (); - Array freeUB (mrowsc); + Array freeUB (mrowsc, 1); for (int i = 0; i < mrowsc; i++) { if (xisinf (ub[i])) @@ -652,7 +652,7 @@ return retval; } - Array vartype (mrowsc); + Array vartype (mrowsc, 1); volatile int isMIP = 0; for (int i = 0; i < mrowsc ; i++) { diff --git a/src/DLD-FUNCTIONS/__magick_read__.cc b/src/DLD-FUNCTIONS/__magick_read__.cc --- a/src/DLD-FUNCTIONS/__magick_read__.cc +++ b/src/DLD-FUNCTIONS/__magick_read__.cc @@ -56,7 +56,7 @@ idim(2) = 1; idim(3) = nframes; - Array idx (dim_vector (4)); + Array idx (dim_vector (4, 1)); Magick::ImageType type = imvec[0].type (); @@ -396,7 +396,7 @@ frameidx = args(1).int_vector_value(); else { - frameidx = Array (1); + frameidx = Array (1, 1); frameidx(0) = 1; } @@ -534,7 +534,7 @@ if (dsizes.length () == 4) nframes = dsizes(3); - Array idx (dsizes.length ()); + Array idx (dsizes.length (), 1); octave_idx_type rows = m.rows (); octave_idx_type columns = m.columns (); @@ -593,7 +593,7 @@ bool is_color = ((dsizes.length () > 2) && (dsizes(2) > 2)); bool has_alpha = (dsizes.length () > 2 && (dsizes(2) == 2 || dsizes(2) == 4)); - Array idx (dsizes.length ()); + Array idx (dsizes.length (), 1); octave_idx_type rows = m.rows (); octave_idx_type columns = m.columns (); diff --git a/src/DLD-FUNCTIONS/bsxfun.cc b/src/DLD-FUNCTIONS/bsxfun.cc --- a/src/DLD-FUNCTIONS/bsxfun.cc +++ b/src/DLD-FUNCTIONS/bsxfun.cc @@ -439,7 +439,7 @@ octave_value_list idxB; octave_value C; octave_value_list inputs; - Array ra_idx (dvc.length(), 0); + Array ra_idx (dvc.length(), 1, 0); for (octave_idx_type i = 0; i < ncount; i++) diff --git a/src/DLD-FUNCTIONS/cellfun.cc b/src/DLD-FUNCTIONS/cellfun.cc --- a/src/DLD-FUNCTIONS/cellfun.cc +++ b/src/DLD-FUNCTIONS/cellfun.cc @@ -1030,7 +1030,7 @@ OCTAVE_LOCAL_BUFFER_INIT (bool, sing, maxd, false); - perm.clear (maxd); + perm.clear (maxd, 1); for (int i = 0; i < dvl; i++) { int k = dimv(i) - 1; @@ -1475,7 +1475,7 @@ dim = dv.first_non_singleton (); ndims = std::max (ndims, dim + 1); - Array idx (ndims, idx_vector::colon); + Array idx (ndims, 1, idx_vector::colon); for (octave_idx_type i = 0; i < n && ! error_state; i++) { diff --git a/src/DLD-FUNCTIONS/conv2.cc b/src/DLD-FUNCTIONS/conv2.cc --- a/src/DLD-FUNCTIONS/conv2.cc +++ b/src/DLD-FUNCTIONS/conv2.cc @@ -35,22 +35,22 @@ enum Shape { SHAPE_FULL, SHAPE_SAME, SHAPE_VALID }; #if !defined (CXX_NEW_FRIEND_TEMPLATE_DECL) -extern MArray2 -conv2 (MArray&, MArray&, MArray2&, Shape); +extern MArray +conv2 (MArray&, MArray&, MArray&, Shape); -extern MArray2 -conv2 (MArray&, MArray&, MArray2&, Shape); +extern MArray +conv2 (MArray&, MArray&, MArray&, Shape); -extern MArray2 -conv2 (MArray&, MArray&, MArray2&, Shape); +extern MArray +conv2 (MArray&, MArray&, MArray&, Shape); -extern MArray2 -conv2 (MArray&, MArray&, MArray2&, Shape); +extern MArray +conv2 (MArray&, MArray&, MArray&, Shape); #endif template -MArray2 -conv2 (MArray& R, MArray& C, MArray2& A, Shape ishape) +MArray +conv2 (MArray& R, MArray& C, MArray& A, Shape ishape) { octave_idx_type Rn = R.length (); octave_idx_type Cm = C.length (); @@ -98,14 +98,14 @@ error ("conv2: invalid value of parameter ishape"); } - MArray2 O (outM, outN); + MArray O (outM, outN); // X accumulates the 1-D conv for each row, before calculating // the convolution in the other direction // There is no efficiency advantage to doing it in either direction // first - MArray X (An); + MArray X (An, 1); for (octave_idx_type oi = 0; oi < outM; oi++) { @@ -143,22 +143,22 @@ } #if !defined (CXX_NEW_FRIEND_TEMPLATE_DECL) -extern MArray2 -conv2 (MArray2&, MArray2&, Shape); +extern MArray +conv2 (MArray&, MArray&, Shape); -extern MArray2 -conv2 (MArray2&, MArray2&, Shape); +extern MArray +conv2 (MArray&, MArray&, Shape); -extern MArray2 -conv2 (MArray2&, MArray2&, Shape); +extern MArray +conv2 (MArray&, MArray&, Shape); -extern MArray2 -conv2 (MArray2&, MArray2&, Shape); +extern MArray +conv2 (MArray&, MArray&, Shape); #endif template -MArray2 -conv2 (MArray2&A, MArray2&B, Shape ishape) +MArray +conv2 (MArray&A, MArray&B, Shape ishape) { // Convolution works fastest if we choose the A matrix to be // the largest. @@ -208,7 +208,7 @@ break; } - MArray2 O (outM, outN); + MArray O (outM, outN); for (octave_idx_type oi = 0; oi < outM; oi++) { @@ -418,14 +418,14 @@ return retval; } -template MArray2 -conv2 (MArray&, MArray&, MArray2&, Shape); +template MArray +conv2 (MArray&, MArray&, MArray&, Shape); -template MArray2 -conv2 (MArray2&, MArray2&, Shape); +template MArray +conv2 (MArray&, MArray&, Shape); -template MArray2 -conv2 (MArray&, MArray&, MArray2&, Shape); +template MArray +conv2 (MArray&, MArray&, MArray&, Shape); -template MArray2 -conv2 (MArray2&, MArray2&, Shape); +template MArray +conv2 (MArray&, MArray&, Shape); diff --git a/src/DLD-FUNCTIONS/dlmread.cc b/src/DLD-FUNCTIONS/dlmread.cc --- a/src/DLD-FUNCTIONS/dlmread.cc +++ b/src/DLD-FUNCTIONS/dlmread.cc @@ -304,9 +304,9 @@ // Use resize_and_fill for the case of not-equal // length rows. if (iscmplx) - cdata.resize_fill (r, c, 0); + cdata.resize (r, c, 0); else - rdata.resize_fill (r, c, 0); + rdata.resize (r, c, 0); rmax = r; cmax = c; } diff --git a/src/DLD-FUNCTIONS/filter.cc b/src/DLD-FUNCTIONS/filter.cc --- a/src/DLD-FUNCTIONS/filter.cc +++ b/src/DLD-FUNCTIONS/filter.cc @@ -40,34 +40,34 @@ #include "oct-obj.h" #if !defined (CXX_NEW_FRIEND_TEMPLATE_DECL) -extern MArrayN -filter (MArray&, MArray&, MArrayN&, int dim); +extern MArray +filter (MArray&, MArray&, MArray&, int dim); -extern MArrayN -filter (MArray&, MArray&, MArrayN&, int dim); +extern MArray +filter (MArray&, MArray&, MArray&, int dim); -extern MArrayN -filter (MArray&, MArray&, MArrayN&, int dim); +extern MArray +filter (MArray&, MArray&, MArray&, int dim); -extern MArrayN -filter (MArray&, MArray&, MArrayN&, int dim); +extern MArray +filter (MArray&, MArray&, MArray&, int dim); #endif template -MArrayN -filter (MArray& b, MArray& a, MArrayN& x, MArrayN& si, +MArray +filter (MArray& b, MArray& a, MArray& x, MArray& si, int dim = 0) { - MArrayN y; + MArray y; octave_idx_type a_len = a.length (); octave_idx_type b_len = b.length (); octave_idx_type ab_len = a_len > b_len ? a_len : b_len; - b.resize (ab_len, 0.0); + b.resize (ab_len, 1, 0.0); if (a_len > 1) - a.resize (ab_len, 0.0); + a.resize (ab_len, 1, 0.0); T norm = a (0); @@ -227,26 +227,26 @@ } #if !defined (CXX_NEW_FRIEND_TEMPLATE_DECL) -extern MArrayN -filter (MArray&, MArray&, MArrayN&, - MArrayN&, int dim); +extern MArray +filter (MArray&, MArray&, MArray&, + MArray&, int dim); -extern MArrayN -filter (MArray&, MArray&, MArrayN&, - MArrayN&, int dim); +extern MArray +filter (MArray&, MArray&, MArray&, + MArray&, int dim); -extern MArrayN -filter (MArray&, MArray&, MArrayN&, - MArrayN&, int dim); +extern MArray +filter (MArray&, MArray&, MArray&, + MArray&, int dim); -extern MArrayN -filter (MArray&, MArray&, MArrayN&, - MArrayN&, int dim); +extern MArray +filter (MArray&, MArray&, MArray&, + MArray&, int dim); #endif template -MArrayN -filter (MArray& b, MArray& a, MArrayN& x, int dim = -1) +MArray +filter (MArray& b, MArray& a, MArray& x, int dim = -1) { dim_vector x_dims = x.dims(); @@ -264,7 +264,7 @@ if (dim < 0 || dim > x_dims.length ()) { error ("filter: filtering over invalid dimension"); - return MArrayN (); + return MArray (); } octave_idx_type a_len = a.length (); @@ -276,7 +276,7 @@ si_dims(i) = si_dims(i-1); si_dims(0) = si_len; - MArrayN si (si_dims, T (0.0)); + MArray si (si_dims, T (0.0)); return filter (b, a, x, si, dim); } @@ -654,33 +654,33 @@ return retval; } -template MArrayN -filter (MArray&, MArray&, MArrayN&, - MArrayN&, int dim); +template MArray +filter (MArray&, MArray&, MArray&, + MArray&, int dim); -template MArrayN -filter (MArray&, MArray&, MArrayN&, int dim); +template MArray +filter (MArray&, MArray&, MArray&, int dim); -template MArrayN -filter (MArray&, MArray&, MArrayN&, - MArrayN&, int dim); +template MArray +filter (MArray&, MArray&, MArray&, + MArray&, int dim); -template MArrayN -filter (MArray&, MArray&, MArrayN&, int dim); +template MArray +filter (MArray&, MArray&, MArray&, int dim); -template MArrayN -filter (MArray&, MArray&, MArrayN&, - MArrayN&, int dim); +template MArray +filter (MArray&, MArray&, MArray&, + MArray&, int dim); -template MArrayN -filter (MArray&, MArray&, MArrayN&, int dim); +template MArray +filter (MArray&, MArray&, MArray&, int dim); -template MArrayN -filter (MArray&, MArray&, MArrayN&, - MArrayN&, int dim); +template MArray +filter (MArray&, MArray&, MArray&, + MArray&, int dim); -template MArrayN -filter (MArray&, MArray&, MArrayN&, int dim); +template MArray +filter (MArray&, MArray&, MArray&, int dim); /* %!shared a, b, x, r diff --git a/src/DLD-FUNCTIONS/kron.cc b/src/DLD-FUNCTIONS/kron.cc --- a/src/DLD-FUNCTIONS/kron.cc +++ b/src/DLD-FUNCTIONS/kron.cc @@ -36,22 +36,22 @@ #if !defined (CXX_NEW_FRIEND_TEMPLATE_DECL) extern void -kron (const Array2&, const Array2&, Array2&); +kron (const Array&, const Array&, Array&); extern void -kron (const Array2&, const Array2&, Array2&); +kron (const Array&, const Array&, Array&); extern void -kron (const Array2&, const Array2&, Array2&); +kron (const Array&, const Array&, Array&); extern void -kron (const Array2&, const Array2&, - Array2&); +kron (const Array&, const Array&, + Array&); #endif template void -kron (const Array2& A, const Array2& B, Array2& C) +kron (const Array& A, const Array& B, Array& C) { C.resize (A.rows () * B.rows (), A.columns () * B.columns ()); @@ -71,17 +71,17 @@ } template void -kron (const Array2&, const Array2&, Array2&); +kron (const Array&, const Array&, Array&); template void -kron (const Array2&, const Array2&, Array2&); +kron (const Array&, const Array&, Array&); template void -kron (const Array2&, const Array2&, Array2&); +kron (const Array&, const Array&, Array&); template void -kron (const Array2&, const Array2&, - Array2&); +kron (const Array&, const Array&, + Array&); #if !defined (CXX_NEW_FRIEND_TEMPLATE_DECL) extern void diff --git a/src/DLD-FUNCTIONS/qz.cc b/src/DLD-FUNCTIONS/qz.cc --- a/src/DLD-FUNCTIONS/qz.cc +++ b/src/DLD-FUNCTIONS/qz.cc @@ -862,7 +862,7 @@ std::cout << std::endl; #endif - Array ind (nn); + Array ind (nn, 1); F77_XFCN (dsubsp, DSUBSP, (nn, nn, aa.fortran_vec (), bb.fortran_vec (), diff --git a/src/DLD-FUNCTIONS/regexp.cc b/src/DLD-FUNCTIONS/regexp.cc --- a/src/DLD-FUNCTIONS/regexp.cc +++ b/src/DLD-FUNCTIONS/regexp.cc @@ -237,14 +237,14 @@ for (int i = 0; i < nnames; i++) if (named(i) == tmp_name) { - named_idx.resize(inames+1); + named_idx.resize(inames+1, 1); named_idx(inames) = i; found = true; break; } if (! found) { - named_idx.resize(inames+1); + named_idx.resize(inames+1, 1); named_idx(inames) = nnames; named.append(tmp_name); nnames++; diff --git a/src/DLD-FUNCTIONS/sub2ind.cc b/src/DLD-FUNCTIONS/sub2ind.cc --- a/src/DLD-FUNCTIONS/sub2ind.cc +++ b/src/DLD-FUNCTIONS/sub2ind.cc @@ -89,7 +89,7 @@ else { dim_vector dv = get_dim_vector (args(0), "sub2ind"); - Array idxa (nargin - 1); + Array idxa (nargin - 1, 1); if (! error_state) { diff --git a/src/data.cc b/src/data.cc --- a/src/data.cc +++ b/src/data.cc @@ -1892,7 +1892,7 @@ do \ { \ int dv_len = dv.length (); \ - Array ra_idx (dv_len > 1 ? dv_len : 2, 0); \ + Array ra_idx (dv_len > 1 ? dv_len : 2, 1, 0); \ \ for (int j = 1; j < n_args; j++) \ { \ @@ -2073,7 +2073,7 @@ return retval; int dv_len = dv.length (); - Array ra_idx (dv_len, 0); + Array ra_idx (dv_len, 1, 0); for (int j = 1; j < n_args; j++) { @@ -4835,7 +4835,7 @@ new_size = args(1).int_vector_value (); else if (nargin > 2) { - new_size.resize (nargin-1); + new_size.resize (1, nargin-1); int empty_dim = -1; for (int i = 1; i < nargin; i++) @@ -4904,8 +4904,6 @@ break; } - new_size.resize (n); - if (n < 2) { error ("reshape: expecting size to be vector with at least 2 elements"); @@ -6368,8 +6366,8 @@ NDT retval (dim_vector (n, 1), zero_val); // Pick minimizer or maximizer. - void (MArrayN::*op) (const idx_vector&, const MArrayN&) = - ismin ? (&MArrayN::idx_min) : (&MArrayN::idx_max); + void (MArray::*op) (const idx_vector&, const MArray&) = + ismin ? (&MArray::idx_min) : (&MArray::idx_max); octave_idx_type l = idx.length (n); if (vals.numel () == 1) diff --git a/src/file-io.cc b/src/file-io.cc --- a/src/file-io.cc +++ b/src/file-io.cc @@ -1149,7 +1149,7 @@ Array size = (nargin == 3) ? args(2).vector_value () - : Array (1, lo_ieee_inf_value ()); + : Array (1, 1, lo_ieee_inf_value ()); if (! error_state) { @@ -1234,7 +1234,7 @@ Array size = (nargin == 3) ? args(2).vector_value () - : Array (1, lo_ieee_inf_value ()); + : Array (1, 1, lo_ieee_inf_value ()); octave_value tmp = os.scanf (args(1), size, count, who); diff --git a/src/gl-render.cc b/src/gl-render.cc --- a/src/gl-render.cc +++ b/src/gl-render.cc @@ -2394,7 +2394,7 @@ clip(i) = is_nan_or_inf (v(i,0), v(i,1), 0); boolMatrix clip_f (1, nf, false); - Array count_f (nf, 0); + Array count_f (nf, 1, 0); for (int i = 0; i < nf; i++) { diff --git a/src/ls-mat5.cc b/src/ls-mat5.cc --- a/src/ls-mat5.cc +++ b/src/ls-mat5.cc @@ -701,7 +701,7 @@ NDArray re; if (imag) { - re = NDArray (dim_vector (nnz)); + re = NDArray (dim_vector (nnz, 1)); data = re.fortran_vec (); } @@ -720,7 +720,7 @@ // imaginary data subelement if (imag) { - NDArray im (dim_vector (static_cast (nnz))); + NDArray im (dim_vector (static_cast (nnz), 1)); if (read_mat5_tag (is, swap, type, len)) { diff --git a/src/oct-map.cc b/src/oct-map.cc --- a/src/oct-map.cc +++ b/src/oct-map.cc @@ -494,7 +494,7 @@ if (n_idx > 0) { - Array ra_idx (n_idx); + Array ra_idx (n_idx, 1); for (octave_idx_type i = 0; i < n_idx; i++) { diff --git a/src/oct-obj.h b/src/oct-obj.h --- a/src/oct-obj.h +++ b/src/oct-obj.h @@ -51,13 +51,13 @@ : data (dim_vector (1, n), val) { } octave_value_list (const octave_value& tc) - : data (1, tc) { } + : data (1, 1, tc) { } octave_value_list (const Array& d) - : data (d.reshape (dim_vector (1, d.numel ()))) { } + : data (d.as_row ()) { } octave_value_list (const Cell& tc) - : data (tc.reshape (dim_vector (1, tc.numel ()))) { } + : data (tc.as_row ()) { } octave_value_list (const octave_value_list& obj) : data (obj.data), names (obj.names) { } @@ -112,10 +112,9 @@ bool empty (void) const { return length () == 0; } - void resize (octave_idx_type n) { data.resize (n); } - - void resize (octave_idx_type n, const octave_value& val) - { data.resize (n, val); } + void resize (octave_idx_type n, const octave_value& rfv + = Array::resize_fill_value ()) + { data.resize (1, n, rfv); } octave_value_list& prepend (const octave_value& val); diff --git a/src/oct-parse.yy b/src/oct-parse.yy --- a/src/oct-parse.yy +++ b/src/oct-parse.yy @@ -3782,8 +3782,8 @@ if (nargin == 0) { - Cell func_names (dim_vector (autoload_map.size ()), 1); - Cell file_names (dim_vector (autoload_map.size ()), 1); + Cell func_names (dim_vector (autoload_map.size (), 1)); + Cell file_names (dim_vector (autoload_map.size (), 1)); octave_idx_type i = 0; typedef std::map::const_iterator am_iter; diff --git a/src/oct-stream.cc b/src/oct-stream.cc --- a/src/oct-stream.cc +++ b/src/oct-stream.cc @@ -155,7 +155,7 @@ } scanf_format_list::scanf_format_list (const std::string& s) - : nconv (0), curr_idx (0), list (16), buf (0) + : nconv (0), curr_idx (0), list (16, 1), buf (0) { octave_idx_type num_elts = 0; @@ -228,7 +228,7 @@ if (have_more) add_elt_to_list (width, discard, type, modifier, num_elts); - list.resize (num_elts); + list.resize (num_elts, 1); delete buf; } @@ -260,7 +260,7 @@ modifier, char_class); if (num_elts == list.length ()) - list.resize (2 * num_elts); + list.resize (2 * num_elts, 1); list(num_elts++) = elt; } @@ -575,7 +575,7 @@ // Ugh again. printf_format_list::printf_format_list (const std::string& s) - : nconv (0), curr_idx (0), list (16), buf (0) + : nconv (0), curr_idx (0), list (16, 1), buf (0) { octave_idx_type num_elts = 0; @@ -600,7 +600,7 @@ list(num_elts++) = elt; - list.resize (num_elts); + list.resize (num_elts, 1); } else { @@ -655,7 +655,7 @@ if (have_more) add_elt_to_list (args, flags, fw, prec, type, modifier, num_elts); - list.resize (num_elts); + list.resize (num_elts, 1); delete buf; } @@ -688,7 +688,7 @@ type, modifier); if (num_elts == list.length ()) - list.resize (2 * num_elts); + list.resize (2 * num_elts, 1); list(num_elts++) = elt; } diff --git a/src/ov-base-mat.cc b/src/ov-base-mat.cc --- a/src/ov-base-mat.cc +++ b/src/ov-base-mat.cc @@ -181,7 +181,7 @@ default: { - Array idx_vec (n_idx); + Array idx_vec (n_idx, 1); bool scalar_opt = n_idx == nd; const dim_vector dv = matrix.dims (); @@ -257,7 +257,7 @@ default: { - Array idx_vec (n_idx); + Array idx_vec (n_idx, 1); for (octave_idx_type i = 0; i < n_idx; i++) { @@ -295,7 +295,7 @@ int nd = matrix.ndims (); - MT mrhs (dim_vector (1), rhs); + MT mrhs (dim_vector (1, 1), rhs); switch (n_idx) { @@ -341,7 +341,7 @@ default: { - Array idx_vec (n_idx); + Array idx_vec (n_idx, 1); bool scalar_opt = n_idx == nd; const dim_vector dv = matrix.dims ().redim (n_idx); @@ -387,7 +387,7 @@ { octave_idx_type len = idx.length (); - Array ra_idx (len); + Array ra_idx (len, 1); for (octave_idx_type i = 0; i < len; i++) ra_idx(i) = idx(i).index_vector (); diff --git a/src/ov-base-sparse.cc b/src/ov-base-sparse.cc --- a/src/ov-base-sparse.cc +++ b/src/ov-base-sparse.cc @@ -84,7 +84,7 @@ } else { - Array idx_vec (n_idx); + Array idx_vec (n_idx, 1); for (octave_idx_type i = 0; i < n_idx; i++) { @@ -200,7 +200,7 @@ { octave_idx_type len = idx.length (); - Array ra_idx (len); + Array ra_idx (len, 1); for (octave_idx_type i = 0; i < len; i++) ra_idx(i) = idx(i).index_vector (); diff --git a/src/ov-perm.cc b/src/ov-perm.cc --- a/src/ov-perm.cc +++ b/src/ov-perm.cc @@ -277,7 +277,6 @@ && extract_keyword (is, "orient", orient, true)) { bool colp = orient == 'c'; - dim_vector dv (n); ColumnVector tmp (n); is >> tmp; if (!is) @@ -287,7 +286,7 @@ } else { - Array pvec (n); + Array pvec (n, 1); for (octave_idx_type i = 0; i < n; i++) pvec(i) = tmp(i) - 1; matrix = PermMatrix (pvec, colp); @@ -327,7 +326,7 @@ && is.read (reinterpret_cast (&colp), 1))) return false; - MArray m (sz); + MArray m (sz, 1); if (! is.read (reinterpret_cast (m.fortran_vec ()), m.byte_size ())) return false; diff --git a/src/ov-struct.cc b/src/ov-struct.cc --- a/src/ov-struct.cc +++ b/src/ov-struct.cc @@ -65,7 +65,7 @@ if (p != map.end ()) retval = map.contents (p); else if (auto_add) - retval = (numel () == 0) ? Cell (dim_vector (1)) : Cell (dims ()); + retval = (numel () == 0) ? Cell (dim_vector (1, 1)) : Cell (dims ()); else error ("structure has no member `%s'", nm.c_str ()); @@ -1133,8 +1133,8 @@ Cell c_value (value_dv); - Array value_idx (value_dv.length (), 0); - Array c_idx (c_dv_length, 0); + Array value_idx (value_dv.length (), 1, 0); + Array c_idx (c_dv_length, 1, 0); for (octave_idx_type j = 0; j < value_dv.numel (); j++) { diff --git a/src/ov-typeinfo.cc b/src/ov-typeinfo.cc --- a/src/ov-typeinfo.cc +++ b/src/ov-typeinfo.cc @@ -193,9 +193,9 @@ { len *= 2; - types.resize (len, std::string ()); + types.resize (len, 1, std::string ()); - vals.resize (len, octave_value ()); + vals.resize (len, 1, octave_value ()); unary_ops.resize (static_cast (octave_value::num_unary_ops), len, 0); diff --git a/src/ov-typeinfo.h b/src/ov-typeinfo.h --- a/src/ov-typeinfo.h +++ b/src/ov-typeinfo.h @@ -194,12 +194,12 @@ protected: octave_value_typeinfo (void) - : num_types (0), types (init_tab_sz, std::string ()), - vals (init_tab_sz), - unary_class_ops (octave_value::num_unary_ops, 0), + : num_types (0), types (init_tab_sz, 1, std::string ()), + vals (init_tab_sz, 1), + unary_class_ops (octave_value::num_unary_ops, 1, 0), unary_ops (octave_value::num_unary_ops, init_tab_sz, 0), non_const_unary_ops (octave_value::num_unary_ops, init_tab_sz, 0), - binary_class_ops (octave_value::num_binary_ops, 0), + binary_class_ops (octave_value::num_binary_ops, 1, 0), binary_ops (octave_value::num_binary_ops, init_tab_sz, init_tab_sz, 0), cat_ops (init_tab_sz, init_tab_sz, 0), assign_ops (octave_value::num_assign_ops, init_tab_sz, init_tab_sz, 0), diff --git a/src/ov.cc b/src/ov.cc --- a/src/ov.cc +++ b/src/ov.cc @@ -1490,7 +1490,7 @@ if (!force_vector_conversion) gripe_implicit_conversion ("Octave:array-as-vector", my_type.c_str (), wanted_type.c_str ()); - retval = dim_vector (nel); + retval = dim_vector (nel, 1); } return retval; diff --git a/src/pr-output.cc b/src/pr-output.cc --- a/src/pr-output.cc +++ b/src/pr-output.cc @@ -1849,7 +1849,7 @@ \ dim_vector dims = nda.dims (); \ \ - Array ra_idx (ndims, 0); \ + Array ra_idx (ndims, 1, 0); \ \ octave_idx_type m = 1; \ \ @@ -1884,7 +1884,7 @@ nm += buf.str (); \ } \ \ - Array idx (ndims); \ + Array idx (ndims, 1); \ \ idx(0) = idx_vector (':'); \ idx(1) = idx_vector (':'); \ @@ -2685,7 +2685,7 @@ dim_vector dims = nda.dims (); - Array ra_idx (ndims, 0); + Array ra_idx (ndims, 1, 0); octave_idx_type m = 1; @@ -2718,7 +2718,7 @@ nm += buf.str (); } - Array idx (ndims); + Array idx (ndims, 1); idx(0) = idx_vector (':'); idx(1) = idx_vector (':'); @@ -2950,7 +2950,7 @@ { int ndims = nda.ndims (); - Array ra_idx (ndims, 0); + Array ra_idx (ndims, 1, 0); dim_vector dims = nda.dims (); @@ -2985,7 +2985,7 @@ os << nm << " =\n\n"; } - Array idx (ndims); + Array idx (ndims, 1); idx(0) = idx_vector (':'); idx(1) = idx_vector (':'); @@ -3021,7 +3021,7 @@ dim_vector dims = nda.dims (); - Array ra_idx (ndims, 0); + Array ra_idx (ndims, 1, 0); octave_idx_type m = 1; @@ -3090,7 +3090,7 @@ os << nm << " =\n\n"; } - Array idx (ndims); + Array idx (ndims, 1); idx(0) = idx_vector (':'); idx(1) = idx_vector (':'); diff --git a/src/pt-mat.cc b/src/pt-mat.cc --- a/src/pt-mat.cc +++ b/src/pt-mat.cc @@ -1008,7 +1008,7 @@ // insert them in the result matrix. int dv_len = dv.length (); - Array ra_idx (dv_len > 1 ? dv_len : 2, 0); + Array ra_idx (dv_len > 1 ? dv_len : 2, 1, 0); for (tm_const::iterator p = tmp.begin (); p != tmp.end (); p++) { diff --git a/src/strfns.cc b/src/strfns.cc --- a/src/strfns.cc +++ b/src/strfns.cc @@ -354,7 +354,7 @@ const Cell cell = cell_val.cell_value (); const string_vector str = str_val.all_strings (); - octave_idx_type r = str.rows (); + octave_idx_type r = str.length (); if (r == 0 || r == 1) { diff --git a/src/txt-eng-ft.cc b/src/txt-eng-ft.cc --- a/src/txt-eng-ft.cc +++ b/src/txt-eng-ft.cc @@ -400,13 +400,13 @@ break; case ROTATION_90: { - Array perm (3); + Array perm (3, 1); perm(0) = 0; perm(1) = 2; perm(2) = 1; pixels = pixels.permute (perm); - Array idx (3); + Array idx (3, 1); idx(0) = idx_vector (':'); idx(1) = idx_vector (pixels.dim2()-1, -1, -1); idx(2) = idx_vector (':'); @@ -415,7 +415,7 @@ break; case ROTATION_180: { - Array idx (3); + Array idx (3, 1); idx(0) = idx_vector (':'); idx(1) = idx_vector (pixels.dim2()-1, -1, -1); idx(2)= idx_vector (pixels.dim3()-1, -1, -1); @@ -424,13 +424,13 @@ break; case ROTATION_270: { - Array perm (3); + Array perm (3, 1); perm(0) = 0; perm(1) = 2; perm(2) = 1; pixels = pixels.permute (perm); - Array idx (3); + Array idx (3, 1); idx(0) = idx_vector (':'); idx(1) = idx_vector (':'); idx(2) = idx_vector (pixels.dim3()-1, -1, -1); diff --git a/src/variables.cc b/src/variables.cc --- a/src/variables.cc +++ b/src/variables.cc @@ -913,7 +913,7 @@ Matrix sz = tmp.size (); - dim_vector dv (sz.numel ()); + dim_vector dv = dim_vector::alloc (sz.numel ()); for (octave_idx_type i = 0; i < dv.length (); i++) dv(i) = sz(i);