00001
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "CTBexceptionConformity.hxx"
00015
00016
00018
00023 template <class TR, class T1>
00024 inline void CTBadd(CTBvector<TR>& vr, const CTBvector<T1>& v1)
00025 {
00026 #ifdef CTB__ConformityCheck
00027 CTBint n = vr.Size();
00028 if (n != v1.Size())
00029 throw CTBexceptionConformity(n, v1.Size(),
00030 "CTBadd(CTBvector&,CTBvector&)");
00031 #else
00032 CTBint n = CTBmin(vr.Size(), v1.Size());
00033 #endif
00034
00035 TR* p_vr = vr;
00036 const T1* p_v1 = v1;
00037
00038 for (CTBint i = 0; i < n; i++) *p_vr++ += *p_v1++;
00039 return;
00040 }
00041
00042
00044
00049 template <class TR, class TF1, class T1>
00050 inline void CTBadd(CTBvector<TR>& vr, TF1 f1, const CTBvector<T1>& v1)
00051 {
00052 #ifdef CTB__ConformityCheck
00053 CTBint n = vr.Size();
00054 if (n != v1.Size())
00055 throw CTBexceptionConformity(n, v1.Size(),
00056 "CTBadd(CTBvector&,T,CTBvector&)");
00057 #else
00058 CTBint n = CTBmin(vr.Size(), v1.Size());
00059 #endif
00060
00061 TR* p_vr = vr;
00062 const T1* p_v1 = v1;
00063
00064 for (CTBint i = 0; i < n; i++) *p_vr++ += f1 * *p_v1++;
00065 return;
00066 }
00067
00068
00070
00071 \exception CTBexceptionConformity
00072 Thrown if \ref CTB__ConformityCheck defined and size of \a v1 and \a v2
00073 different.
00074 */
00075 template <class TR, class T1, class T2>
00076 inline void CTBadd(CTBvector<TR>& vr, const CTBvector<T1>& v1,
00077 const CTBvector<T2>& v2)
00078 {
00079 #ifdef CTB__ConformityCheck
00080 CTBint n = v1.Size();
00081 if (n != v2.Size())
00082 throw CTBexceptionConformity(n, v2.Size(),
00083 "CTBadd(CTBvector&,CTBvector&,CTBvector&)");
00084 #else
00085 CTBint n = CTBmin(v1.Size(), v2.Size());
00086 #endif
00087
00088 if (vr.Size() != n) vr.Resize(n);
00089
00090 TR* p_vr = vr;
00091 const T1* p_v1 = v1;
00092 const T2* p_v2 = v2;
00093
00094 for (CTBint i = 0; i < n; i++) *p_vr++ = *p_v1++ + *p_v2++;
00095 return;
00096 }
00097
00098
00100
00105 template <class TR, class T1, class TF2, class T2>
00106 inline void CTBadd(CTBvector<TR>& vr, const CTBvector<T1>& v1,
00107 TF2 f2,const CTBvector<T2>& v2)
00108 {
00109 #ifdef CTB__ConformityCheck
00110 CTBint n = v1.Size();
00111 if (n != v2.Size())
00112 throw CTBexceptionConformity(n, v2.Size(),
00113 "CTBadd(CTBvector&,CTBvector&,T,CTBvector&)");
00114 #else
00115 CTBint n = CTBmin(v1.Size(), v2.Size());
00116 #endif
00117
00118 if (vr.Size() != n) vr.Resize(n);
00119
00120 TR* p_vr = vr;
00121 const T1* p_v1 = v1;
00122 const T2* p_v2 = v2;
00123
00124 for (CTBint i = 0; i < n; i++) *p_vr++ = *p_v1++ + f2 * *p_v2++;
00125 return;
00126 }
00127
00128
00130
00135 template <class TR, class TF1, class T1, class TF2, class T2>
00136 inline void CTBadd(CTBvector<TR>& vr, TF1 f1, const CTBvector<T1>& v1,
00137 TF2 f2, const CTBvector<T2>& v2)
00138 {
00139 #ifdef CTB__ConformityCheck
00140 CTBint n = v1.Size();
00141 if (n != v2.Size())
00142 throw CTBexceptionConformity(n, v2.Size(),
00143 "CTBadd(CTBvector&,T,CTBvector&,T,CTBvector&)");
00144 #else
00145 CTBint n = CTBmin(v1.Size(), v2.Size());
00146 #endif
00147
00148 if (vr.Size() != n) vr.Resize(n);
00149
00150 TR* p_vr = vr;
00151 const T1* p_v1 = v1;
00152 const T2* p_v2 = v2;
00153
00154 for (CTBint i = 0; i < n; i++) *p_vr++ = f1 * *p_v1++ + f2 * *p_v2++;
00155 return;
00156 }
00157
00158
00160
00165 template <class TR, class T1>
00166 inline void CTBsub(CTBvector<TR>& vr, const CTBvector<T1>& v1)
00167 {
00168 #ifdef CTB__ConformityCheck
00169 CTBint n = vr.Size();
00170 if (n != v1.Size())
00171 throw CTBexceptionConformity(n, v1.Size(),
00172 "CTBsub(CTBvector&,CTBvector&)");
00173 #else
00174 CTBint n = CTBmin(vr.Size(), v1.Size());
00175 #endif
00176
00177 TR* p_vr = vr;
00178 const T1* p_v1 = v1;
00179
00180 for (CTBint i = 0; i < n; i++) *p_vr++ -= *p_v1++;
00181 return;
00182 }
00183
00184
00186
00191 template <class TR, class T1, class T2>
00192 inline void CTBsub(CTBvector<TR>& vr, const CTBvector<T1>& v1,
00193 const CTBvector<T2>& v2)
00194 {
00195 #ifdef CTB__ConformityCheck
00196 CTBint n = v1.Size();
00197 if (n != v2.Size())
00198 throw CTBexceptionConformity(n, v2.Size(),
00199 "CTBsub(CTBvector&,CTBvector&,CTBvector&)");
00200 #else
00201 CTBint n = CTBmin(v1.Size(), v2.Size());
00202 #endif
00203
00204 if (vr.Size() != n) vr.Resize(n);
00205
00206 TR* p_vr = vr;
00207 const T1* p_v1 = v1;
00208 const T2* p_v2 = v2;
00209
00210 for (CTBint i = 0; i < n; i++) *p_vr++ = *p_v1++ - *p_v2++;
00211 return;
00212 }
00213
00214
00216
00221 template <class TR, class T1>
00222 inline CTBvector<TR>& operator+=(CTBvector<TR>& vr, const CTBvector<T1>& v1)
00223 {
00224 CTBadd(vr,v1);
00225 return vr;
00226 }
00227
00228
00230
00232 template <class TR, class TF1>
00233 inline CTBvector<TR>& operator+=(CTBvector<TR>& vr, TF1 f1)
00234 {
00235 CTBint n = vr.Size();
00236 TR* p_vr = vr;
00237
00238 for (CTBint i = 0; i < n; i++) *p_vr++ += f1;
00239
00240 return vr;
00241 }
00242
00243
00245
00250 template <class TR, class T1>
00251 inline CTBvector<TR>& operator-=(CTBvector<TR>& vr, const CTBvector<T1>& v1)
00252 {
00253 CTBsub(vr,v1);
00254 return vr;
00255 }
00256
00257
00259
00261 template <class TR, class TF1>
00262 inline CTBvector<TR>& operator-=(CTBvector<TR>& vr, TF1 f1)
00263 {
00264 CTBint n = vr.Size();
00265 TR* p_vr = vr;
00266
00267 for (CTBint i = 0; i < n; i++) *p_vr++ -= f1;
00268
00269 return vr;
00270 }
00271
00272
00274
00276 template <class TR, class TF1>
00277 inline CTBvector<TR>& operator*=(CTBvector<TR>& vr, TF1 f1)
00278 {
00279 CTBint n = vr.Size();
00280 TR* p_vr = vr;
00281
00282 for (CTBint i = 0; i < n; i++) *p_vr++ *= f1;
00283
00284 return vr;
00285 }
00286
00287
00289
00291 template <class TR, class TF1>
00292 inline CTBvector<TR>& operator/=(CTBvector<TR>& vr, TF1 f1)
00293 {
00294 CTBint n = vr.Size();
00295 TR* p_vr = vr;
00296 TF1 f1inv = 1./f1;
00297
00298 for (CTBint i = 0; i < n; i++) *p_vr++ *= f1inv;
00299
00300 return vr;
00301 }
00302
00303
00304