Blockstructured Adaptive Mesh Refinement in object-oriented C++
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 Contactlast update: 06/01/04