| 1 | /*
|
|---|
| 2 | * fast_functions.hpp
|
|---|
| 3 | *
|
|---|
| 4 | * Created on: Apr 1, 2010
|
|---|
| 5 | * Author: crueger
|
|---|
| 6 | */
|
|---|
| 7 |
|
|---|
| 8 | #ifndef FAST_FUNCTIONS_HPP_
|
|---|
| 9 | #define FAST_FUNCTIONS_HPP_
|
|---|
| 10 |
|
|---|
| 11 | /**
|
|---|
| 12 | * !@file
|
|---|
| 13 | * This file contains several functions that need to be very fast and which are inlined for this
|
|---|
| 14 | * reason.
|
|---|
| 15 | *
|
|---|
| 16 | * Warning: do not forget inline keyword for functions in this file to avoid multiple definitions!
|
|---|
| 17 | */
|
|---|
| 18 |
|
|---|
| 19 | /********************************* Functions ************************************************/
|
|---|
| 20 |
|
|---|
| 21 | /** hard-coded determinant of a 3x3 matrix.
|
|---|
| 22 | * \param a[9] matrix
|
|---|
| 23 | * \return \f$det(a)\f$
|
|---|
| 24 | */
|
|---|
| 25 | inline double RDET3(const double a[NDIM*NDIM])
|
|---|
| 26 | {
|
|---|
| 27 | return ((a)[0]*(a)[4]*(a)[8] + (a)[3]*(a)[7]*(a)[2] + (a)[6]*(a)[1]*(a)[5] - (a)[2]*(a)[4]*(a)[6] - (a)[5]*(a)[7]*(a)[0] - (a)[8]*(a)[1]*(a)[3]);
|
|---|
| 28 | };
|
|---|
| 29 |
|
|---|
| 30 | /** hard-coded determinant of a 2x2 matrix.
|
|---|
| 31 | * \param a[4] matrix
|
|---|
| 32 | * \return \f$det(a)\f$
|
|---|
| 33 | */
|
|---|
| 34 | inline double RDET2(const double a[4])
|
|---|
| 35 | {
|
|---|
| 36 | return ((a[0])*(a[3])-(a[1])*(a[2]));
|
|---|
| 37 | };
|
|---|
| 38 |
|
|---|
| 39 | /** hard-coded determinant of a 2x2 matrix.
|
|---|
| 40 | * \param a0 (0,0) entry of matrix
|
|---|
| 41 | * \param a1 (0,1) entry of matrix
|
|---|
| 42 | * \param a2 (1,0) entry of matrix
|
|---|
| 43 | * \param a3 (1,1) entry of matrix
|
|---|
| 44 | * \return \f$det(a)\f$
|
|---|
| 45 | */
|
|---|
| 46 | inline double RDET2(const double a0, const double a1, const double a2, const double a3)
|
|---|
| 47 | {
|
|---|
| 48 | return ((a0)*(a3)-(a1)*(a2));
|
|---|
| 49 | };
|
|---|
| 50 |
|
|---|
| 51 | /** Returns the power of \a n with respect to \a base.
|
|---|
| 52 | * \param base basis
|
|---|
| 53 | * \param n power
|
|---|
| 54 | * \return \f$base^n\f$
|
|---|
| 55 | */
|
|---|
| 56 | inline int pot(int base, int n)
|
|---|
| 57 | {
|
|---|
| 58 | int res = 1;
|
|---|
| 59 | int j;
|
|---|
| 60 | for (j=n;j--;)
|
|---|
| 61 | res *= base;
|
|---|
| 62 | return res;
|
|---|
| 63 | };
|
|---|
| 64 |
|
|---|
| 65 | /*************************** Templatized functions ************************************/
|
|---|
| 66 |
|
|---|
| 67 | /** Flips two values.
|
|---|
| 68 | * \param x first value
|
|---|
| 69 | * \param y second value
|
|---|
| 70 | */
|
|---|
| 71 | template <typename T>
|
|---|
| 72 | inline void flip(T &x, T &y)
|
|---|
| 73 | {
|
|---|
| 74 | T tmp;
|
|---|
| 75 | tmp = x;
|
|---|
| 76 | x = y;
|
|---|
| 77 | y = tmp;
|
|---|
| 78 | };
|
|---|
| 79 |
|
|---|
| 80 | #endif /* FAST_FUNCTIONS_HPP_ */
|
|---|