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_MArray_h)
00026 #define octave_MArray_h 1
00027
00028 #include "Array.h"
00029
00030
00031
00032
00033
00034 #include "MArray-decl.h"
00035
00036 MARRAY_OPS_FORWARD_DECLS (MArray, )
00037
00038 template <class T>
00039 class
00040 MArray : public Array<T>
00041 {
00042 protected:
00043
00044 MArray (T *d, octave_idx_type l) : Array<T> (d, l) { }
00045
00046 public:
00047
00048 MArray (void) : Array<T> () { }
00049
00050 explicit MArray (octave_idx_type n) : Array<T> (n) { }
00051
00052 MArray (octave_idx_type n, const T& val) : Array<T> (n, val) { }
00053
00054 MArray (const MArray<T>& a) : Array<T> (a) { }
00055
00056
00057 MArray (const Array<T>& a) : Array<T> (a, dim_vector (a.length ())) { }
00058
00059 MArray (const dim_vector& dv) : Array<T> (dv) { }
00060
00061 ~MArray (void) { }
00062
00063 MArray<T>& operator = (const MArray<T>& a)
00064 {
00065 Array<T>::operator = (a);
00066 return *this;
00067 }
00068
00069
00070 void resize (octave_idx_type n, const T& val = Array<T>::resize_fill_value ())
00071 { Array<T>::resize_fill (n, 1, val); }
00072
00073 MArray<T> transpose (void) const { return Array<T>::transpose (); }
00074 MArray<T> hermitian (T (*fcn) (const T&) = 0) const { return Array<T>::hermitian (fcn); }
00075
00076 octave_idx_type nnz (void) const
00077 {
00078 octave_idx_type retval = 0;
00079
00080 const T *d = this->data ();
00081
00082 octave_idx_type nel = this->numel ();
00083
00084 for (octave_idx_type i = 0; i < nel; i++)
00085 {
00086 if (d[i] != T ())
00087 retval++;
00088 }
00089
00090 return retval;
00091 }
00092
00093 double norm (double p) const;
00094 float norm (float p) const;
00095
00096 template <class U, class F>
00097 MArray<U> map (F fcn) const
00098 {
00099 return Array<T>::template map<U> (fcn);
00100 }
00101
00102
00103
00104 void idx_add (const idx_vector& idx, T val);
00105
00106 void idx_add (const idx_vector& idx, const MArray<T>& vals);
00107
00108
00109
00110
00111
00112 };
00113
00114 #endif
00115
00116
00117
00118
00119
00120