$treeview $search $mathjax
|
Palabos
Version 1.1
$projectbrief
|
$projectbrief
|
$searchbox |
00001 /* This file is part of the Palabos library. 00002 * 00003 * Copyright (C) 2011 FlowKit Sarl 00004 * Avenue de Chailly 23 00005 * 1012 Lausanne, Switzerland 00006 * E-mail contact: contact@flowkit.com 00007 * 00008 * The most recent release of Palabos can be downloaded at 00009 * <http://www.palabos.org/> 00010 * 00011 * The library Palabos is free software: you can redistribute it and/or 00012 * modify it under the terms of the GNU Affero General Public License as 00013 * published by the Free Software Foundation, either version 3 of the 00014 * License, or (at your option) any later version. 00015 * 00016 * The library is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 * GNU Affero General Public License for more details. 00020 * 00021 * You should have received a copy of the GNU Affero General Public License 00022 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00023 */ 00024 00029 #ifndef ARRAY_H 00030 #define ARRAY_H 00031 00032 #include "core/globalDefs.h" 00033 #include "core/plbDebug.h" 00034 #include <algorithm> 00035 00036 namespace plb { 00037 00048 template<typename T, pluint size> 00049 class Array { 00050 public: 00051 Array() { } 00054 template<typename U> 00055 Array(Array<U,size> const& rhs) { 00056 std::copy(&rhs[0], &rhs[0]+size, data); 00057 } 00060 template<typename U> 00061 Array<T,size>& operator=(Array<U,size> const& rhs) { 00062 std::copy(&rhs[0], &rhs[0]+size, data); 00063 } 00064 T& operator[](pluint index) { 00065 PLB_PRECONDITION(index<size); 00066 return data[index]; 00067 } 00068 T const& operator[](pluint index) const { 00069 PLB_PRECONDITION(index<size); 00070 return data[index]; 00071 } 00072 void from_cArray(T const* cArray) { 00073 std::copy(cArray, cArray+size, data); 00074 } 00075 void to_cArray(T* cArray) const { 00076 std::copy(data, data+size, cArray); 00077 } 00078 void resetToZero() { 00079 std::fill_n(data, size, T()); 00080 } 00081 Array<T,size>& operator += (Array<T,size> const& b) { 00082 for (pluint i=0; i<size; ++i) { 00083 data[i] += b[i]; 00084 } 00085 return *this; 00086 } 00087 Array<T,size>& operator += (T alpha) { 00088 for (pluint i=0; i<size; ++i) { 00089 data[i] += alpha; 00090 } 00091 return *this; 00092 } 00093 Array<T,size>& operator -= (Array<T,size> const& b) { 00094 for (pluint i=0; i<size; ++i) { 00095 data[i] -= b[i]; 00096 } 00097 return *this; 00098 } 00099 Array<T,size>& operator -= (T alpha) { 00100 for (pluint i=0; i<size; ++i) { 00101 data[i] -= alpha; 00102 } 00103 return *this; 00104 } 00105 Array<T,size>& operator *= (Array<T,size> const& b) { 00106 for (pluint i=0; i<size; ++i) { 00107 data[i] *= b[i]; 00108 } 00109 return *this; 00110 } 00111 Array<T,size>& operator *= (T alpha) { 00112 for (pluint i=0; i<size; ++i) { 00113 data[i] *= alpha; 00114 } 00115 return *this; 00116 } 00117 Array<T,size>& operator /= (Array<T,size> const& b) { 00118 for (pluint i=0; i<size; ++i) { 00119 data[i] /= b[i]; 00120 } 00121 return *this; 00122 } 00123 Array<T,size>& operator /= (T alpha) { 00124 for (pluint i=0; i<size; ++i) { 00125 data[i] /= alpha; 00126 } 00127 return *this; 00128 } 00129 private: 00130 T data[size]; 00131 }; 00132 00133 template <typename T, pluint size> 00134 Array<T,size> operator+(Array<T,size> const& a, Array<T,size> const& b) { 00135 Array<T,size> result; 00136 for (pluint i=0; i<size; ++i) { 00137 result[i] = a[i] + b[i]; 00138 } 00139 return result; 00140 } 00141 00142 template<typename T, pluint size> 00143 Array<T,size> operator+(Array<T,size> const& a, T alpha) { 00144 Array<T,size> result; 00145 for (pluint i=0; i<size; ++i) { 00146 result[i] = a[i] + alpha; 00147 } 00148 return result; 00149 } 00150 00151 template<typename T, pluint size> 00152 Array<T,size> operator+(T alpha, Array<T,size> const& a) { 00153 Array<T,size> result; 00154 for (pluint i=0; i<size; ++i) { 00155 result[i] = alpha + a[i]; 00156 } 00157 return result; 00158 } 00159 00160 template<typename T, pluint size> 00161 Array<T,size> operator-(Array<T,size> const& a, Array<T,size> const& b) { 00162 Array<T,size> result; 00163 for (pluint i=0; i<size; ++i) { 00164 result[i] = a[i] - b[i]; 00165 } 00166 return result; 00167 } 00168 00169 template<typename T, pluint size> 00170 Array<T,size> operator-(Array<T,size> const& a) { 00171 Array<T,size> result; 00172 for (pluint i=0; i<size; ++i) { 00173 result[i] = -a[i]; 00174 } 00175 return result; 00176 } 00177 00178 template<typename T, pluint size> 00179 Array<T,size> operator-(Array<T,size> const& a, T alpha) { 00180 Array<T,size> result; 00181 for (pluint i=0; i<size; ++i) { 00182 result[i] = a[i] - alpha; 00183 } 00184 return result; 00185 } 00186 00187 template<typename T, pluint size> 00188 Array<T,size> operator-(T alpha, Array<T,size> const& a) { 00189 Array<T,size> result; 00190 for (pluint i=0; i<size; ++i) { 00191 result[i] = alpha - a[i]; 00192 } 00193 return result; 00194 } 00195 00196 template<typename T, pluint size> 00197 Array<T,size> operator*(Array<T,size> const& a, Array<T,size> const& b) { 00198 Array<T,size> result; 00199 for (pluint i=0; i<size; ++i) { 00200 result[i] = a[i] * b[i]; 00201 } 00202 return result; 00203 } 00204 00205 template<typename T, pluint size> 00206 Array<T,size> operator*(Array<T,size> const& a, T alpha) { 00207 Array<T,size> result; 00208 for (pluint i=0; i<size; ++i) { 00209 result[i] = a[i] * alpha; 00210 } 00211 return result; 00212 } 00213 00214 template<typename T, pluint size> 00215 Array<T,size> operator*(T alpha, Array<T,size> const& a) { 00216 Array<T,size> result; 00217 for (pluint i=0; i<size; ++i) { 00218 result[i] = alpha * a[i]; 00219 } 00220 return result; 00221 } 00222 00223 template<typename T, pluint size> 00224 Array<T,size> operator/(Array<T,size> const& a, Array<T,size> const& b) { 00225 Array<T,size> result; 00226 for (pluint i=0; i<size; ++i) { 00227 result[i] = a[i] / b[i]; 00228 } 00229 return result; 00230 } 00231 00232 template<typename T, pluint size> 00233 Array<T,size> operator/(Array<T,size> const& a, T alpha) { 00234 Array<T,size> result; 00235 for (pluint i=0; i<size; ++i) { 00236 result[i] = a[i] / alpha; 00237 } 00238 return result; 00239 } 00240 00241 template<typename T, pluint size> 00242 inline bool operator==(Array<T,size> const& A, Array<T,size> const& B) { 00243 for (pluint iA = 0; iA < size; ++iA) { 00244 if (A[iA] != B[iA]) return false; 00245 } 00246 return true; 00247 } 00248 00249 template<typename T, pluint size> 00250 inline bool operator!=(Array<T,size> const& A, Array<T,size> const& B) { 00251 for (pluint iA = 0; iA < size; ++iA) { 00252 if (A[iA] != B[iA]) return true; 00253 } 00254 return false; 00255 } 00256 00257 template<typename T, pluint size> 00258 inline bool operator<(Array<T,size> const& A, Array<T,size> const& B) { 00259 for (pluint iA=0; iA<size; ++iA) { 00260 if (A[iA] < B[iA]) return true; 00261 if (A[iA] > B[iA]) return false; 00262 } 00263 return false; 00264 } 00265 00266 template<typename T, pluint size> 00267 Array<T,size> operator/(T alpha, Array<T,size> const& a) { 00268 Array<T,size> result; 00269 for (pluint i=0; i<size; ++i) { 00270 result[i] = alpha / a[i]; 00271 } 00272 return result; 00273 } 00274 00275 00276 template<typename T> 00277 class Array<T,2> { 00278 public: 00279 Array() { } 00280 Array(T x, T y) { 00281 data[0] = x; 00282 data[1] = y; 00283 } 00284 template<typename U> 00285 Array(Array<U,2> const& rhs) { 00286 data[0] = (T) rhs[0]; 00287 data[1] = (T) rhs[1]; 00288 } 00289 template<typename U> 00290 Array<T,2>& operator=(Array<U,2> const& rhs) { 00291 data[0] = (T) rhs[0]; 00292 data[1] = (T) rhs[1]; 00293 } 00294 T& operator[](pluint index) { 00295 PLB_PRECONDITION(index<2); 00296 return data[index]; 00297 } 00298 T const& operator[](pluint index) const { 00299 PLB_PRECONDITION(index<2); 00300 return data[index]; 00301 } 00302 void from_cArray(T const* cArray) { 00303 data[0] = cArray[0]; 00304 data[1] = cArray[1]; 00305 } 00306 void to_cArray(T* cArray) const { 00307 cArray[0] = data[0]; 00308 cArray[1] = data[1]; 00309 } 00310 void resetToZero() { 00311 data[0] = T(); 00312 data[1] = T(); 00313 } 00314 Array<T,2>& operator+=(Array<T,2> const& b) { 00315 data[0] += b[0]; 00316 data[1] += b[1]; 00317 return *this; 00318 } 00319 Array<T,2>& operator+=(T alpha) { 00320 data[0] += alpha; 00321 data[1] += alpha; 00322 return *this; 00323 } 00324 Array<T,2>& operator-=(Array<T,2> const& b) { 00325 data[0] -= b[0]; 00326 data[1] -= b[1]; 00327 return *this; 00328 } 00329 Array<T,2>& operator-=(T alpha) { 00330 data[0] -= alpha; 00331 data[1] -= alpha; 00332 return *this; 00333 } 00334 Array<T,2>& operator*=(Array<T,2> const& b) { 00335 data[0] *= b[0]; 00336 data[1] *= b[1]; 00337 return *this; 00338 } 00339 Array<T,2>& operator*=(T alpha) { 00340 data[0] *= alpha; 00341 data[1] *= alpha; 00342 return *this; 00343 } 00344 Array<T,2>& operator/=(Array<T,2> const& b) { 00345 data[0] /= b[0]; 00346 data[1] /= b[1]; 00347 return *this; 00348 } 00349 Array<T,2>& operator/=(T alpha) { 00350 data[0] /= alpha; 00351 data[1] /= alpha; 00352 return *this; 00353 } 00354 private: 00355 T data[2]; 00356 }; 00357 00358 template<typename T> 00359 Array<T,2> operator+(Array<T,2> const& a, Array<T,2> const& b) { 00360 return Array<T,2>(a[0]+b[0], a[1]+b[1]); 00361 } 00362 00363 template<typename T> 00364 Array<T,2> operator+(Array<T,2> const& a, T alpha) { 00365 return Array<T,2>(a[0]+alpha, a[1]+alpha); 00366 } 00367 00368 template<typename T> 00369 Array<T,2> operator+(T alpha, Array<T,2> const& a) { 00370 return Array<T,2>(alpha+a[0], alpha+a[1]); 00371 } 00372 00373 template<typename T> 00374 Array<T,2> operator-(Array<T,2> const& a, Array<T,2> const& b) { 00375 return Array<T,2>(a[0]-b[0], a[1]-b[1]); 00376 } 00377 00378 template<typename T> 00379 Array<T,2> operator-(Array<T,2> const& a) { 00380 return Array<T,2>(-a[0],-a[1]); 00381 } 00382 00383 template<typename T> 00384 Array<T,2> operator-(Array<T,2> const& a, T alpha) { 00385 return Array<T,2>(a[0]-alpha, a[1]-alpha); 00386 } 00387 00388 template<typename T> 00389 Array<T,2> operator-(T alpha, Array<T,2> const& a) { 00390 return Array<T,2>(alpha-a[0], alpha-a[1]); 00391 } 00392 00393 template<typename T> 00394 Array<T,2> operator*(Array<T,2> const& a, Array<T,2> const& b) { 00395 return Array<T,2>(a[0]*b[0], a[1]*b[1]); 00396 } 00397 00398 template<typename T> 00399 Array<T,2> operator*(Array<T,2> const& a, T alpha) { 00400 return Array<T,2>(a[0]*alpha, a[1]*alpha); 00401 } 00402 00403 template<typename T> 00404 Array<T,2> operator*(T alpha, Array<T,2> const& a) { 00405 return Array<T,2>(alpha*a[0], alpha*a[1]); 00406 } 00407 00408 template<typename T> 00409 Array<T,2> operator/(Array<T,2> const& a, Array<T,2> const& b) { 00410 return Array<T,2>(a[0]/b[0], a[1]/b[1]); 00411 } 00412 00413 template<typename T> 00414 Array<T,2> operator/(Array<T,2> const& a, T alpha) { 00415 return Array<T,2>(a[0]/alpha, a[1]/alpha); 00416 } 00417 00418 template<typename T> 00419 Array<T,2> operator/(T alpha, Array<T,2> const& a) { 00420 return Array<T,2>(alpha/a[0], alpha/a[1]); 00421 } 00422 00423 template<typename T> 00424 class Array<T,3> { 00425 public: 00426 Array() { } 00427 Array(T x, T y, T z) { 00428 data[0] = x; 00429 data[1] = y; 00430 data[2] = z; 00431 } 00432 template<typename U> 00433 Array(Array<U,3> const& rhs) { 00434 data[0] = (T) rhs[0]; 00435 data[1] = (T) rhs[1]; 00436 data[2] = (T) rhs[2]; 00437 } 00438 template<typename U> 00439 Array<T,3>& operator=(Array<U,3> const& rhs) { 00440 data[0] = (T) rhs[0]; 00441 data[1] = (T) rhs[1]; 00442 data[2] = (T) rhs[2]; 00443 } 00444 T& operator[](pluint index) { 00445 PLB_PRECONDITION(index<3); 00446 return data[index]; 00447 } 00448 T const& operator[](pluint index) const { 00449 PLB_PRECONDITION(index<3); 00450 return data[index]; 00451 } 00452 void from_cArray(T const* cArray) { 00453 data[0] = cArray[0]; 00454 data[1] = cArray[1]; 00455 data[2] = cArray[2]; 00456 } 00457 void to_cArray(T* cArray) const { 00458 cArray[0] = data[0]; 00459 cArray[1] = data[1]; 00460 cArray[2] = data[2]; 00461 } 00462 void resetToZero() { 00463 data[0] = T(); 00464 data[1] = T(); 00465 data[2] = T(); 00466 } 00467 Array<T,3>& operator += (Array<T,3> const& b) { 00468 data[0] += b[0]; 00469 data[1] += b[1]; 00470 data[2] += b[2]; 00471 return *this; 00472 } 00473 Array<T,3>& operator += (T alpha) { 00474 data[0] += alpha; 00475 data[1] += alpha; 00476 data[2] += alpha; 00477 return *this; 00478 } 00479 Array<T,3>& operator -= (Array<T,3> const& b) { 00480 data[0] -= b[0]; 00481 data[1] -= b[1]; 00482 data[2] -= b[2]; 00483 return *this; 00484 } 00485 Array<T,3>& operator -= (T alpha) { 00486 data[0] -= alpha; 00487 data[1] -= alpha; 00488 data[2] -= alpha; 00489 return *this; 00490 } 00491 Array<T,3>& operator *= (Array<T,3> const& b) { 00492 data[0] *= b[0]; 00493 data[1] *= b[1]; 00494 data[2] *= b[2]; 00495 return *this; 00496 } 00497 Array<T,3>& operator *= (T alpha) { 00498 data[0] *= alpha; 00499 data[1] *= alpha; 00500 data[2] *= alpha; 00501 return *this; 00502 } 00503 Array<T,3>& operator /= (Array<T,3> const& b) { 00504 data[0] /= b[0]; 00505 data[1] /= b[1]; 00506 data[2] /= b[2]; 00507 return *this; 00508 } 00509 Array<T,3>& operator /= (T alpha) { 00510 data[0] /= alpha; 00511 data[1] /= alpha; 00512 data[2] /= alpha; 00513 return *this; 00514 } 00515 private: 00516 T data[3]; 00517 }; 00518 00519 template<typename T> 00520 Array<T,3> operator+(Array<T,3> const& a, Array<T,3> const& b) { 00521 return Array<T,3>(a[0]+b[0], a[1]+b[1], a[2]+b[2]); 00522 } 00523 00524 template<typename T> 00525 Array<T,3> operator+(Array<T,3> const& a, T alpha) { 00526 return Array<T,3>(a[0]+alpha, a[1]+alpha, a[2]+alpha); 00527 } 00528 00529 template<typename T> 00530 Array<T,3> operator+(T alpha, Array<T,3> const& a) { 00531 return Array<T,3>(alpha+a[0], alpha+a[1], alpha+a[2]); 00532 } 00533 00534 template<typename T> 00535 Array<T,3> operator-(Array<T,3> const& a, Array<T,3> const& b) { 00536 return Array<T,3>(a[0]-b[0], a[1]-b[1], a[2]-b[2]); 00537 } 00538 00539 template<typename T> 00540 Array<T,3> operator-(Array<T,3> const& a) { 00541 return Array<T,3>(-a[0], -a[1], -a[2]); 00542 } 00543 00544 template<typename T> 00545 Array<T,3> operator-(Array<T,3> const& a, T alpha) { 00546 return Array<T,3>(a[0]-alpha, a[1]-alpha, a[2]-alpha); 00547 } 00548 00549 template<typename T> 00550 Array<T,3> operator-(T alpha, Array<T,3> const& a) { 00551 return Array<T,3>(alpha-a[0], alpha-a[1], alpha-a[2]); 00552 } 00553 00554 template<typename T> 00555 Array<T,3> operator*(Array<T,3> const& a, Array<T,3> const& b) { 00556 return Array<T,3>(a[0]*b[0], a[1]*b[1], a[2]*b[2]); 00557 } 00558 00559 template<typename T> 00560 Array<T,3> operator*(Array<T,3> const& a, T alpha) { 00561 return Array<T,3>(a[0]*alpha, a[1]*alpha, a[2]*alpha); 00562 } 00563 00564 template<typename T> 00565 Array<T,3> operator*(T alpha, Array<T,3> const& a) { 00566 return Array<T,3>(alpha*a[0], alpha*a[1], alpha*a[2]); 00567 } 00568 00569 template<typename T> 00570 Array<T,3> operator/(Array<T,3> const& a, Array<T,3> const& b) { 00571 return Array<T,3>(a[0]/b[0], a[1]/b[1], a[2]/b[2]); 00572 } 00573 00574 template<typename T> 00575 Array<T,3> operator/(Array<T,3> const& a, T alpha) { 00576 return Array<T,3>(a[0]/alpha, a[1]/alpha, a[2]/alpha); 00577 } 00578 00579 template<typename T> 00580 Array<T,3> operator/(T alpha, Array<T,3> const& a) { 00581 return Array<T,3>(alpha/a[0], alpha/a[1], alpha/a[2]); 00582 } 00583 00584 00585 template<typename T> 00586 class Array<T,4> { 00587 public: 00588 Array() { } 00589 Array(T a0, T a1, T a2, T a3) { 00590 data[0] = a0; 00591 data[1] = a1; 00592 data[2] = a2; 00593 data[3] = a3; 00594 } 00595 template<typename U> 00596 Array(Array<U,4> const& rhs) { 00597 data[0] = (T) rhs[0]; 00598 data[1] = (T) rhs[1]; 00599 data[2] = (T) rhs[2]; 00600 data[3] = (T) rhs[3]; 00601 } 00602 template<typename U> 00603 Array<T,4>& operator=(Array<U,4> const& rhs) { 00604 data[0] = (T) rhs[0]; 00605 data[1] = (T) rhs[1]; 00606 data[2] = (T) rhs[2]; 00607 data[3] = (T) rhs[3]; 00608 } 00609 T& operator[](pluint index) { 00610 PLB_PRECONDITION(index<4); 00611 return data[index]; 00612 } 00613 T const& operator[](pluint index) const { 00614 PLB_PRECONDITION(index<4); 00615 return data[index]; 00616 } 00617 void from_cArray(T const* cArray) { 00618 data[0] = cArray[0]; 00619 data[1] = cArray[1]; 00620 data[2] = cArray[2]; 00621 data[3] = cArray[3]; 00622 } 00623 void to_cArray(T* cArray) const { 00624 cArray[0] = data[0]; 00625 cArray[1] = data[1]; 00626 cArray[2] = data[2]; 00627 cArray[3] = data[3]; 00628 } 00629 void resetToZero() { 00630 data[0] = T(); 00631 data[1] = T(); 00632 data[2] = T(); 00633 data[3] = T(); 00634 } 00635 Array<T,4>& operator += (Array<T,4> const& b) { 00636 data[0] += b[0]; 00637 data[1] += b[1]; 00638 data[2] += b[2]; 00639 data[3] += b[3]; 00640 return *this; 00641 } 00642 Array<T,4>& operator += (T alpha) { 00643 data[0] += alpha; 00644 data[1] += alpha; 00645 data[2] += alpha; 00646 data[3] += alpha; 00647 return *this; 00648 } 00649 Array<T,4>& operator -= (Array<T,4> const& b) { 00650 data[0] -= b[0]; 00651 data[1] -= b[1]; 00652 data[2] -= b[2]; 00653 data[3] -= b[3]; 00654 return *this; 00655 } 00656 Array<T,4>& operator -= (T alpha) { 00657 data[0] -= alpha; 00658 data[1] -= alpha; 00659 data[2] -= alpha; 00660 data[3] -= alpha; 00661 return *this; 00662 } 00663 Array<T,4>& operator *= (Array<T,4> const& b) { 00664 data[0] *= b[0]; 00665 data[1] *= b[1]; 00666 data[2] *= b[2]; 00667 data[3] *= b[3]; 00668 return *this; 00669 } 00670 Array<T,4>& operator *= (T alpha) { 00671 data[0] *= alpha; 00672 data[1] *= alpha; 00673 data[2] *= alpha; 00674 data[3] *= alpha; 00675 return *this; 00676 } 00677 Array<T,4>& operator /= (Array<T,4> const& b) { 00678 data[0] /= b[0]; 00679 data[1] /= b[1]; 00680 data[2] /= b[2]; 00681 data[3] /= b[3]; 00682 return *this; 00683 } 00684 Array<T,4>& operator /= (T alpha) { 00685 data[0] /= alpha; 00686 data[1] /= alpha; 00687 data[2] /= alpha; 00688 data[3] /= alpha; 00689 return *this; 00690 } 00691 private: 00692 T data[4]; 00693 }; 00694 00695 template<typename T> 00696 Array<T,4> operator+(Array<T,4> const& a, Array<T,4> const& b) { 00697 return Array<T,4>(a[0]+b[0], a[1]+b[1], a[2]+b[2], a[3]+b[3]); 00698 } 00699 00700 template<typename T> 00701 Array<T,4> operator+(Array<T,4> const& a, T alpha) { 00702 return Array<T,4>(a[0]+alpha, a[1]+alpha, a[2]+alpha, a[3]+alpha); 00703 } 00704 00705 template<typename T> 00706 Array<T,4> operator+(T alpha, Array<T,4> const& a) { 00707 return Array<T,4>(alpha+a[0], alpha+a[1], alpha+a[2], alpha+a[3]); 00708 } 00709 00710 template<typename T> 00711 Array<T,4> operator-(Array<T,4> const& a, Array<T,4> const& b) { 00712 return Array<T,4>(a[0]-b[0], a[1]-b[1], a[2]-b[2], a[3]-b[3]); 00713 } 00714 00715 template<typename T> 00716 Array<T,4> operator-(Array<T,4> const& a) { 00717 return Array<T,4>(-a[0], -a[1], -a[2], -a[3]); 00718 } 00719 00720 template<typename T> 00721 Array<T,4> operator-(Array<T,4> const& a, T alpha) { 00722 return Array<T,4>(a[0]-alpha, a[1]-alpha, a[2]-alpha, a[3]-alpha); 00723 } 00724 00725 template<typename T> 00726 Array<T,4> operator-(T alpha, Array<T,4> const& a) { 00727 return Array<T,4>(alpha-a[0], alpha-a[1], alpha-a[2], alpha-a[3]); 00728 } 00729 00730 template<typename T> 00731 Array<T,4> operator*(Array<T,4> const& a, Array<T,4> const& b) { 00732 return Array<T,4>(a[0]*b[0], a[1]*b[1], a[2]*b[2], a[3]*b[3]); 00733 } 00734 00735 template<typename T> 00736 Array<T,4> operator*(Array<T,4> const& a, T alpha) { 00737 return Array<T,4>(a[0]*alpha, a[1]*alpha, a[2]*alpha, a[3]*alpha); 00738 } 00739 00740 template<typename T> 00741 Array<T,4> operator*(T alpha, Array<T,4> const& a) { 00742 return Array<T,4>(alpha*a[0], alpha*a[1], alpha*a[2], alpha*a[3]); 00743 } 00744 00745 template<typename T> 00746 Array<T,4> operator/(Array<T,4> const& a, Array<T,4> const& b) { 00747 return Array<T,4>(a[0]/b[0], a[1]/b[1], a[2]/b[2], a[3]/b[3]); 00748 } 00749 00750 template<typename T> 00751 Array<T,4> operator/(Array<T,4> const& a, T alpha) { 00752 return Array<T,4>(a[0]/alpha, a[1]/alpha, a[2]/alpha, a[3]/alpha); 00753 } 00754 00755 template<typename T> 00756 Array<T,4> operator/(T alpha, Array<T,4> const& a) { 00757 return Array<T,4>(alpha/a[0], alpha/a[1], alpha/a[2], alpha/a[3]); 00758 } 00759 00760 } // end namespace plb 00761 00762 #endif
1.6.3
1.6.3