diff main/fixed/src/fixedMatrix.h @ 2383:d1930f8af7ca octave-forge

Changed the directory structure of fixed to match the package system
author hauberg
date Sun, 20 Aug 2006 14:43:38 +0000
parents
children 1728eb2120ef
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main/fixed/src/fixedMatrix.h	Sun Aug 20 14:43:38 2006 +0000
@@ -0,0 +1,332 @@
+/*
+
+Copyright (C) 2003 Motorola Inc
+Copyright (C) 2003 David Bateman
+
+This program 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 2, or (at your option) any
+later version.
+
+This program 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 this program; see the file COPYING.  If not, write to the Free
+Software Foundation, 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+In addition to the terms of the GPL, you are permitted to link
+this program with any Open Source program, as defined by the
+Open Source Initiative (www.opensource.org)
+
+*/
+
+#if !defined (octave_FixedMatrix_h)
+#define octave_FixedMatrix_h 1
+
+#if defined (__GNUG__) && defined (USE_PRAGMA_INTERFACE_IMPLEMENTATION)
+#pragma interface
+#endif
+
+#include <octave/MArray2.h>
+
+#include <octave/mx-defs.h>
+#include <octave/mx-op-defs.h>
+#include <octave/data-conv.h>
+#include <octave/mach-info.h>
+#include <octave/boolMatrix.h>
+#include <octave/dMatrix.h>
+
+#include "int/fixed.h"
+
+class FixedComplexMatrix;
+
+#if !defined(octave_FixedColVector_h)
+class FixedColumnVector;
+#endif
+#if !defined(octave_FixedRowVector_h)
+class FixedRowVector;
+#endif
+
+typedef FixedPoint (*f_f_Mapper)(FixedPoint);
+
+class
+FixedMatrix : public MArray2<FixedPoint>
+{
+public:
+
+  FixedMatrix (void) : MArray2<FixedPoint> () { }
+
+  FixedMatrix (int r, int c) : MArray2<FixedPoint> (r, c) { }
+
+  FixedMatrix (int r, int c, const FixedPoint val) : MArray2<FixedPoint> (r, c, val) { }
+
+  FixedMatrix (const MArray2<int> &is, const MArray2<int> &ds);
+
+  FixedMatrix (const Matrix &is, const Matrix &ds);
+
+  FixedMatrix (unsigned int is, unsigned int ds, const FixedMatrix& a);
+
+  FixedMatrix (const MArray2<int> &is, const MArray2<int> &ds, 
+	       const FixedMatrix& a);
+
+  FixedMatrix (const Matrix &is, const Matrix &ds, const FixedMatrix& a);
+
+  FixedMatrix (unsigned int is, unsigned int ds, const Matrix& a);
+
+  FixedMatrix (const MArray2<int> &is, const MArray2<int> &ds, 
+	       const Matrix& a);
+
+  FixedMatrix (const Matrix &is, const Matrix &ds, const Matrix& a);
+
+  FixedMatrix (unsigned int is, unsigned int ds, const Matrix& a, 
+	       const Matrix& b);
+
+  FixedMatrix (const MArray2<int> &is, const MArray2<int> &ds, 
+	       const Matrix& a, const Matrix& b);
+
+  FixedMatrix (const Matrix &is, const Matrix &ds, const Matrix& a, 
+	       const Matrix& b);
+
+  FixedMatrix (const MArray2<int> &a);
+
+  FixedMatrix (const Matrix &a);
+
+  FixedMatrix (const FixedMatrix& a) : MArray2<FixedPoint> (a) { }
+  FixedMatrix (const MArray2<FixedPoint>& a) : MArray2<FixedPoint> (a) { }
+
+  explicit FixedMatrix (const FixedRowVector& rv);
+
+  explicit FixedMatrix (const FixedColumnVector& cv);
+
+  Matrix sign (void) const;
+  Matrix signbit (void) const;
+  Matrix getdecsize (void) const;
+  Matrix getintsize (void) const;
+  Matrix getnumber (void) const;
+  Matrix fixedpoint (void) const;
+  FixedMatrix chdecsize (const double n);
+  FixedMatrix chdecsize (const Matrix &n);
+  FixedMatrix chintsize (const double n);
+  FixedMatrix chintsize (const Matrix &n);
+  FixedMatrix incdecsize (const double n);
+  FixedMatrix incdecsize (const Matrix &n);
+  FixedMatrix incdecsize ();
+  FixedMatrix incintsize (const double n);
+  FixedMatrix incintsize (const Matrix &n);
+  FixedMatrix incintsize ();
+
+  FixedMatrix& operator = (const FixedMatrix& a)
+    {
+      MArray2<FixedPoint>::operator = (a);
+      return *this;
+    }
+
+  bool operator == (const FixedMatrix& a) const;
+  bool operator != (const FixedMatrix& a) const;
+
+  bool is_symmetric (void) const;
+
+#ifdef HAVE_OLD_OCTAVE_CONCAT
+  friend FixedMatrix concat (const FixedMatrix& ra, const FixedMatrix& rb, 
+			     const Array<int>& ra_idx);
+#endif
+
+#ifdef HAVE_OCTAVE_CONCAT
+  FixedMatrix concat (const FixedMatrix& rb, const Array<int>& ra_idx);
+  FixedComplexMatrix concat (const FixedComplexMatrix& rb, 
+			     const Array<int>& ra_idx);
+#endif
+
+  // destructive insert/delete/reorder operations
+
+  FixedMatrix& insert (const FixedMatrix& a, int r, int c);
+  FixedMatrix& insert (const FixedRowVector& a, int r, int c);
+  FixedMatrix& insert (const FixedColumnVector& a, int r, int c);
+
+  FixedMatrix& fill (FixedPoint val);
+  FixedMatrix& fill (FixedPoint val, int r1, int c1, int r2, int c2);
+
+  FixedMatrix append (const FixedMatrix& a) const;
+  FixedMatrix append (const FixedRowVector& a) const;
+  FixedMatrix append (const FixedColumnVector& a) const;
+
+  FixedMatrix stack (const FixedMatrix& a) const;
+  FixedMatrix stack (const FixedRowVector& a) const;
+  FixedMatrix stack (const FixedColumnVector& a) const;
+
+  FixedMatrix transpose (void) const 
+       { return MArray2<FixedPoint>::transpose (); }
+
+  // resize is the destructive equivalent for this one
+
+  FixedMatrix extract (int r1, int c1, int r2, int c2) const;
+
+  FixedMatrix extract_n (int r1, int c1, int nr, int nc) const;
+
+  // extract row or column i.
+
+  FixedRowVector row (int i) const;
+  FixedRowVector row (char *s) const;
+
+  FixedColumnVector column (int i) const;
+  FixedColumnVector column (char *s) const;
+
+  // unary operations
+
+  FixedMatrix operator ! (void) const;
+
+  // other operations
+
+  FixedMatrix map (f_f_Mapper f) const;
+  FixedMatrix& apply (f_f_Mapper f);
+
+  boolMatrix all (int dim = -1) const;
+  boolMatrix any (int dim = -1) const;
+
+  FixedMatrix cumprod (int dim = -1) const;
+  FixedMatrix cumsum (int dim = -1) const;
+  FixedMatrix prod (int dim = -1) const;
+  FixedMatrix sum (int dim = -1) const;
+  FixedMatrix sumsq (int dim = -1) const;
+  FixedMatrix abs (void) const;
+
+  FixedColumnVector diag (void) const;
+  FixedColumnVector diag (int k) const;
+
+  FixedColumnVector row_min (void) const;
+  FixedColumnVector row_max (void) const;
+
+  FixedColumnVector row_min (Array<int>& index) const;
+  FixedColumnVector row_max (Array<int>& index) const;
+
+  FixedRowVector column_min (void) const;
+  FixedRowVector column_max (void) const;
+
+  FixedRowVector column_min (Array<int>& index) const;
+  FixedRowVector column_max (Array<int>& index) const;
+
+  friend FixedMatrix operator * (const FixedColumnVector& a, const FixedRowVector& b);
+  friend FixedMatrix operator * (const FixedMatrix& a, const FixedMatrix& b);
+
+  friend FixedMatrix real (const FixedMatrix &x);
+  friend FixedMatrix imag (const FixedMatrix &x);
+  friend FixedMatrix conj (const FixedMatrix &x);
+
+  friend FixedMatrix abs (const FixedMatrix &x);
+  friend FixedMatrix cos  (const FixedMatrix &x);
+  friend FixedMatrix cosh  (const FixedMatrix &x);
+  friend FixedMatrix sin  (const FixedMatrix &x);
+  friend FixedMatrix sinh  (const FixedMatrix &x);
+  friend FixedMatrix tan  (const FixedMatrix &x);
+  friend FixedMatrix tanh  (const FixedMatrix &x);
+
+  friend FixedMatrix sqrt  (const FixedMatrix &x);
+  friend FixedMatrix pow  (const FixedMatrix &a, const int b);
+  friend FixedMatrix pow  (const FixedMatrix &a, const double b);
+  friend FixedMatrix pow  (const FixedMatrix &a, const FixedPoint &b);
+  friend FixedMatrix pow  (const FixedMatrix &a, const FixedMatrix &b);
+  friend FixedMatrix exp  (const FixedMatrix &x);
+  friend FixedMatrix log  (const FixedMatrix &x);
+  friend FixedMatrix log10  (const FixedMatrix &x);
+
+  friend FixedMatrix atan2 (const FixedMatrix &x, const FixedMatrix &y);
+
+  friend FixedMatrix round (const FixedMatrix &x);
+  friend FixedMatrix rint (const FixedMatrix &x);
+  friend FixedMatrix floor (const FixedMatrix &x);
+  friend FixedMatrix ceil (const FixedMatrix &x);
+
+  friend Matrix fixedpoint (const FixedMatrix& x);
+  friend Matrix sign (const FixedMatrix& x);
+  friend Matrix signbit (const FixedMatrix& x);
+  friend Matrix getdecsize (const FixedMatrix& x);
+  friend Matrix getintsize (const FixedMatrix& x);
+  friend Matrix getnumber (const FixedMatrix& x);
+
+  // i/o
+
+  friend std::ostream& operator << (std::ostream& os, const FixedMatrix& a);
+  friend std::istream& operator >> (std::istream& is, FixedMatrix& a);
+
+  static FixedPoint resize_fill_value (void) { return FixedPoint(); }
+
+private:
+
+  FixedMatrix (FixedPoint *d, int r, int c) : MArray2<FixedPoint> (d, r, c) { }
+};
+
+FixedMatrix operator * (const FixedColumnVector& a, const FixedRowVector& b);
+FixedMatrix operator * (const FixedMatrix& a, const FixedMatrix& b);
+
+FixedMatrix real (const FixedMatrix &x);
+FixedMatrix imag (const FixedMatrix &x);
+FixedMatrix conj (const FixedMatrix &x);
+
+FixedMatrix abs (const FixedMatrix &x);
+FixedMatrix cos  (const FixedMatrix &x);
+FixedMatrix cosh  (const FixedMatrix &x);
+FixedMatrix sin  (const FixedMatrix &x);
+FixedMatrix sinh  (const FixedMatrix &x);
+FixedMatrix tan  (const FixedMatrix &x);
+FixedMatrix tanh  (const FixedMatrix &x);
+
+FixedMatrix sqrt  (const FixedMatrix &x);
+FixedMatrix pow  (const FixedMatrix &a, const int b);
+FixedMatrix pow  (const FixedMatrix &a, const double b);
+FixedMatrix pow  (const FixedMatrix &a, const FixedPoint &b);
+FixedMatrix pow  (const FixedMatrix &a, const FixedMatrix &b);
+FixedMatrix exp  (const FixedMatrix &x);
+FixedMatrix log  (const FixedMatrix &x);
+FixedMatrix log10  (const FixedMatrix &x);
+
+FixedMatrix atan2 (const FixedMatrix &x, const FixedMatrix &y);
+
+FixedMatrix round (const FixedMatrix &x);
+FixedMatrix rint (const FixedMatrix &x);
+FixedMatrix floor (const FixedMatrix &x);
+FixedMatrix ceil (const FixedMatrix &x);
+
+inline Matrix fixedpoint (const FixedMatrix& x) { return x.fixedpoint(); }
+inline Matrix sign (const FixedMatrix& x) { return x.sign(); }
+inline Matrix signbit (const FixedMatrix& x) { return x.signbit(); }
+inline Matrix getdecsize (const FixedMatrix& x) { return x.getdecsize(); }
+inline Matrix getintsize (const FixedMatrix& x) { return x.getintsize(); }
+inline Matrix getnumber (const FixedMatrix& x) { return x.getnumber(); }
+
+std::ostream& operator << (std::ostream& os, const FixedMatrix& a);
+std::istream& operator >> (std::istream& is, FixedMatrix& a);
+
+FixedMatrix min (FixedPoint d, const FixedMatrix& m);
+FixedMatrix min (const FixedMatrix& m, FixedPoint d);
+FixedMatrix min (const FixedMatrix& a, const FixedMatrix& b);
+
+FixedMatrix max (FixedPoint d, const FixedMatrix& m);
+FixedMatrix max (const FixedMatrix& m, FixedPoint d);
+FixedMatrix max (const FixedMatrix& a, const FixedMatrix& b);
+
+FixedMatrix elem_pow (const FixedMatrix &a, const FixedMatrix &b);
+FixedMatrix elem_pow (const FixedMatrix &a, const FixedPoint &b);
+FixedMatrix elem_pow (const FixedPoint &a, const FixedMatrix &b);
+
+
+MS_CMP_OP_DECLS (FixedMatrix, FixedPoint)
+MS_BOOL_OP_DECLS (FixedMatrix, FixedPoint)
+
+SM_CMP_OP_DECLS (FixedPoint, FixedMatrix)
+SM_BOOL_OP_DECLS (FixedPoint, FixedMatrix)
+
+MM_CMP_OP_DECLS (FixedMatrix, FixedMatrix)
+MM_BOOL_OP_DECLS (FixedMatrix, FixedMatrix)
+
+MARRAY_FORWARD_DEFS (MArray2, FixedMatrix, FixedPoint)
+
+#endif
+
+/*
+;;; Local Variables: ***
+;;; mode: C++ ***
+;;; End: ***
+*/