00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #if !defined (octave_MDiagArray2_h)
00026 #define octave_MDiagArray2_h 1
00027
00028 #include "DiagArray2.h"
00029 #include "MArray2.h"
00030 #include "MArray.h"
00031
00032
00033
00034
00035
00036 #include "MArray-decl.h"
00037
00038 MDIAGARRAY2_OPS_FORWARD_DECLS (MDiagArray2, )
00039
00040 template <class T>
00041 class
00042 MDiagArray2 : public DiagArray2<T>
00043 {
00044 protected:
00045
00046 MDiagArray2 (T *d, octave_idx_type r, octave_idx_type c) : DiagArray2<T> (d, r, c) { }
00047
00048 public:
00049
00050 MDiagArray2 (void) : DiagArray2<T> () { }
00051
00052 MDiagArray2 (octave_idx_type r, octave_idx_type c) : DiagArray2<T> (r, c) { }
00053
00054 MDiagArray2 (octave_idx_type r, octave_idx_type c, const T& val) : DiagArray2<T> (r, c, val) { }
00055
00056 MDiagArray2 (const dim_vector& dv) : DiagArray2<T> (dv) { }
00057
00058 MDiagArray2 (const MDiagArray2<T>& a) : DiagArray2<T> (a) { }
00059
00060 MDiagArray2 (const DiagArray2<T>& a) : DiagArray2<T> (a) { }
00061
00062 template <class U>
00063 MDiagArray2 (const DiagArray2<U>& a) : DiagArray2<T> (a) { }
00064
00065 explicit MDiagArray2 (const Array<T>& a) : DiagArray2<T> (a) { }
00066
00067 ~MDiagArray2 (void) { }
00068
00069 MDiagArray2<T>& operator = (const MDiagArray2<T>& a)
00070 {
00071 DiagArray2<T>::operator = (a);
00072 return *this;
00073 }
00074
00075 operator MArray2<T> () const
00076 {
00077 return DiagArray2<T>::operator Array2<T> ();
00078 }
00079
00080 octave_idx_type nnz (void) const
00081 {
00082 octave_idx_type retval = 0;
00083
00084 const T *d = this->data ();
00085
00086 octave_idx_type nel = this->length ();
00087
00088 for (octave_idx_type i = 0; i < nel; i++)
00089 {
00090 if (d[i] != T ())
00091 retval++;
00092 }
00093
00094 return retval;
00095 }
00096
00097 MArray<T> diag (octave_idx_type k = 0) const
00098 { return DiagArray2<T>::diag (k); }
00099
00100 MDiagArray2<T> transpose (void) const { return DiagArray2<T>::transpose (); }
00101 MDiagArray2<T> hermitian (T (*fcn) (const T&) = 0) const { return DiagArray2<T>::hermitian (fcn); }
00102
00103 bool is_multiple_of_identity (T val) const;
00104
00105
00106
00107
00108
00109
00110 };
00111
00112 #endif
00113
00114
00115
00116
00117
00118