Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages   Examples  

CTBvoper.icc

Go to the documentation of this file.
00001 
00006 /*----------------------------------------------------------------------------*/
00007 /* C Tool Box: Designed and implemented by:                                   */
00008 /*    Walter F.J. Mueller   Gesellschaft fuer Schwerionenforschung (GSI)      */
00009 /*                          Planckstrasse 1, D-64291 Darmstadt, Germany       */
00010 /*                  Email:  W.F.J.Mueller@gsi.de                              */
00011 /*                  WWW:    http://www-kp3.gsi.de/www/kp3/people/mueller.html */
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 

Generated at Fri Oct 24 18:11:31 2003 for CTBbase by doxygen1.2.9-20010812 written by Dimitri van Heesch, © 1997-2001