Mercurial > hg > octave-nkf
changeset 10364:96ed7c629bbd
remove dangerous pointer-acquiring Array ctors
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Fri, 26 Feb 2010 12:05:48 +0100 |
parents | a0728e81ed25 |
children | 532802559f39 |
files | liboctave/Array.h liboctave/Array3.h liboctave/CColVector.h liboctave/CDiagMatrix.h liboctave/CMatrix.h liboctave/CNDArray.h liboctave/CRowVector.h liboctave/ChangeLog liboctave/DiagArray2.h liboctave/MArray.h liboctave/MDiagArray2.h liboctave/boolMatrix.h liboctave/boolNDArray.h liboctave/chMatrix.h liboctave/chNDArray.h liboctave/dColVector.h liboctave/dDiagMatrix.h liboctave/dMatrix.h liboctave/dNDArray.h liboctave/dRowVector.h liboctave/fCColVector.h liboctave/fCDiagMatrix.h liboctave/fCMatrix.h liboctave/fCNDArray.h liboctave/fCRowVector.h liboctave/fColVector.h liboctave/fDiagMatrix.h liboctave/fMatrix.h liboctave/fNDArray.h liboctave/fRowVector.h liboctave/intNDArray.h |
diffstat | 31 files changed, 51 insertions(+), 130 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/Array.h +++ b/liboctave/Array.h @@ -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<T> (l) : d), len (l), count (1) + ArrayRep (T *d, octave_idx_type l) + : data (no_ctor_new<T> (l)), len (l), count (1) { - if (copy) - copy_or_memcpy (l, d, data); + copy_or_memcpy (l, d, data); + } + + template <class U> + ArrayRep (U *d, octave_idx_type l) + : data (no_ctor_new<T> (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<T>::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<T>::ArrayRep (d, dv.numel ())), - dimensions (dv) - { - slice_data = rep->data; - slice_len = rep->len; - dimensions.chop_trailing_singletons (); - } - // slice constructor Array (const Array<T>& a, const dim_vector& dv, octave_idx_type l, octave_idx_type u) @@ -169,18 +159,6 @@ return nr; } - template <class U> - T * - coerce (const U *a, octave_idx_type len) - { - T *retval = no_ctor_new<T> (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 <class U> Array (const Array<U>& a) - : rep (new typename Array<T>::ArrayRep (coerce (a.data (), a.length ()), a.length ())), + : rep (new typename Array<T>::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;
--- a/liboctave/Array3.h +++ b/liboctave/Array3.h @@ -39,10 +39,6 @@ class Array3 : public Array<T> { -protected: - - Array3 (T *d, octave_idx_type r, octave_idx_type c, octave_idx_type p) : Array<T> (d, dim_vector (r, c, p)) { } - public: Array3 (void) : Array<T> (dim_vector (0, 0, 0)) { }
--- a/liboctave/CColVector.h +++ b/liboctave/CColVector.h @@ -134,9 +134,6 @@ void clear (octave_idx_type n) { Array<Complex>::clear (n, 1); } -private: - - ComplexColumnVector (Complex *d, octave_idx_type l) : MArray<Complex> (d, l, 1) { } }; MARRAY_FORWARD_DEFS (MArray, ComplexColumnVector, Complex)
--- a/liboctave/CDiagMatrix.h +++ b/liboctave/CDiagMatrix.h @@ -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<Complex> (d, nr, nc) { } }; OCTAVE_API ComplexDiagMatrix conj (const ComplexDiagMatrix& a);
--- a/liboctave/CMatrix.h +++ b/liboctave/CMatrix.h @@ -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<Complex> (d, r, c) { } }; extern OCTAVE_API ComplexMatrix conj (const ComplexMatrix& a);
--- a/liboctave/CNDArray.h +++ b/liboctave/CNDArray.h @@ -148,10 +148,6 @@ return *this; } -private: - - ComplexNDArray (Complex *d, const dim_vector& dv) - : MArray<Complex> (d, dv) { } }; extern OCTAVE_API ComplexNDArray conj (const ComplexNDArray& a);
--- a/liboctave/CRowVector.h +++ b/liboctave/CRowVector.h @@ -114,9 +114,6 @@ void clear (octave_idx_type n) { Array<Complex>::clear (1, n); } -private: - - ComplexRowVector (Complex *d, octave_idx_type l) : MArray<Complex> (d, 1, l) { } }; // row vector by column vector -> scalar
--- a/liboctave/ChangeLog +++ b/liboctave/ChangeLog @@ -1,3 +1,41 @@ +2010-02-26 Jaroslav Hajek <highegg@gmail.com> + + * Array.h (Array<T>::ArrayRep): Simplify copy constructor. Add + conversion constructor. + (Array<T>): Remove pointer acquiring ctors. + (Array<T>::maybe_economize): Update. + (Array<T>::make_unique): Update. + * Array.cc (Array<T>::fill): Update. + + * MArray.h (MArray<T>::MArray<T> (T *, ...)): Remove. + * DiagArray2.h (DiagArray2<T>::DiagArray2<T> (T *, ...)): Remove. + * MDiagArray2.h (MDiagArray2<T>::MDiagArray2<T> (T *, ...)): Remove. + * Array3.h (Array3<T>::Array3<T> (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 <highegg@gmail.com> * DiagArray2.h (DiagArray2): Clean up ctors. Remove Proxy class.
--- a/liboctave/DiagArray2.h +++ b/liboctave/DiagArray2.h @@ -41,9 +41,6 @@ protected: octave_idx_type d1, d2; - DiagArray2 (T *d, octave_idx_type r, octave_idx_type c) - : Array<T> (d, std::min (r, c), 1), d1 (r), d2 (c) { } - public: using Array<T>::element_type;
--- a/liboctave/MArray.h +++ b/liboctave/MArray.h @@ -39,11 +39,6 @@ class MArray : public Array<T> { -protected: - - MArray (T *d, octave_idx_type m, octave_idx_type n) : Array<T> (d, m, n) { } - MArray (T *d, const dim_vector& dv) : Array<T> (d, dv) { } - public: MArray (void) : Array<T> () {}
--- a/liboctave/MDiagArray2.h +++ b/liboctave/MDiagArray2.h @@ -40,10 +40,6 @@ class MDiagArray2 : public DiagArray2<T> { -protected: - - MDiagArray2 (T *d, octave_idx_type r, octave_idx_type c) : DiagArray2<T> (d, r, c) { } - public: MDiagArray2 (void) : DiagArray2<T> () { }
--- a/liboctave/boolMatrix.h +++ b/liboctave/boolMatrix.h @@ -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<bool> (b, r, c) { } }; MM_BOOL_OP_DECLS (boolMatrix, boolMatrix, OCTAVE_API)
--- a/liboctave/boolNDArray.h +++ b/liboctave/boolNDArray.h @@ -103,9 +103,6 @@ boolNDArray diag (octave_idx_type k = 0) const; -private: - - boolNDArray (bool *d, dim_vector& dv) : Array<bool> (d, dv) { } }; NDND_BOOL_OP_DECLS (boolNDArray, boolNDArray, OCTAVE_API)
--- a/liboctave/chMatrix.h +++ b/liboctave/chMatrix.h @@ -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<char> (ch, r, c) { } }; MS_CMP_OP_DECLS (charMatrix, char, OCTAVE_API)
--- a/liboctave/chNDArray.h +++ b/liboctave/chNDArray.h @@ -96,9 +96,6 @@ charNDArray diag (octave_idx_type k = 0) const; -private: - - charNDArray (char *d, dim_vector& dv) : Array<char> (d, dv) { } }; NDS_CMP_OP_DECLS (charNDArray, char, OCTAVE_API)
--- a/liboctave/dColVector.h +++ b/liboctave/dColVector.h @@ -103,9 +103,6 @@ void clear (octave_idx_type n) { Array<double>::clear (n, 1); } -private: - - ColumnVector (double *d, octave_idx_type l) : MArray<double> (d, l, 1) { } }; // Publish externally used friend functions.
--- a/liboctave/dDiagMatrix.h +++ b/liboctave/dDiagMatrix.h @@ -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<double> (d, nr, nc) { } }; OCTAVE_API DiagMatrix real (const ComplexDiagMatrix& a);
--- a/liboctave/dMatrix.h +++ b/liboctave/dMatrix.h @@ -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<double> (d, r, c) { } }; // Publish externally used friend functions.
--- a/liboctave/dNDArray.h +++ b/liboctave/dNDArray.h @@ -160,9 +160,6 @@ return *this; } -private: - - NDArray (double *d, const dim_vector& dv) : MArray<double> (d, dv) { } }; // Publish externally used friend functions.
--- a/liboctave/dRowVector.h +++ b/liboctave/dRowVector.h @@ -96,9 +96,6 @@ void clear (octave_idx_type n) { Array<double>::clear (1, n); } -private: - - RowVector (double *d, octave_idx_type l) : MArray<double> (d, 1, l) { } }; // row vector by column vector -> scalar
--- a/liboctave/fCColVector.h +++ b/liboctave/fCColVector.h @@ -134,9 +134,6 @@ void clear (octave_idx_type n) { Array<FloatComplex>::clear (n, 1); } -private: - - FloatComplexColumnVector (FloatComplex *d, octave_idx_type l) : MArray<FloatComplex> (d, l, 1) { } }; MARRAY_FORWARD_DEFS (MArray, FloatComplexColumnVector, FloatComplex)
--- a/liboctave/fCDiagMatrix.h +++ b/liboctave/fCDiagMatrix.h @@ -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<FloatComplex> (d, nr, nc) { } }; OCTAVE_API FloatComplexDiagMatrix conj (const FloatComplexDiagMatrix& a);
--- a/liboctave/fCMatrix.h +++ b/liboctave/fCMatrix.h @@ -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<FloatComplex> (d, r, c) { } }; extern OCTAVE_API FloatComplexMatrix conj (const FloatComplexMatrix& a);
--- a/liboctave/fCNDArray.h +++ b/liboctave/fCNDArray.h @@ -148,10 +148,6 @@ return *this; } -private: - - FloatComplexNDArray (FloatComplex *d, const dim_vector& dv) - : MArray<FloatComplex> (d, dv) { } }; extern OCTAVE_API FloatComplexNDArray conj (const FloatComplexNDArray& a);
--- a/liboctave/fCRowVector.h +++ b/liboctave/fCRowVector.h @@ -115,9 +115,6 @@ void clear (octave_idx_type n) { Array<FloatComplex>::clear (1, n); } -private: - - FloatComplexRowVector (FloatComplex *d, octave_idx_type l) : MArray<FloatComplex> (d, 1, l) { } }; // row vector by column vector -> scalar
--- a/liboctave/fColVector.h +++ b/liboctave/fColVector.h @@ -103,9 +103,6 @@ void clear (octave_idx_type n) { Array<float>::clear (n, 1); } -private: - - FloatColumnVector (float *d, octave_idx_type l) : MArray<float> (d, l, 1) { } }; // Publish externally used friend functions.
--- a/liboctave/fDiagMatrix.h +++ b/liboctave/fDiagMatrix.h @@ -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<float> (d, nr, nc) { } }; OCTAVE_API FloatDiagMatrix real (const FloatComplexDiagMatrix& a);
--- a/liboctave/fMatrix.h +++ b/liboctave/fMatrix.h @@ -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<float> (d, r, c) { } }; // Publish externally used friend functions.
--- a/liboctave/fNDArray.h +++ b/liboctave/fNDArray.h @@ -157,9 +157,6 @@ return *this; } -private: - - FloatNDArray (float *d, const dim_vector& dv) : MArray<float> (d, dv) { } }; // Publish externally used friend functions.