[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(corrected): derive {, Cmplex}{Col, Row}Vector from MArray2 instead of M
From: |
John W. Eaton |
Subject: |
(corrected): derive {, Cmplex}{Col, Row}Vector from MArray2 instead of MArray? |
Date: |
Mon, 28 Apr 2008 15:55:32 -0400 |
On 28-Apr-2008, John W. Eaton wrote:
| Does anyone object to the following change? It means that the vector
| objects in liboctave will explicitly have two dimensions.
I guess it is just not my day. The last message had an old version of
the diffs in the attachment. Here is the corrected version.
jwe
diff --git a/liboctave/CColVector.cc b/liboctave/CColVector.cc
--- a/liboctave/CColVector.cc
+++ b/liboctave/CColVector.cc
@@ -51,7 +51,7 @@ extern "C"
// Complex Column Vector class
ComplexColumnVector::ComplexColumnVector (const ColumnVector& a)
- : MArray<Complex> (a.length ())
+ : MArray2<Complex> (a.length (), 1)
{
for (octave_idx_type i = 0; i < length (); i++)
elem (i) = a.elem (i);
@@ -460,13 +460,13 @@ ColumnVector
ColumnVector
ComplexColumnVector::map (dmapper fcn) const
{
- return MArray<Complex>::map<double> (func_ptr (fcn));
+ return MArray2<Complex>::map<double> (func_ptr (fcn));
}
ComplexColumnVector
ComplexColumnVector::map (cmapper fcn) const
{
- return MArray<Complex>::map<Complex> (func_ptr (fcn));
+ return MArray2<Complex>::map<Complex> (func_ptr (fcn));
}
Complex
diff --git a/liboctave/CColVector.h b/liboctave/CColVector.h
--- a/liboctave/CColVector.h
+++ b/liboctave/CColVector.h
@@ -25,36 +25,45 @@ along with Octave; see the file COPYING.
#define octave_ComplexColumnVector_h 1
#include "MArray.h"
+#include "MArray2.h"
#include "mx-defs.h"
class
OCTAVE_API
-ComplexColumnVector : public MArray<Complex>
+ComplexColumnVector : public MArray2<Complex>
{
friend class ComplexMatrix;
friend class ComplexRowVector;
public:
- ComplexColumnVector (void) : MArray<Complex> () { }
+ ComplexColumnVector (void) : MArray2<Complex> () { }
- explicit ComplexColumnVector (octave_idx_type n) : MArray<Complex> (n) { }
+ explicit ComplexColumnVector (octave_idx_type n) : MArray2<Complex> (n, 1) {
}
ComplexColumnVector (octave_idx_type n, const Complex& val)
- : MArray<Complex> (n, val) { }
+ : MArray2<Complex> (n, 1, val) { }
- ComplexColumnVector (const ComplexColumnVector& a) : MArray<Complex> (a) { }
+ ComplexColumnVector (const ComplexColumnVector& a) : MArray2<Complex> (a) { }
- ComplexColumnVector (const MArray<Complex>& a) : MArray<Complex> (a) { }
+ ComplexColumnVector (const MArray<Complex>& a)
+ : MArray2<Complex> (a, a.length (), 1) { }
+
+ ComplexColumnVector (const MArray2<Complex>& a) : MArray2<Complex> (a) { }
explicit ComplexColumnVector (const ColumnVector& a);
ComplexColumnVector& operator = (const ComplexColumnVector& a)
{
- MArray<Complex>::operator = (a);
+ MArray2<Complex>::operator = (a);
return *this;
}
+
+ void resize (octave_idx_type n) { MArray2<Complex>::resize (n, 1); }
+
+ void resize (octave_idx_type n, const Complex& val)
+ { MArray2<Complex>::resize (n, 1, val); }
bool operator == (const ComplexColumnVector& a) const;
bool operator != (const ComplexColumnVector& a) const;
@@ -130,10 +139,10 @@ public:
private:
- ComplexColumnVector (Complex *d, octave_idx_type l) : MArray<Complex> (d, l)
{ }
+ ComplexColumnVector (Complex *d, octave_idx_type n) : MArray2<Complex> (d,
n, 1) { }
};
-MARRAY_FORWARD_DEFS (MArray, ComplexColumnVector, Complex)
+MARRAY_FORWARD_DEFS (MArray2, ComplexColumnVector, Complex)
#endif
diff --git a/liboctave/CRowVector.cc b/liboctave/CRowVector.cc
--- a/liboctave/CRowVector.cc
+++ b/liboctave/CRowVector.cc
@@ -55,7 +55,7 @@ extern "C"
// Complex Row Vector class
ComplexRowVector::ComplexRowVector (const RowVector& a)
- : MArray<Complex> (a.length ())
+ : MArray2<Complex> (1, a.length ())
{
for (octave_idx_type i = 0; i < length (); i++)
elem (i) = a.elem (i);
@@ -370,13 +370,13 @@ RowVector
RowVector
ComplexRowVector::map (dmapper fcn) const
{
- return MArray<Complex>::map<double> (func_ptr (fcn));
+ return MArray2<Complex>::map<double> (func_ptr (fcn));
}
ComplexRowVector
ComplexRowVector::map (cmapper fcn) const
{
- return MArray<Complex>::map<Complex> (func_ptr (fcn));
+ return MArray2<Complex>::map<Complex> (func_ptr (fcn));
}
Complex
diff --git a/liboctave/CRowVector.h b/liboctave/CRowVector.h
--- a/liboctave/CRowVector.h
+++ b/liboctave/CRowVector.h
@@ -25,34 +25,44 @@ along with Octave; see the file COPYING.
#define octave_ComplexRowVector_h 1
#include "MArray.h"
+#include "MArray2.h"
#include "mx-defs.h"
class
OCTAVE_API
-ComplexRowVector : public MArray<Complex>
+ComplexRowVector : public MArray2<Complex>
{
friend class ComplexColumnVector;
public:
- ComplexRowVector (void) : MArray<Complex> () { }
+ ComplexRowVector (void) : MArray2<Complex> () { }
- explicit ComplexRowVector (octave_idx_type n) : MArray<Complex> (n) { }
+ explicit ComplexRowVector (octave_idx_type n) : MArray2<Complex> (1, n) { }
- ComplexRowVector (octave_idx_type n, const Complex& val) : MArray<Complex>
(n, val) { }
+ ComplexRowVector (octave_idx_type n, const Complex& val)
+ : MArray2<Complex> (1, n, val) { }
- ComplexRowVector (const ComplexRowVector& a) : MArray<Complex> (a) { }
+ ComplexRowVector (const ComplexRowVector& a) : MArray2<Complex> (a) { }
- ComplexRowVector (const MArray<Complex>& a) : MArray<Complex> (a) { }
+ ComplexRowVector (const MArray<Complex>& a)
+ : MArray2<Complex> (a, 1, a.length ()) { }
+
+ ComplexRowVector (const MArray2<Complex>& a) : MArray2<Complex> (a) { }
explicit ComplexRowVector (const RowVector& a);
ComplexRowVector& operator = (const ComplexRowVector& a)
{
- MArray<Complex>::operator = (a);
+ MArray2<Complex>::operator = (a);
return *this;
}
+
+ void resize (octave_idx_type n) { MArray2<Complex>::resize (1, n); }
+
+ void resize (octave_idx_type n, const Complex& val)
+ { MArray2<Complex>::resize (1, n, val); }
bool operator == (const ComplexRowVector& a) const;
bool operator != (const ComplexRowVector& a) const;
@@ -112,7 +122,7 @@ public:
private:
- ComplexRowVector (Complex *d, octave_idx_type l) : MArray<Complex> (d, l) { }
+ ComplexRowVector (Complex *d, octave_idx_type n) : MArray2<Complex> (d, 1,
n) { }
};
// row vector by column vector -> scalar
@@ -125,7 +135,7 @@ Complex operator * (const ComplexRowVect
OCTAVE_API ComplexRowVector linspace (const Complex& x1, const Complex& x2,
octave_idx_type n);
-MARRAY_FORWARD_DEFS (MArray, ComplexRowVector, Complex)
+MARRAY_FORWARD_DEFS (MArray2, ComplexRowVector, Complex)
#endif
diff --git a/liboctave/MArray2.h b/liboctave/MArray2.h
--- a/liboctave/MArray2.h
+++ b/liboctave/MArray2.h
@@ -26,6 +26,7 @@ along with Octave; see the file COPYING.
#define octave_MArray2_h 1
#include "Array2.h"
+#include "MArray.h"
// Two dimensional array with math ops.
@@ -58,6 +59,12 @@ public:
MArray2 (const MArray2<T>& a) : Array2<T> (a) { }
MArray2 (const Array2<T>& a) : Array2<T> (a) { }
+
+ MArray2 (const MArray<T>& a, octave_idx_type r, octave_idx_type c)
+ : Array2<T> (a, dim_vector (r, c)) { }
+
+ MArray2 (const Array<T>& a, octave_idx_type r, octave_idx_type c)
+ : Array2<T> (a, dim_vector (r, c)) { }
template <class U>
MArray2 (const Array2<U>& a) : Array2<T> (a) { }
diff --git a/liboctave/dColVector.cc b/liboctave/dColVector.cc
--- a/liboctave/dColVector.cc
+++ b/liboctave/dColVector.cc
@@ -266,13 +266,13 @@ ColumnVector
ColumnVector
ColumnVector::map (dmapper fcn) const
{
- return MArray<double>::map<double> (func_ptr (fcn));
+ return MArray2<double>::map<double> (func_ptr (fcn));
}
ComplexColumnVector
ColumnVector::map (cmapper fcn) const
{
- return MArray<double>::map<Complex> (func_ptr (fcn));
+ return MArray2<double>::map<Complex> (func_ptr (fcn));
}
double
diff --git a/liboctave/dColVector.h b/liboctave/dColVector.h
--- a/liboctave/dColVector.h
+++ b/liboctave/dColVector.h
@@ -25,30 +25,39 @@ along with Octave; see the file COPYING.
#define octave_ColumnVector_h 1
#include "MArray.h"
+#include "MArray2.h"
#include "mx-defs.h"
class
OCTAVE_API
-ColumnVector : public MArray<double>
+ColumnVector : public MArray2<double>
{
public:
- ColumnVector (void) : MArray<double> () { }
+ ColumnVector (void) : MArray2<double> () { }
- explicit ColumnVector (octave_idx_type n) : MArray<double> (n) { }
+ explicit ColumnVector (octave_idx_type n) : MArray2<double> (n, 1) { }
- ColumnVector (octave_idx_type n, double val) : MArray<double> (n, val) { }
+ ColumnVector (octave_idx_type n, double val) : MArray2<double> (n, 1, val) {
}
- ColumnVector (const ColumnVector& a) : MArray<double> (a) { }
+ ColumnVector (const ColumnVector& a) : MArray2<double> (a) { }
- ColumnVector (const MArray<double>& a) : MArray<double> (a) { }
+ ColumnVector (const MArray<double>& a)
+ : MArray2<double> (a, a.length (), 1) { }
+
+ ColumnVector (const MArray2<double>& a) : MArray2<double> (a) { }
ColumnVector& operator = (const ColumnVector& a)
{
- MArray<double>::operator = (a);
+ MArray2<double>::operator = (a);
return *this;
}
+
+ void resize (octave_idx_type n) { MArray2<double>::resize (n, 1); }
+
+ void resize (octave_idx_type n, double val)
+ { MArray2<double>::resize (n, 1, val); }
bool operator == (const ColumnVector& a) const;
bool operator != (const ColumnVector& a) const;
@@ -99,7 +108,7 @@ public:
private:
- ColumnVector (double *d, octave_idx_type l) : MArray<double> (d, l) { }
+ ColumnVector (double *d, octave_idx_type n) : MArray2<double> (d, n, 1) { }
};
// Publish externally used friend functions.
@@ -107,7 +116,7 @@ extern OCTAVE_API ColumnVector real (con
extern OCTAVE_API ColumnVector real (const ComplexColumnVector& a);
extern OCTAVE_API ColumnVector imag (const ComplexColumnVector& a);
-MARRAY_FORWARD_DEFS (MArray, ColumnVector, double)
+MARRAY_FORWARD_DEFS (MArray2, ColumnVector, double)
#endif
diff --git a/liboctave/dRowVector.cc b/liboctave/dRowVector.cc
--- a/liboctave/dRowVector.cc
+++ b/liboctave/dRowVector.cc
@@ -235,13 +235,13 @@ RowVector
RowVector
RowVector::map (dmapper fcn) const
{
- return MArray<double>::map<double> (func_ptr (fcn));
+ return MArray2<double>::map<double> (func_ptr (fcn));
}
ComplexRowVector
RowVector::map (cmapper fcn) const
{
- return MArray<double>::map<Complex> (func_ptr (fcn));
+ return MArray2<double>::map<Complex> (func_ptr (fcn));
}
double
diff --git a/liboctave/dRowVector.h b/liboctave/dRowVector.h
--- a/liboctave/dRowVector.h
+++ b/liboctave/dRowVector.h
@@ -25,30 +25,38 @@ along with Octave; see the file COPYING.
#define octave_RowVector_h 1
#include "MArray.h"
+#include "MArray2.h"
#include "mx-defs.h"
class
OCTAVE_API
-RowVector : public MArray<double>
+RowVector : public MArray2<double>
{
public:
- RowVector (void) : MArray<double> () { }
+ RowVector (void) : MArray2<double> () { }
- explicit RowVector (octave_idx_type n) : MArray<double> (n) { }
+ explicit RowVector (octave_idx_type n) : MArray2<double> (1, n) { }
- RowVector (octave_idx_type n, double val) : MArray<double> (n, val) { }
+ RowVector (octave_idx_type n, double val) : MArray2<double> (1, n, val) { }
- RowVector (const RowVector& a) : MArray<double> (a) { }
+ RowVector (const RowVector& a) : MArray2<double> (a) { }
- RowVector (const MArray<double>& a) : MArray<double> (a) { }
+ RowVector (const MArray<double>& a) : MArray2<double> (a, 1, a.length ()) { }
+
+ RowVector (const MArray2<double>& a) : MArray2<double> (a) { }
RowVector& operator = (const RowVector& a)
{
- MArray<double>::operator = (a);
+ MArray2<double>::operator = (a);
return *this;
}
+
+ void resize (octave_idx_type n) { MArray2<double>::resize (1, n); }
+
+ void resize (octave_idx_type n, double val)
+ { MArray2<double>::resize (1, n, val); }
bool operator == (const RowVector& a) const;
bool operator != (const RowVector& a) const;
@@ -95,7 +103,7 @@ public:
private:
- RowVector (double *d, octave_idx_type l) : MArray<double> (d, l) { }
+ RowVector (double *d, octave_idx_type n) : MArray2<double> (d, 1, n) { }
};
// row vector by column vector -> scalar
@@ -108,7 +116,7 @@ Complex OCTAVE_API operator * (const Row
OCTAVE_API RowVector linspace (double x1, double x2, octave_idx_type n);
-MARRAY_FORWARD_DEFS (MArray, RowVector, double)
+MARRAY_FORWARD_DEFS (MArray2, RowVector, double)
#endif
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
@@ -36,15 +36,15 @@ enum Shape { SHAPE_FULL, SHAPE_SAME, SHA
#if !defined (CXX_NEW_FRIEND_TEMPLATE_DECL)
extern MArray2<double>
-conv2 (MArray<double>&, MArray<double>&, MArray2<double>&, Shape);
+conv2 (MArray2<double>&, MArray2<double>&, MArray2<double>&, Shape);
extern MArray2<Complex>
-conv2 (MArray<Complex>&, MArray<Complex>&, MArray2<Complex>&, Shape);
+conv2 (MArray2<Complex>&, MArray2<Complex>&, MArray2<Complex>&, Shape);
#endif
template <class T>
MArray2<T>
-conv2 (MArray<T>& R, MArray<T>& C, MArray2<T>& A, Shape ishape)
+conv2 (MArray2<T>& R, MArray2<T>& C, MArray2<T>& A, Shape ishape)
{
octave_idx_type Rn = R.length ();
octave_idx_type Cm = C.length ();
@@ -351,13 +351,13 @@ in the column direction and by vector @v
}
template MArray2<double>
-conv2 (MArray<double>&, MArray<double>&, MArray2<double>&, Shape);
+conv2 (MArray2<double>&, MArray2<double>&, MArray2<double>&, Shape);
template MArray2<double>
conv2 (MArray2<double>&, MArray2<double>&, Shape);
template MArray2<Complex>
-conv2 (MArray<Complex>&, MArray<Complex>&, MArray2<Complex>&, Shape);
+conv2 (MArray2<Complex>&, MArray2<Complex>&, MArray2<Complex>&, Shape);
template MArray2<Complex>
conv2 (MArray2<Complex>&, MArray2<Complex>&, Shape);
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
@@ -41,15 +41,15 @@ along with Octave; see the file COPYING.
#if !defined (CXX_NEW_FRIEND_TEMPLATE_DECL)
extern MArrayN<double>
-filter (MArray<double>&, MArray<double>&, MArrayN<double>&, int dim);
+filter (MArray2<double>&, MArray2<double>&, MArrayN<double>&, int dim);
extern MArrayN<Complex>
-filter (MArray<Complex>&, MArray<Complex>&, MArrayN<Complex>&, int dim);
+filter (MArray2<Complex>&, MArray2<Complex>&, MArrayN<Complex>&, int dim);
#endif
template <class T>
MArrayN<T>
-filter (MArray<T>& b, MArray<T>& a, MArrayN<T>& x, MArrayN<T>& si,
+filter (MArray2<T>& b, MArray2<T>& a, MArrayN<T>& x, MArrayN<T>& si,
int dim = 0)
{
MArrayN<T> y;
@@ -219,17 +219,17 @@ filter (MArray<T>& b, MArray<T>& a, MArr
#if !defined (CXX_NEW_FRIEND_TEMPLATE_DECL)
extern MArrayN<double>
-filter (MArray<double>&, MArray<double>&, MArrayN<double>&,
+filter (MArray2<double>&, MArray2<double>&, MArrayN<double>&,
MArrayN<double>&, int dim);
extern MArrayN<Complex>
-filter (MArray<Complex>&, MArray<Complex>&, MArrayN<Complex>&,
+filter (MArray2<Complex>&, MArray2<Complex>&, MArrayN<Complex>&,
MArrayN<Complex>&, int dim);
#endif
template <class T>
MArrayN<T>
-filter (MArray<T>& b, MArray<T>& a, MArrayN<T>& x, int dim = -1)
+filter (MArray2<T>& b, MArray2<T>& a, MArrayN<T>& x, int dim = -1)
{
dim_vector x_dims = x.dims();
@@ -519,18 +519,18 @@ H(z) = {\\displaystyle\\sum_{k=0}^M d_{k
}
template MArrayN<double>
-filter (MArray<double>&, MArray<double>&, MArrayN<double>&,
+filter (MArray2<double>&, MArray2<double>&, MArrayN<double>&,
MArrayN<double>&, int dim);
template MArrayN<double>
-filter (MArray<double>&, MArray<double>&, MArrayN<double>&, int dim);
+filter (MArray2<double>&, MArray2<double>&, MArrayN<double>&, int dim);
template MArrayN<Complex>
-filter (MArray<Complex>&, MArray<Complex>&, MArrayN<Complex>&,
+filter (MArray2<Complex>&, MArray2<Complex>&, MArrayN<Complex>&,
MArrayN<Complex>&, int dim);
template MArrayN<Complex>
-filter (MArray<Complex>&, MArray<Complex>&, MArrayN<Complex>&, int dim);
+filter (MArray2<Complex>&, MArray2<Complex>&, MArrayN<Complex>&, int dim);
/*
;;; Local Variables: ***