octave-maintainers
[Top][All Lists]
Advanced

[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: ***

reply via email to

[Prev in Thread] Current Thread [Next in Thread]