comparison liboctave/MArray2.cc @ 5275:23b37da9fd5b

[project @ 2005-04-08 16:07:35 by jwe]
author jwe
date Fri, 08 Apr 2005 16:07:37 +0000
parents e35b034d3523
children 4c8a2e4e0717
comparison
equal deleted inserted replaced
5274:eae7b40388e9 5275:23b37da9fd5b
54 54
55 template <class T> 55 template <class T>
56 MArray2<T>& 56 MArray2<T>&
57 operator += (MArray2<T>& a, const MArray2<T>& b) 57 operator += (MArray2<T>& a, const MArray2<T>& b)
58 { 58 {
59 int r = a.rows (); 59 octave_idx_type r = a.rows ();
60 int c = a.cols (); 60 octave_idx_type c = a.cols ();
61 int br = b.rows (); 61 octave_idx_type br = b.rows ();
62 int bc = b.cols (); 62 octave_idx_type bc = b.cols ();
63 if (r != br || c != bc) 63 if (r != br || c != bc)
64 gripe_nonconformant ("operator +=", r, c, br, bc); 64 gripe_nonconformant ("operator +=", r, c, br, bc);
65 else 65 else
66 { 66 {
67 if (r > 0 && c > 0) 67 if (r > 0 && c > 0)
68 { 68 {
69 int l = a.length (); 69 octave_idx_type l = a.length ();
70 DO_VV_OP2 (T, a, +=, b); 70 DO_VV_OP2 (T, a, +=, b);
71 } 71 }
72 } 72 }
73 return a; 73 return a;
74 } 74 }
75 75
76 template <class T> 76 template <class T>
77 MArray2<T>& 77 MArray2<T>&
78 operator -= (MArray2<T>& a, const MArray2<T>& b) 78 operator -= (MArray2<T>& a, const MArray2<T>& b)
79 { 79 {
80 int r = a.rows (); 80 octave_idx_type r = a.rows ();
81 int c = a.cols (); 81 octave_idx_type c = a.cols ();
82 int br = b.rows (); 82 octave_idx_type br = b.rows ();
83 int bc = b.cols (); 83 octave_idx_type bc = b.cols ();
84 if (r != br || c != bc) 84 if (r != br || c != bc)
85 gripe_nonconformant ("operator -=", r, c, br, bc); 85 gripe_nonconformant ("operator -=", r, c, br, bc);
86 else 86 else
87 { 87 {
88 if (r > 0 && c > 0) 88 if (r > 0 && c > 0)
89 { 89 {
90 int l = a.length (); 90 octave_idx_type l = a.length ();
91 DO_VV_OP2 (T, a, -=, b); 91 DO_VV_OP2 (T, a, -=, b);
92 } 92 }
93 } 93 }
94 return a; 94 return a;
95 } 95 }
101 MArray2<T> \ 101 MArray2<T> \
102 operator OP (const MArray2<T>& a, const T& s) \ 102 operator OP (const MArray2<T>& a, const T& s) \
103 { \ 103 { \
104 MArray2<T> result (a.rows (), a.cols ()); \ 104 MArray2<T> result (a.rows (), a.cols ()); \
105 T *r = result.fortran_vec (); \ 105 T *r = result.fortran_vec (); \
106 int l = a.length (); \ 106 octave_idx_type l = a.length (); \
107 const T *v = a.data (); \ 107 const T *v = a.data (); \
108 DO_VS_OP (r, l, v, OP, s); \ 108 DO_VS_OP (r, l, v, OP, s); \
109 return result; \ 109 return result; \
110 } 110 }
111 111
121 MArray2<T> \ 121 MArray2<T> \
122 operator OP (const T& s, const MArray2<T>& a) \ 122 operator OP (const T& s, const MArray2<T>& a) \
123 { \ 123 { \
124 MArray2<T> result (a.rows (), a.cols ()); \ 124 MArray2<T> result (a.rows (), a.cols ()); \
125 T *r = result.fortran_vec (); \ 125 T *r = result.fortran_vec (); \
126 int l = a.length (); \ 126 octave_idx_type l = a.length (); \
127 const T *v = a.data (); \ 127 const T *v = a.data (); \
128 DO_SV_OP (r, l, s, OP, v); \ 128 DO_SV_OP (r, l, s, OP, v); \
129 return result; \ 129 return result; \
130 } 130 }
131 131
139 #define MARRAY_A2A2_OP(FCN, OP) \ 139 #define MARRAY_A2A2_OP(FCN, OP) \
140 template <class T> \ 140 template <class T> \
141 MArray2<T> \ 141 MArray2<T> \
142 FCN (const MArray2<T>& a, const MArray2<T>& b) \ 142 FCN (const MArray2<T>& a, const MArray2<T>& b) \
143 { \ 143 { \
144 int a_nr = a.rows (); \ 144 octave_idx_type a_nr = a.rows (); \
145 int a_nc = a.cols (); \ 145 octave_idx_type a_nc = a.cols (); \
146 int b_nr = b.rows (); \ 146 octave_idx_type b_nr = b.rows (); \
147 int b_nc = b.cols (); \ 147 octave_idx_type b_nc = b.cols (); \
148 if (a_nr != b_nr || a_nc != b_nc) \ 148 if (a_nr != b_nr || a_nc != b_nc) \
149 { \ 149 { \
150 gripe_nonconformant (#FCN, a_nr, a_nc, b_nr, b_nc); \ 150 gripe_nonconformant (#FCN, a_nr, a_nc, b_nr, b_nc); \
151 return MArray2<T> (); \ 151 return MArray2<T> (); \
152 } \ 152 } \
153 if (a_nr == 0 || a_nc == 0) \ 153 if (a_nr == 0 || a_nc == 0) \
154 return MArray2<T> (a_nr, a_nc); \ 154 return MArray2<T> (a_nr, a_nc); \
155 int l = a.length (); \ 155 octave_idx_type l = a.length (); \
156 MArray2<T> result (a_nr, a_nc); \ 156 MArray2<T> result (a_nr, a_nc); \
157 T *r = result.fortran_vec (); \ 157 T *r = result.fortran_vec (); \
158 const T *x = a.data (); \ 158 const T *x = a.data (); \
159 const T *y = b.data (); \ 159 const T *y = b.data (); \
160 DO_VV_OP (r, l, x, OP, y); \ 160 DO_VV_OP (r, l, x, OP, y); \
177 177
178 template <class T> 178 template <class T>
179 MArray2<T> 179 MArray2<T>
180 operator - (const MArray2<T>& a) 180 operator - (const MArray2<T>& a)
181 { 181 {
182 int l = a.length (); 182 octave_idx_type l = a.length ();
183 MArray2<T> result (a.rows (), a.cols ()); 183 MArray2<T> result (a.rows (), a.cols ());
184 T *r = result.fortran_vec (); 184 T *r = result.fortran_vec ();
185 const T *x = a.data (); 185 const T *x = a.data ();
186 NEG_V (r, l, x); 186 NEG_V (r, l, x);
187 return result; 187 return result;