# HG changeset patch # User Jaroslav Hajek # Date 1267182348 -3600 # Node ID 96ed7c629bbd50982141675fc6df837cfeb63506 # Parent a0728e81ed25e5ad1878d11137b0ae4bd52926ce remove dangerous pointer-acquiring Array ctors diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/Array.h --- a/liboctave/Array.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/Array.h Fri Feb 26 12:05:48 2010 +0100 @@ -61,11 +61,17 @@ octave_idx_type len; int count; - ArrayRep (T *d, octave_idx_type l, bool copy = false) - : data (copy ? no_ctor_new (l) : d), len (l), count (1) + ArrayRep (T *d, octave_idx_type l) + : data (no_ctor_new (l)), len (l), count (1) { - if (copy) - copy_or_memcpy (l, d, data); + copy_or_memcpy (l, d, data); + } + + template + ArrayRep (U *d, octave_idx_type l) + : data (no_ctor_new (l)), len (l), count (1) + { + std::copy (d, d+l, data); } ArrayRep (void) : data (0), len (0), count (1) { } @@ -104,7 +110,7 @@ if (rep->count > 1) { --rep->count; - rep = new ArrayRep (slice_data, slice_len, true); + rep = new ArrayRep (slice_data, slice_len); slice_data = rep->data; } } @@ -132,22 +138,6 @@ T* slice_data; octave_idx_type slice_len; - 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; - } - - Array (T *d, const dim_vector& dv) - : rep (new typename Array::ArrayRep (d, dv.numel ())), - dimensions (dv) - { - slice_data = rep->data; - slice_len = rep->len; - dimensions.chop_trailing_singletons (); - } - // slice constructor Array (const Array& a, const dim_vector& dv, octave_idx_type l, octave_idx_type u) @@ -169,18 +159,6 @@ return nr; } - template - T * - coerce (const U *a, octave_idx_type len) - { - T *retval = no_ctor_new (len); - - for (octave_idx_type i = 0; i < len; i++) - retval[i] = T (a[i]); - - return retval; - } - public: // Empty ctor (0x0). @@ -249,7 +227,7 @@ // Type conversion case. template Array (const Array& a) - : rep (new typename Array::ArrayRep (coerce (a.data (), a.length ()), a.length ())), + : rep (new typename Array::ArrayRep (a.data (), a.length ())), dimensions (a.dims ()) { slice_data = rep->data; @@ -616,7 +594,7 @@ { if (rep->count == 1 && slice_len != rep->len) { - ArrayRep *new_rep = new ArrayRep (slice_data, slice_len, true); + ArrayRep *new_rep = new ArrayRep (slice_data, slice_len); delete rep; rep = new_rep; slice_data = rep->data; diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/Array3.h --- a/liboctave/Array3.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/Array3.h Fri Feb 26 12:05:48 2010 +0100 @@ -39,10 +39,6 @@ class Array3 : public Array { -protected: - - Array3 (T *d, octave_idx_type r, octave_idx_type c, octave_idx_type p) : Array (d, dim_vector (r, c, p)) { } - public: Array3 (void) : Array (dim_vector (0, 0, 0)) { } diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/CColVector.h --- a/liboctave/CColVector.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/CColVector.h Fri Feb 26 12:05:48 2010 +0100 @@ -134,9 +134,6 @@ void clear (octave_idx_type n) { Array::clear (n, 1); } -private: - - ComplexColumnVector (Complex *d, octave_idx_type l) : MArray (d, l, 1) { } }; MARRAY_FORWARD_DEFS (MArray, ComplexColumnVector, Complex) diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/CDiagMatrix.h --- a/liboctave/CDiagMatrix.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/CDiagMatrix.h Fri Feb 26 12:05:48 2010 +0100 @@ -131,10 +131,6 @@ friend std::ostream& operator << (std::ostream& os, const ComplexDiagMatrix& a); -private: - - ComplexDiagMatrix (Complex *d, octave_idx_type nr, octave_idx_type nc) - : MDiagArray2 (d, nr, nc) { } }; OCTAVE_API ComplexDiagMatrix conj (const ComplexDiagMatrix& a); diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/CMatrix.h --- a/liboctave/CMatrix.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/CMatrix.h Fri Feb 26 12:05:48 2010 +0100 @@ -373,9 +373,6 @@ static Complex resize_fill_value (void) { return Complex (0.0, 0.0); } -private: - - ComplexMatrix (Complex *d, octave_idx_type r, octave_idx_type c) : MArray (d, r, c) { } }; extern OCTAVE_API ComplexMatrix conj (const ComplexMatrix& a); diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/CNDArray.h --- a/liboctave/CNDArray.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/CNDArray.h Fri Feb 26 12:05:48 2010 +0100 @@ -148,10 +148,6 @@ return *this; } -private: - - ComplexNDArray (Complex *d, const dim_vector& dv) - : MArray (d, dv) { } }; extern OCTAVE_API ComplexNDArray conj (const ComplexNDArray& a); diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/CRowVector.h --- a/liboctave/CRowVector.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/CRowVector.h Fri Feb 26 12:05:48 2010 +0100 @@ -114,9 +114,6 @@ void clear (octave_idx_type n) { Array::clear (1, n); } -private: - - ComplexRowVector (Complex *d, octave_idx_type l) : MArray (d, 1, l) { } }; // row vector by column vector -> scalar diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/ChangeLog --- a/liboctave/ChangeLog Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/ChangeLog Fri Feb 26 12:05:48 2010 +0100 @@ -1,3 +1,41 @@ +2010-02-26 Jaroslav Hajek + + * Array.h (Array::ArrayRep): Simplify copy constructor. Add + conversion constructor. + (Array): Remove pointer acquiring ctors. + (Array::maybe_economize): Update. + (Array::make_unique): Update. + * Array.cc (Array::fill): Update. + + * MArray.h (MArray::MArray (T *, ...)): Remove. + * DiagArray2.h (DiagArray2::DiagArray2 (T *, ...)): Remove. + * MDiagArray2.h (MDiagArray2::MDiagArray2 (T *, ...)): Remove. + * Array3.h (Array3::Array3 (T *, ...)): Remove. + + * dColVector.h (ColumnVector::ColumnVector (T *, ...)): Remove. + * fColVector.h (FloatColumnVector::FloatColumnVector (T *, ...)): Remove. + * CColVector.h (ComplexColumnVector::ComplexColumnVector (T *, ...)): Remove. + * fCColVector.h (FloatComplexColumnVector::FloatComplexColumnVector (T *, ...)): Remove. + + * dRowVector.h (RowVector::RowVector (T *, ...)): Remove. + * fRowVector.h (FloatRowVector::FloatRowVector (T *, ...)): Remove. + * CRowVector.h (ComplexRowVector::ComplexRowVector (T *, ...)): Remove. + * fCRowVector.h (FloatComplexRowVector::FloatComplexRowVector (T *, ...)): Remove. + + * dMatrix.h (Matrix::Matrix (T *, ...)): Remove. + * fMatrix.h (FloatMatrix::FloatMatrix (T *, ...)): Remove. + * CMatrix.h (ComplexMatrix::ComplexMatrix (T *, ...)): Remove. + * fCMatrix.h (FloatComplexMatrix::FloatComplexMatrix (T *, ...)): Remove. + * boolMatrix.h (boolMatrix::boolMatrix (T *, ...)): Remove. + * chMatrix.h (charMatrix::charMatrix (T *, ...)): Remove. + + * dNDArray.h (NDArray::NDArray (T *, ...)): Remove. + * fNDArray.h (FloatNDArray::FloatNDArray (T *, ...)): Remove. + * CNDArray.h (ComplexNDArray::ComplexNDArray (T *, ...)): Remove. + * fCNDArray.h (FloatComplexNDArray::FloatComplexNDArray (T *, ...)): Remove. + * boolNDArray.h (boolNDArray::boolNDArray (T *, ...)): Remove. + * chNDArray.h (charNDArray::charNDArray (T *, ...)): Remove. + 2010-02-26 Jaroslav Hajek * DiagArray2.h (DiagArray2): Clean up ctors. Remove Proxy class. diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/DiagArray2.h --- a/liboctave/DiagArray2.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/DiagArray2.h Fri Feb 26 12:05:48 2010 +0100 @@ -41,9 +41,6 @@ protected: octave_idx_type d1, d2; - DiagArray2 (T *d, octave_idx_type r, octave_idx_type c) - : Array (d, std::min (r, c), 1), d1 (r), d2 (c) { } - public: using Array::element_type; diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/MArray.h --- a/liboctave/MArray.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/MArray.h Fri Feb 26 12:05:48 2010 +0100 @@ -39,11 +39,6 @@ class MArray : public Array { -protected: - - 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 () {} diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/MDiagArray2.h --- a/liboctave/MDiagArray2.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/MDiagArray2.h Fri Feb 26 12:05:48 2010 +0100 @@ -40,10 +40,6 @@ class MDiagArray2 : public DiagArray2 { -protected: - - MDiagArray2 (T *d, octave_idx_type r, octave_idx_type c) : DiagArray2 (d, r, c) { } - public: MDiagArray2 (void) : DiagArray2 () { } diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/boolMatrix.h --- a/liboctave/boolMatrix.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/boolMatrix.h Fri Feb 26 12:05:48 2010 +0100 @@ -78,9 +78,6 @@ static bool resize_fill_value (void) { return false; } -private: - - boolMatrix (bool *b, octave_idx_type r, octave_idx_type c) : Array (b, r, c) { } }; MM_BOOL_OP_DECLS (boolMatrix, boolMatrix, OCTAVE_API) diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/boolNDArray.h --- a/liboctave/boolNDArray.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/boolNDArray.h Fri Feb 26 12:05:48 2010 +0100 @@ -103,9 +103,6 @@ boolNDArray diag (octave_idx_type k = 0) const; -private: - - boolNDArray (bool *d, dim_vector& dv) : Array (d, dv) { } }; NDND_BOOL_OP_DECLS (boolNDArray, boolNDArray, OCTAVE_API) diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/chMatrix.h --- a/liboctave/chMatrix.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/chMatrix.h Fri Feb 26 12:05:48 2010 +0100 @@ -88,9 +88,6 @@ static char resize_fill_value (void) { return '\0'; } -private: - - charMatrix (char *ch, octave_idx_type r, octave_idx_type c) : Array (ch, r, c) { } }; MS_CMP_OP_DECLS (charMatrix, char, OCTAVE_API) diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/chNDArray.h --- a/liboctave/chNDArray.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/chNDArray.h Fri Feb 26 12:05:48 2010 +0100 @@ -96,9 +96,6 @@ charNDArray diag (octave_idx_type k = 0) const; -private: - - charNDArray (char *d, dim_vector& dv) : Array (d, dv) { } }; NDS_CMP_OP_DECLS (charNDArray, char, OCTAVE_API) diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/dColVector.h --- a/liboctave/dColVector.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/dColVector.h Fri Feb 26 12:05:48 2010 +0100 @@ -103,9 +103,6 @@ void clear (octave_idx_type n) { Array::clear (n, 1); } -private: - - ColumnVector (double *d, octave_idx_type l) : MArray (d, l, 1) { } }; // Publish externally used friend functions. diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/dDiagMatrix.h --- a/liboctave/dDiagMatrix.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/dDiagMatrix.h Fri Feb 26 12:05:48 2010 +0100 @@ -109,9 +109,6 @@ friend OCTAVE_API std::ostream& operator << (std::ostream& os, const DiagMatrix& a); -private: - - DiagMatrix (double *d, octave_idx_type nr, octave_idx_type nc) : MDiagArray2 (d, nr, nc) { } }; OCTAVE_API DiagMatrix real (const ComplexDiagMatrix& a); diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/dMatrix.h --- a/liboctave/dMatrix.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/dMatrix.h Fri Feb 26 12:05:48 2010 +0100 @@ -326,9 +326,6 @@ static double resize_fill_value (void) { return 0; } -private: - - Matrix (double *d, octave_idx_type r, octave_idx_type c) : MArray (d, r, c) { } }; // Publish externally used friend functions. diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/dNDArray.h --- a/liboctave/dNDArray.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/dNDArray.h Fri Feb 26 12:05:48 2010 +0100 @@ -160,9 +160,6 @@ return *this; } -private: - - NDArray (double *d, const dim_vector& dv) : MArray (d, dv) { } }; // Publish externally used friend functions. diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/dRowVector.h --- a/liboctave/dRowVector.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/dRowVector.h Fri Feb 26 12:05:48 2010 +0100 @@ -96,9 +96,6 @@ void clear (octave_idx_type n) { Array::clear (1, n); } -private: - - RowVector (double *d, octave_idx_type l) : MArray (d, 1, l) { } }; // row vector by column vector -> scalar diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/fCColVector.h --- a/liboctave/fCColVector.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/fCColVector.h Fri Feb 26 12:05:48 2010 +0100 @@ -134,9 +134,6 @@ void clear (octave_idx_type n) { Array::clear (n, 1); } -private: - - FloatComplexColumnVector (FloatComplex *d, octave_idx_type l) : MArray (d, l, 1) { } }; MARRAY_FORWARD_DEFS (MArray, FloatComplexColumnVector, FloatComplex) diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/fCDiagMatrix.h --- a/liboctave/fCDiagMatrix.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/fCDiagMatrix.h Fri Feb 26 12:05:48 2010 +0100 @@ -131,10 +131,6 @@ friend std::ostream& operator << (std::ostream& os, const FloatComplexDiagMatrix& a); -private: - - FloatComplexDiagMatrix (FloatComplex *d, octave_idx_type nr, octave_idx_type nc) - : MDiagArray2 (d, nr, nc) { } }; OCTAVE_API FloatComplexDiagMatrix conj (const FloatComplexDiagMatrix& a); diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/fCMatrix.h --- a/liboctave/fCMatrix.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/fCMatrix.h Fri Feb 26 12:05:48 2010 +0100 @@ -373,9 +373,6 @@ static FloatComplex resize_fill_value (void) { return FloatComplex (0.0, 0.0); } -private: - - FloatComplexMatrix (FloatComplex *d, octave_idx_type r, octave_idx_type c) : MArray (d, r, c) { } }; extern OCTAVE_API FloatComplexMatrix conj (const FloatComplexMatrix& a); diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/fCNDArray.h --- a/liboctave/fCNDArray.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/fCNDArray.h Fri Feb 26 12:05:48 2010 +0100 @@ -148,10 +148,6 @@ return *this; } -private: - - FloatComplexNDArray (FloatComplex *d, const dim_vector& dv) - : MArray (d, dv) { } }; extern OCTAVE_API FloatComplexNDArray conj (const FloatComplexNDArray& a); diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/fCRowVector.h --- a/liboctave/fCRowVector.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/fCRowVector.h Fri Feb 26 12:05:48 2010 +0100 @@ -115,9 +115,6 @@ void clear (octave_idx_type n) { Array::clear (1, n); } -private: - - FloatComplexRowVector (FloatComplex *d, octave_idx_type l) : MArray (d, 1, l) { } }; // row vector by column vector -> scalar diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/fColVector.h --- a/liboctave/fColVector.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/fColVector.h Fri Feb 26 12:05:48 2010 +0100 @@ -103,9 +103,6 @@ void clear (octave_idx_type n) { Array::clear (n, 1); } -private: - - FloatColumnVector (float *d, octave_idx_type l) : MArray (d, l, 1) { } }; // Publish externally used friend functions. diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/fDiagMatrix.h --- a/liboctave/fDiagMatrix.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/fDiagMatrix.h Fri Feb 26 12:05:48 2010 +0100 @@ -109,9 +109,6 @@ friend OCTAVE_API std::ostream& operator << (std::ostream& os, const FloatDiagMatrix& a); -private: - - FloatDiagMatrix (float *d, octave_idx_type nr, octave_idx_type nc) : MDiagArray2 (d, nr, nc) { } }; OCTAVE_API FloatDiagMatrix real (const FloatComplexDiagMatrix& a); diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/fMatrix.h --- a/liboctave/fMatrix.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/fMatrix.h Fri Feb 26 12:05:48 2010 +0100 @@ -326,9 +326,6 @@ static float resize_fill_value (void) { return 0; } -private: - - FloatMatrix (float *d, octave_idx_type r, octave_idx_type c) : MArray (d, r, c) { } }; // Publish externally used friend functions. diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/fNDArray.h --- a/liboctave/fNDArray.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/fNDArray.h Fri Feb 26 12:05:48 2010 +0100 @@ -157,9 +157,6 @@ return *this; } -private: - - FloatNDArray (float *d, const dim_vector& dv) : MArray (d, dv) { } }; // Publish externally used friend functions. diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/fRowVector.h --- a/liboctave/fRowVector.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/fRowVector.h Fri Feb 26 12:05:48 2010 +0100 @@ -96,9 +96,6 @@ void clear (octave_idx_type n) { Array::clear (1, n); } -private: - - FloatRowVector (float *d, octave_idx_type l) : MArray (d, 1, l) { } }; // row vector by column vector -> scalar diff -r a0728e81ed25 -r 96ed7c629bbd liboctave/intNDArray.h --- a/liboctave/intNDArray.h Fri Feb 26 11:44:38 2010 +0100 +++ b/liboctave/intNDArray.h Fri Feb 26 12:05:48 2010 +0100 @@ -116,9 +116,6 @@ static T resize_fill_value (void) { return 0; } -protected: - - intNDArray (T *d, dim_vector& dv) : MArray (d, dv) { } }; // i/o