AMROC Main     Blockstructured Adaptive Mesh Refinement in object-oriented C++


Main Page   Class Hierarchy   Compound List   File List  

Vector20.h

Go to the documentation of this file.
00001 #ifndef AMROC_VECTOR20_H
00002 #define AMROC_VECTOR20_H
00003 
00011 #include "CompConf.h"
00012 #include "generic.h"
00013 #include <iostream.h>
00014 #include <assert.h>
00015  
00016 #ifndef VectorName
00017 #define Vector(dim)      name2(Vector,dim)
00018 #define VectorName
00019 #endif
00020 
00028 template <class DataType>
00029 class Vector(20) {
00030   typedef Vector(20)<DataType> TVector;
00031 
00032 public:
00033   typedef DataType InternalDataType;
00034 
00035   Vector(20)() {}
00036   Vector(20)(const TVector& x) { 
00037     memcpy((void *) data_, (void *) x.data_, sizeof(TVector));
00038   }
00039   Vector(20)(const DataType& v) { 
00040     data_[0] = v; 
00041     data_[1] = v; 
00042     data_[2] = v; 
00043     data_[3] = v; 
00044     data_[4] = v; 
00045     data_[5] = v; 
00046     data_[6] = v; 
00047     data_[7] = v; 
00048     data_[8] = v; 
00049     data_[9] = v; 
00050     data_[10] = v; 
00051     data_[11] = v; 
00052     data_[12] = v; 
00053     data_[13] = v; 
00054     data_[14] = v; 
00055     data_[15] = v; 
00056     data_[16] = v; 
00057     data_[17] = v; 
00058     data_[18] = v; 
00059     data_[19] = v; 
00060   }
00061 
00062   ~Vector(20)() {}
00063   
00064   DataType * data() { return data_; }
00065   const DataType * data() const { return data_; }
00066   int length() const { return 20; }
00067   static int Length() { return 20; }
00068 
00069   inline DataType operator()(int i) const {
00070 #ifdef DEBUG_PRINT
00071     assert((i >= 0) && (i < 20)); 
00072 #endif
00073     return data_[i];
00074   }
00075   inline DataType& operator()(int i) { 
00076 #ifdef DEBUG_PRINT
00077     assert((i >= 0) && (i < 20)); 
00078 #endif
00079     return data_[i];
00080   }
00081 
00082   inline DataType operator[](int i) const {
00083 #ifdef DEBUG_PRINT
00084     assert((i >= 0) && (i < 20)); 
00085 #endif
00086     return data_[i];
00087   }
00088   inline DataType& operator[](int i) { 
00089 #ifdef DEBUG_PRINT
00090     assert((i >= 0) && (i < 20)); 
00091 #endif
00092     return data_[i];
00093   }
00094 
00095   inline TVector& operator=(const TVector& x) { 
00096     memcpy((void *) data_, (void *) x.data_, sizeof(TVector));
00097     return *this; 
00098   }
00099   inline TVector& operator=(const DataType& v) { 
00100     data_[0] = v; 
00101     data_[1] = v; 
00102     data_[2] = v; 
00103     data_[3] = v; 
00104     data_[4] = v; 
00105     data_[5] = v; 
00106     data_[6] = v; 
00107     data_[7] = v; 
00108     data_[8] = v; 
00109     data_[9] = v; 
00110     data_[10] = v; 
00111     data_[11] = v; 
00112     data_[12] = v; 
00113     data_[13] = v; 
00114     data_[14] = v; 
00115     data_[15] = v; 
00116     data_[16] = v; 
00117     data_[17] = v; 
00118     data_[18] = v; 
00119     data_[19] = v; 
00120     return *this; 
00121   }
00122 
00123 #define Vector_Vector_Operator(ope,op)                          \
00124    inline TVector& operator ope (const TVector &x)              \
00125      {                                                          \
00126       data_[0] ope x.data_[0];                                  \
00127       data_[1] ope x.data_[1];                                  \
00128       data_[2] ope x.data_[2];                                  \
00129       data_[3] ope x.data_[3];                                  \
00130       data_[4] ope x.data_[4];                                  \
00131       data_[5] ope x.data_[5];                                  \
00132       data_[6] ope x.data_[6];                                  \
00133       data_[7] ope x.data_[7];                                  \
00134       data_[8] ope x.data_[8];                                  \
00135       data_[9] ope x.data_[9];                                  \
00136       data_[10] ope x.data_[10];                                \
00137       data_[11] ope x.data_[11];                                \
00138       data_[12] ope x.data_[12];                                \
00139       data_[13] ope x.data_[13];                                \
00140       data_[14] ope x.data_[14];                                \
00141       data_[15] ope x.data_[15];                                \
00142       data_[16] ope x.data_[16];                                \
00143       data_[17] ope x.data_[17];                                \
00144       data_[18] ope x.data_[18];                                \
00145       data_[19] ope x.data_[19];                                \
00146       return(*this);                                            \
00147      }                                                          \
00148    inline TVector operator op (const TVector &x) const          \
00149      {                                                          \
00150       TVector ret(*this);                                       \
00151       ret.data_[0] ope x.data_[0];                              \
00152       ret.data_[1] ope x.data_[1];                              \
00153       ret.data_[2] ope x.data_[2];                              \
00154       ret.data_[3] ope x.data_[3];                              \
00155       ret.data_[4] ope x.data_[4];                              \
00156       ret.data_[5] ope x.data_[5];                              \
00157       ret.data_[6] ope x.data_[6];                              \
00158       ret.data_[7] ope x.data_[7];                              \
00159       ret.data_[8] ope x.data_[8];                              \
00160       ret.data_[9] ope x.data_[9];                              \
00161       ret.data_[10] ope x.data_[10];                            \
00162       ret.data_[11] ope x.data_[11];                            \
00163       ret.data_[12] ope x.data_[12];                            \
00164       ret.data_[13] ope x.data_[13];                            \
00165       ret.data_[14] ope x.data_[14];                            \
00166       ret.data_[15] ope x.data_[15];                            \
00167       ret.data_[16] ope x.data_[16];                            \
00168       ret.data_[17] ope x.data_[17];                            \
00169       ret.data_[18] ope x.data_[18];                            \
00170       ret.data_[19] ope x.data_[19];                            \
00171       return(ret);                                              \
00172      }
00173    Vector_Vector_Operator(+=,+)
00174    Vector_Vector_Operator(-=,-)
00175    Vector_Vector_Operator(*=,*)
00176    Vector_Vector_Operator(/=,/)
00177 #undef Vector_Vector_Operator
00178 
00179 #define Vector_Scalar_Operator(ope,op)                          \
00180    inline TVector& operator ope (const DataType &v)             \
00181      {                                                          \
00182       data_[0] ope v;                                           \
00183       data_[1] ope v;                                           \
00184       data_[2] ope v;                                           \
00185       data_[3] ope v;                                           \
00186       data_[4] ope v;                                           \
00187       data_[5] ope v;                                           \
00188       data_[6] ope v;                                           \
00189       data_[7] ope v;                                           \
00190       data_[8] ope v;                                           \
00191       data_[9] ope v;                                           \
00192       data_[10] ope v;                                          \
00193       data_[11] ope v;                                          \
00194       data_[12] ope v;                                          \
00195       data_[13] ope v;                                          \
00196       data_[14] ope v;                                          \
00197       data_[15] ope v;                                          \
00198       data_[16] ope v;                                          \
00199       data_[17] ope v;                                          \
00200       data_[18] ope v;                                          \
00201       data_[19] ope v;                                          \
00202       return(*this);                                            \
00203      }                                                          \
00204    inline TVector operator op (const DataType &v) const         \
00205      {                                                          \
00206       TVector ret(*this);                                       \
00207       ret.data_[0] ope v;                                       \
00208       ret.data_[1] ope v;                                       \
00209       ret.data_[2] ope v;                                       \
00210       ret.data_[3] ope v;                                       \
00211       ret.data_[4] ope v;                                       \
00212       ret.data_[5] ope v;                                       \
00213       ret.data_[6] ope v;                                       \
00214       ret.data_[7] ope v;                                       \
00215       ret.data_[8] ope v;                                       \
00216       ret.data_[9] ope v;                                       \
00217       ret.data_[10] ope v;                                      \
00218       ret.data_[11] ope v;                                      \
00219       ret.data_[12] ope v;                                      \
00220       ret.data_[13] ope v;                                      \
00221       ret.data_[14] ope v;                                      \
00222       ret.data_[15] ope v;                                      \
00223       ret.data_[16] ope v;                                      \
00224       ret.data_[17] ope v;                                      \
00225       ret.data_[18] ope v;                                      \
00226       ret.data_[19] ope v;                                      \
00227      return(ret);                                               \
00228      }
00229    Vector_Scalar_Operator(+=,+)
00230    Vector_Scalar_Operator(-=,-)
00231    Vector_Scalar_Operator(*=,*)
00232    Vector_Scalar_Operator(/=,/)
00233 #undef Vector_Scalar_Operator
00234 
00235    /* Define the negation operator */
00236    inline TVector operator - () const
00237      { 
00238        TVector ret;
00239        ret.data_[0] = -data_[0];
00240        ret.data_[1] = -data_[1];
00241        ret.data_[2] = -data_[2];
00242        ret.data_[3] = -data_[3];
00243        ret.data_[4] = -data_[4];
00244        ret.data_[5] = -data_[5];
00245        ret.data_[6] = -data_[6];
00246        ret.data_[7] = -data_[7];
00247        ret.data_[8] = -data_[8];
00248        ret.data_[9] = -data_[9];
00249        ret.data_[10] = -data_[10];
00250        ret.data_[11] = -data_[11];
00251        ret.data_[12] = -data_[12];
00252        ret.data_[13] = -data_[13];
00253        ret.data_[14] = -data_[14];
00254        ret.data_[15] = -data_[15];
00255        ret.data_[16] = -data_[16];
00256        ret.data_[17] = -data_[17];
00257        ret.data_[18] = -data_[18];
00258        ret.data_[19] = -data_[19];
00259        return(ret);
00260      }
00261 
00262 #define Vector_Vector_RelOperator(op)                           \
00263    inline int operator op (const TVector &x) const              \
00264      { return(                                                  \
00265                (data_[0] op x.data_[0])                         \
00266             && (data_[1] op x.data_[1])                         \
00267             && (data_[2] op x.data_[2])                         \
00268             && (data_[3] op x.data_[3])                         \
00269             && (data_[4] op x.data_[4])                         \
00270             && (data_[5] op x.data_[5])                         \
00271             && (data_[6] op x.data_[6])                         \
00272             && (data_[7] op x.data_[7])                         \
00273             && (data_[8] op x.data_[8])                         \
00274             && (data_[9] op x.data_[9])                         \
00275             && (data_[10] op x.data_[10])                       \
00276             && (data_[11] op x.data_[11])                       \
00277             && (data_[12] op x.data_[12])                       \
00278             && (data_[13] op x.data_[13])                       \
00279             && (data_[14] op x.data_[14])                       \
00280             && (data_[15] op x.data_[15])                       \
00281             && (data_[16] op x.data_[16])                       \
00282             && (data_[17] op x.data_[17])                       \
00283             && (data_[18] op x.data_[18])                       \
00284             && (data_[19] op x.data_[19])                       \
00285              ) ; }                     
00286 
00287    Vector_Vector_RelOperator(==)
00288    Vector_Vector_RelOperator(!=)
00289 #undef Vector_Vector_RelOperator
00290 
00291 #define Vector_Vector_RelOperator(op)                           \
00292    inline int operator op (const TVector &x) const              \
00293      { return(                                                  \
00294                (data_[0] op x.data_[0])                         \
00295             || (data_[1] op x.data_[1])                         \
00296             || (data_[2] op x.data_[2])                         \
00297             || (data_[3] op x.data_[3])                         \
00298             || (data_[4] op x.data_[4])                         \
00299             || (data_[5] op x.data_[5])                         \
00300             || (data_[6] op x.data_[6])                         \
00301             || (data_[7] op x.data_[7])                         \
00302             || (data_[8] op x.data_[8])                         \
00303             || (data_[9] op x.data_[9])                         \
00304             || (data_[10] op x.data_[10])                       \
00305             || (data_[11] op x.data_[11])                       \
00306             || (data_[12] op x.data_[12])                       \
00307             || (data_[13] op x.data_[13])                       \
00308             || (data_[14] op x.data_[14])                       \
00309             || (data_[15] op x.data_[15])                       \
00310             || (data_[16] op x.data_[16])                       \
00311             || (data_[17] op x.data_[17])                       \
00312             || (data_[18] op x.data_[18])                       \
00313             || (data_[19] op x.data_[19])                       \
00314              ) ; }                     
00315 
00316    Vector_Vector_RelOperator(>)
00317    Vector_Vector_RelOperator(<)
00318    Vector_Vector_RelOperator(>=)
00319    Vector_Vector_RelOperator(<=)
00320 #undef Vector_Vector_RelOperator
00321 
00322 #define Vector_Scalar_RelOperator(op)                           \
00323    inline int operator op (const DataType &v) const             \
00324      { return(                                                  \
00325                (data_[0] op v)                                  \
00326             && (data_[1] op v)                                  \
00327             && (data_[2] op v)                                  \
00328             && (data_[3] op v)                                  \
00329             && (data_[4] op v)                                  \
00330             && (data_[5] op v)                                  \
00331             && (data_[6] op v)                                  \
00332             && (data_[7] op v)                                  \
00333             && (data_[8] op v)                                  \
00334             && (data_[9] op v)                                  \
00335             && (data_[10] op v)                                 \
00336             && (data_[11] op v)                                 \
00337             && (data_[12] op v)                                 \
00338             && (data_[13] op v)                                 \
00339             && (data_[14] op v)                                 \
00340             && (data_[15] op v)                                 \
00341             && (data_[16] op v)                                 \
00342             && (data_[17] op v)                                 \
00343             && (data_[18] op v)                                 \
00344             && (data_[19] op v)                                 \
00345              ); }                     
00346 
00347    Vector_Scalar_RelOperator(==)
00348    Vector_Scalar_RelOperator(!=)
00349 #undef Vector_Scalar_RelOperator
00350 
00351 #define Vector_Scalar_RelOperator(op)                           \
00352    inline int operator op (const DataType &v) const             \
00353      { return(                                                  \
00354                (data_[0] op v)                                  \
00355             || (data_[1] op v)                                  \
00356             || (data_[2] op v)                                  \
00357             || (data_[3] op v)                                  \
00358             || (data_[4] op v)                                  \
00359             || (data_[5] op v)                                  \
00360             || (data_[6] op v)                                  \
00361             || (data_[7] op v)                                  \
00362             || (data_[8] op v)                                  \
00363             || (data_[9] op v)                                  \
00364             || (data_[10] op v)                                 \
00365             || (data_[11] op v)                                 \
00366             || (data_[12] op v)                                 \
00367             || (data_[13] op v)                                 \
00368             || (data_[14] op v)                                 \
00369             || (data_[15] op v)                                 \
00370             || (data_[16] op v)                                 \
00371             || (data_[17] op v)                                 \
00372             || (data_[18] op v)                                 \
00373             || (data_[19] op v)                                 \
00374               ); }                     
00375 
00376    Vector_Scalar_RelOperator(>)
00377    Vector_Scalar_RelOperator(<)
00378    Vector_Scalar_RelOperator(>=)
00379    Vector_Scalar_RelOperator(<=)
00380 #undef Vector_Scalar_RelOperator
00381 
00382    /* Define elementwise minimum and maximum functions for Vectors */
00383    inline void min(const TVector &x) { 
00384      data_[0] = (data_[0] < x.data_[0]) ? data_[0] : x.data_[0]; 
00385      data_[1] = (data_[1] < x.data_[1]) ? data_[1] : x.data_[1]; 
00386      data_[2] = (data_[2] < x.data_[2]) ? data_[2] : x.data_[2]; 
00387      data_[3] = (data_[3] < x.data_[3]) ? data_[3] : x.data_[3]; 
00388      data_[4] = (data_[4] < x.data_[4]) ? data_[4] : x.data_[4]; 
00389      data_[5] = (data_[5] < x.data_[5]) ? data_[5] : x.data_[5]; 
00390      data_[6] = (data_[6] < x.data_[6]) ? data_[6] : x.data_[6]; 
00391      data_[7] = (data_[7] < x.data_[7]) ? data_[7] : x.data_[7]; 
00392      data_[8] = (data_[8] < x.data_[8]) ? data_[8] : x.data_[8]; 
00393      data_[9] = (data_[9] < x.data_[9]) ? data_[9] : x.data_[9]; 
00394      data_[10] = (data_[10] < x.data_[10]) ? data_[10] : x.data_[10]; 
00395      data_[11] = (data_[11] < x.data_[11]) ? data_[11] : x.data_[11]; 
00396      data_[12] = (data_[12] < x.data_[12]) ? data_[12] : x.data_[12]; 
00397      data_[13] = (data_[13] < x.data_[13]) ? data_[13] : x.data_[13]; 
00398      data_[14] = (data_[14] < x.data_[14]) ? data_[14] : x.data_[14]; 
00399      data_[15] = (data_[15] < x.data_[15]) ? data_[15] : x.data_[15]; 
00400      data_[16] = (data_[16] < x.data_[16]) ? data_[16] : x.data_[16]; 
00401      data_[17] = (data_[17] < x.data_[17]) ? data_[17] : x.data_[17]; 
00402      data_[18] = (data_[18] < x.data_[18]) ? data_[18] : x.data_[18]; 
00403      data_[19] = (data_[19] < x.data_[19]) ? data_[19] : x.data_[19]; 
00404    }
00405    inline void max(const TVector &x) {
00406      data_[0] = (data_[0] > x.data_[0]) ? data_[0] : x.data_[0]; 
00407      data_[1] = (data_[1] > x.data_[1]) ? data_[1] : x.data_[1]; 
00408      data_[2] = (data_[2] > x.data_[2]) ? data_[2] : x.data_[2]; 
00409      data_[3] = (data_[3] > x.data_[3]) ? data_[3] : x.data_[3]; 
00410      data_[4] = (data_[4] > x.data_[4]) ? data_[4] : x.data_[4]; 
00411      data_[5] = (data_[5] > x.data_[5]) ? data_[5] : x.data_[5]; 
00412      data_[6] = (data_[6] > x.data_[6]) ? data_[6] : x.data_[6]; 
00413      data_[7] = (data_[7] > x.data_[7]) ? data_[7] : x.data_[7]; 
00414      data_[8] = (data_[8] > x.data_[8]) ? data_[8] : x.data_[8]; 
00415      data_[9] = (data_[9] > x.data_[9]) ? data_[9] : x.data_[9]; 
00416      data_[10] = (data_[10] > x.data_[10]) ? data_[10] : x.data_[10]; 
00417      data_[11] = (data_[11] > x.data_[11]) ? data_[11] : x.data_[11]; 
00418      data_[12] = (data_[12] > x.data_[12]) ? data_[12] : x.data_[12]; 
00419      data_[13] = (data_[13] > x.data_[13]) ? data_[13] : x.data_[13]; 
00420      data_[14] = (data_[14] > x.data_[14]) ? data_[14] : x.data_[14]; 
00421      data_[15] = (data_[15] > x.data_[15]) ? data_[15] : x.data_[15]; 
00422      data_[16] = (data_[16] > x.data_[16]) ? data_[16] : x.data_[16]; 
00423      data_[17] = (data_[17] > x.data_[17]) ? data_[17] : x.data_[17]; 
00424      data_[18] = (data_[18] > x.data_[18]) ? data_[18] : x.data_[18]; 
00425      data_[19] = (data_[19] > x.data_[19]) ? data_[19] : x.data_[19]; 
00426    }
00427 
00428    /* Define minimum and maximum of components */
00429    inline DataType mincomp() const { 
00430      DataType min;
00431      min = data_[0];
00432      if (data_[1] < min) min = data_[1]; 
00433      if (data_[2] < min) min = data_[2]; 
00434      if (data_[3] < min) min = data_[3]; 
00435      if (data_[4] < min) min = data_[4]; 
00436      if (data_[5] < min) min = data_[5]; 
00437      if (data_[6] < min) min = data_[6]; 
00438      if (data_[7] < min) min = data_[7]; 
00439      if (data_[8] < min) min = data_[8]; 
00440      if (data_[9] < min) min = data_[9]; 
00441      if (data_[10] < min) min = data_[10]; 
00442      if (data_[11] < min) min = data_[11]; 
00443      if (data_[12] < min) min = data_[12]; 
00444      if (data_[13] < min) min = data_[13]; 
00445      if (data_[14] < min) min = data_[14]; 
00446      if (data_[15] < min) min = data_[15]; 
00447      if (data_[16] < min) min = data_[16]; 
00448      if (data_[17] < min) min = data_[17]; 
00449      if (data_[18] < min) min = data_[18]; 
00450      if (data_[19] < min) min = data_[19]; 
00451      return min;
00452    }
00453    inline DataType maxcomp() const { 
00454      DataType max;
00455      max = data_[0];
00456      if (data_[1] > max) max = data_[1]; 
00457      if (data_[2] > max) max = data_[2]; 
00458      if (data_[3] > max) max = data_[3]; 
00459      if (data_[4] > max) max = data_[4]; 
00460      if (data_[5] > max) max = data_[5]; 
00461      if (data_[6] > max) max = data_[6]; 
00462      if (data_[7] > max) max = data_[7]; 
00463      if (data_[8] > max) max = data_[8]; 
00464      if (data_[9] > max) max = data_[9]; 
00465      if (data_[10] > max) max = data_[10]; 
00466      if (data_[11] > max) max = data_[11]; 
00467      if (data_[12] > max) max = data_[12]; 
00468      if (data_[13] > max) max = data_[13]; 
00469      if (data_[14] > max) max = data_[14]; 
00470      if (data_[15] > max) max = data_[15]; 
00471      if (data_[16] > max) max = data_[16]; 
00472      if (data_[17] > max) max = data_[17]; 
00473      if (data_[18] > max) max = data_[18]; 
00474      if (data_[19] > max) max = data_[19]; 
00475      return max;
00476    }
00477 
00478    inline double abs() const {
00479      DataType s = data_[0]*data_[0];
00480      s += data_[1]*data_[1]; 
00481      s += data_[2]*data_[2]; 
00482      s += data_[3]*data_[3]; 
00483      s += data_[4]*data_[4]; 
00484      s += data_[5]*data_[5]; 
00485      s += data_[6]*data_[6]; 
00486      s += data_[7]*data_[7]; 
00487      s += data_[8]*data_[8]; 
00488      s += data_[9]*data_[9];
00489      s += data_[10]*data_[10];
00490      s += data_[11]*data_[11];
00491      s += data_[12]*data_[12];
00492      s += data_[13]*data_[13];
00493      s += data_[14]*data_[14];
00494      s += data_[15]*data_[15];
00495      s += data_[16]*data_[16];
00496      s += data_[17]*data_[17];
00497      s += data_[18]*data_[18];
00498      s += data_[19]*data_[19];
00499      return (sqrt(double(s)));
00500    }
00501 
00502    inline TVector getmin(const TVector &x) const
00503      { TVector ret(*this); ret.min(x); return(ret); }
00504    inline TVector getmax(const TVector &x) const
00505      { TVector ret(*this); ret.max(x); return(ret); }
00506 
00507 public:
00508    DataType data_[20];
00509 };
00510 
00511 
00512 template <class DataType>
00513 inline ostream&  operator << (ostream& os, const Vector(20)<DataType> &v) {
00514   os << "(" 
00515      << v.data_[0] 
00516      << "," << v.data_[1] 
00517      << "," << v.data_[2] 
00518      << "," << v.data_[3] 
00519      << "," << v.data_[4] 
00520      << "," << v.data_[5] 
00521      << "," << v.data_[6] 
00522      << "," << v.data_[7] 
00523      << "," << v.data_[8] 
00524      << "," << v.data_[9] 
00525      << "," << v.data_[10] 
00526      << "," << v.data_[11] 
00527      << "," << v.data_[12] 
00528      << "," << v.data_[13] 
00529      << "," << v.data_[14] 
00530      << "," << v.data_[15] 
00531      << "," << v.data_[16] 
00532      << "," << v.data_[17] 
00533      << "," << v.data_[18] 
00534      << "," << v.data_[19] 
00535      << ")";
00536   return os;
00537 }
00538 
00539 template <class DataType>
00540 inline Vector(20)<DataType> Min(const Vector(20)<DataType> &x, 
00541                                    const Vector(20)<DataType> &y) 
00542   { Vector(20)<DataType> ret(x); ret.min(y); return(ret); }
00543 
00544 template <class DataType>
00545 inline Vector(20)<DataType> Max(const Vector(20)<DataType> &x, 
00546                                    const Vector(20)<DataType> &y) 
00547   { Vector(20)<DataType> ret(x); ret.max(y); return(ret); }
00548 
00549 template <class DataType>
00550 inline double abs(const Vector(20)<DataType> &x) 
00551   { return (x.abs()); }
00552 
00553 template <class DataType>
00554 inline DataType mincomp(const Vector(20)<DataType> &x) 
00555   { return(x.mincomp()); }
00556 
00557 template <class DataType>
00558 inline DataType maxcomp(const Vector(20)<DataType> &x) 
00559   { return(x.maxcomp()); }
00560 
00561 
00562 #define Global_Vector_Scalar_Operator(op)                                  \
00563 template <class DataType>                                                  \
00564 inline Vector(20)<DataType> operator op (const DataType &v,                 \
00565    const Vector(20)<DataType> &x)                                           \
00566    { return(x op v); }
00567 
00568 Global_Vector_Scalar_Operator(+)
00569 Global_Vector_Scalar_Operator(-)
00570 Global_Vector_Scalar_Operator(*)
00571 Global_Vector_Scalar_Operator(/)
00572 #undef Global_Vector_Scalar_Operator
00573 
00574 
00575 #define Global_Vector_Function(fct)                                       \
00576 template <class DataType>                                                 \
00577 inline Vector(20)<DataType> fct(const Vector(20)<DataType> &x)              \
00578    {                                                                      \
00579       Vector(20)<DataType> ret;                                            \
00580       ret[0] = fct(x[0]);                                                 \
00581       ret[1] = fct(x[1]);                                                 \
00582       ret[2] = fct(x[2]);                                                 \
00583       ret[3] = fct(x[3]);                                                 \
00584       ret[4] = fct(x[4]);                                                 \
00585       ret[5] = fct(x[5]);                                                 \
00586       ret[6] = fct(x[6]);                                                 \
00587       ret[7] = fct(x[7]);                                                 \
00588       ret[8] = fct(x[8]);                                                 \
00589       ret[9] = fct(x[9]);                                                 \
00590       ret[10] = fct(x[10]);                                               \
00591       ret[11] = fct(x[11]);                                               \
00592       ret[12] = fct(x[12]);                                               \
00593       ret[13] = fct(x[13]);                                               \
00594       ret[14] = fct(x[14]);                                               \
00595       ret[15] = fct(x[15]);                                               \
00596       ret[16] = fct(x[16]);                                               \
00597       ret[17] = fct(x[17]);                                               \
00598       ret[18] = fct(x[18]);                                               \
00599       ret[19] = fct(x[19]);                                               \
00600       return(ret);                                                        \
00601      }
00602 
00603 Global_Vector_Function(fabs)
00604 Global_Vector_Function(sqrt)
00605 #undef Global_Vector_Function
00606 
00607 
00608 #define Vector_Vector_Functions(NameTo,NameFrom,ope)                      \
00609   template <class DataType, class VectorType>                             \
00610   inline void NameTo (Vector(20)<DataType> &x, const VectorType &y)        \
00611     {                                                                     \
00612       x(0) ope y(0);                                                      \
00613       x(1) ope y(1);                                                      \
00614       x(2) ope y(2);                                                      \
00615       x(3) ope y(3);                                                      \
00616       x(4) ope y(4);                                                      \
00617       x(5) ope y(5);                                                      \
00618       x(6) ope y(6);                                                      \
00619       x(7) ope y(7);                                                      \
00620       x(8) ope y(8);                                                      \
00621       x(9) ope y(9);                                                      \
00622       x(10) ope y(10);                                                    \
00623       x(11) ope y(11);                                                    \
00624       x(12) ope y(12);                                                    \
00625       x(13) ope y(13);                                                    \
00626       x(14) ope y(14);                                                    \
00627       x(15) ope y(15);                                                    \
00628       x(16) ope y(16);                                                    \
00629       x(17) ope y(17);                                                    \
00630       x(18) ope y(18);                                                    \
00631       x(19) ope y(19);                                                    \
00632     }                                                                     \
00633   template <class DataType, class VectorType>                             \
00634   inline void NameFrom (VectorType &x, const Vector(20)<DataType> &y)      \
00635     {                                                                     \
00636       x(0) ope y(0);                                                      \
00637       x(1) ope y(1);                                                      \
00638       x(2) ope y(2);                                                      \
00639       x(3) ope y(3);                                                      \
00640       x(4) ope y(4);                                                      \
00641       x(5) ope y(5);                                                      \
00642       x(6) ope y(6);                                                      \
00643       x(7) ope y(7);                                                      \
00644       x(8) ope y(8);                                                      \
00645       x(9) ope y(9);                                                      \
00646       x(10) ope y(10);                                                    \
00647       x(11) ope y(11);                                                    \
00648       x(12) ope y(12);                                                    \
00649       x(13) ope y(13);                                                    \
00650       x(14) ope y(14);                                                    \
00651       x(15) ope y(15);                                                    \
00652       x(16) ope y(16);                                                    \
00653       x(17) ope y(17);                                                    \
00654       x(18) ope y(18);                                                    \
00655       x(19) ope y(19);                                                    \
00656     }
00657 
00658    Vector_Vector_Functions(equals_to,equals_from,=)
00659    Vector_Vector_Functions(plus_to,plus_from,+=)
00660    Vector_Vector_Functions(minus_to,minus_from,-=)
00661    Vector_Vector_Functions(multiply_to,multiply_from,*=)
00662    Vector_Vector_Functions(divide_to,divide_from,/=)
00663 #undef Vector_Vector_Functions
00664 
00665 
00666 #endif


Quickstart     Users Guide     Programmers Reference     Installation      Examples     Download



AMROC Main      Home      Contact
last update: 06/01/04