Feel++ 0.91.0
|
#include <boost/concept_check.hpp>
#include <boost/preprocessor/comparison/less.hpp>
#include <boost/preprocessor/comparison/equal.hpp>
#include <boost/preprocessor/logical/and.hpp>
#include <boost/preprocessor/control/if.hpp>
#include <boost/preprocessor/list/at.hpp>
#include <boost/preprocessor/list/cat.hpp>
#include <boost/preprocessor/list/for_each_product.hpp>
#include <boost/preprocessor/logical/or.hpp>
#include <boost/preprocessor/tuple/to_list.hpp>
#include <boost/preprocessor/tuple/eat.hpp>
#include <boost/preprocessor/facilities/empty.hpp>
#include <boost/preprocessor/punctuation/comma.hpp>
#include <boost/preprocessor/facilities/identity.hpp>
#include <boost/preprocessor/arithmetic/add.hpp>
#include <boost/preprocessor/list/filter.hpp>
Classes | |
struct | Feel::type_traits< T > |
Namespaces | |
namespace | Feel |
namespace | Feel::math |
Defines | |
#define | FEEL_FUNC_NAME(T) BOOST_PP_TUPLE_ELEM(3, 0 , T) |
#define | FEEL_FUNC_CALL(T) BOOST_PP_TUPLE_ELEM(3, 1 , T) |
#define | FEEL_FUNC_NONS(T) BOOST_PP_TUPLE_ELEM(3, 2 , T) |
#define | FEEL_STD_FUNCS |
#define | FEEL_STDCOMPLEX_FUNCS |
#define | FEEL_STD_BINARY_FUNCS |
#define | FEEL_MP_FUNCS |
#define | FEEL_MP_BINARY_FUNCS |
#define | FEEL_GLOBAL_FUNCS |
#define | FEEL_GLOBAL_BINARY_FUNCS |
#define | FEEL_TRAITS_FUNC_REAL(T, t) |
#define | FEEL_TRAITS_FUNC_IMAG(T, t) |
#define | FEEL_TRAITS_FUNC_CONJ(T, t) |
#define | FEEL_TRAITS_TYPE(T) BOOST_PP_TUPLE_ELEM(7, 0 , T) |
#define | FEEL_TRAITS_REAL_TYPE(T) BOOST_PP_TUPLE_ELEM(7, 1 , T) |
#define | FEEL_TRAITS_IS_FLOATING(T) BOOST_PP_TUPLE_ELEM(7, 2 , T) |
#define | FEEL_TRAITS_IS_COMPLEX(T) BOOST_PP_TUPLE_ELEM(7, 3 , T) |
#define | FEEL_TRAITS_RANK(T) BOOST_PP_TUPLE_ELEM(7, 4 , T) |
#define | FEEL_TRAITS_EPSILON(T) BOOST_PP_TUPLE_ELEM(7, 5 , T) |
#define | FEEL_TRAITS_FUNC_TYPE(T) BOOST_PP_TUPLE_ELEM(7, 6 , T) |
#define | QD_NTYPES 0 |
#define | QD_DD_TYPE |
#define | QD_QD_TYPE |
#define | MPFR_NTYPES 0 |
#define | MPFR_MP_TYPE |
#define | FEEL_NUMERICAL_NTYPES BOOST_PP_ADD(4, BOOST_PP_ADD( QD_NTYPES, MPFR_NTYPES ) ) |
#define | FEEL_TRAITS_TYPES |
#define | FEEL_TRAITS_OP(_, T) FEEL_TRAITS_OP_CODE T \ |
#define | FEEL_TRAITS_OP_CODE(T) |
#define | FEEL_PRED_FUNC(d, data, elem) BOOST_PP_EQUAL(FEEL_TRAITS_FUNC_TYPE(elem), data) |
#define | FEEL_UNARY_FUNCS_OP(_, TF) FEEL_UNARY_FUNCS_OP_CODE TF \ |
#define | FEEL_UNARY_FUNCS_OP_CODE(T, F) |
#define | FEEL_BINARY_FUNCS_OP(_, TF) FEEL_BINARY_FUNCS_OP_CODE TF \ |
#define | FEEL_BINARY_FUNCS_OP_CODE(T, F) |
Functions | |
Feel::BOOST_PP_LIST_FOR_EACH_PRODUCT (FEEL_TRAITS_OP, 1,(FEEL_TRAITS_TYPES)) | |
Feel::math::BOOST_PP_LIST_FOR_EACH_PRODUCT (FEEL_UNARY_FUNCS_OP, 2,(BOOST_PP_LIST_FILTER(FEEL_PRED_FUNC, 0, FEEL_TRAITS_TYPES), FEEL_STD_FUNCS)) | |
Feel::math::BOOST_PP_LIST_FOR_EACH_PRODUCT (FEEL_UNARY_FUNCS_OP, 2,(BOOST_PP_LIST_FILTER(FEEL_PRED_FUNC, 1, FEEL_TRAITS_TYPES), FEEL_MP_FUNCS)) | |
Feel::math::BOOST_PP_LIST_FOR_EACH_PRODUCT (FEEL_UNARY_FUNCS_OP, 2,(BOOST_PP_LIST_FILTER(FEEL_PRED_FUNC, 2, FEEL_TRAITS_TYPES), FEEL_GLOBAL_FUNCS)) | |
Feel::math::BOOST_PP_LIST_FOR_EACH_PRODUCT (FEEL_UNARY_FUNCS_OP, 2,(BOOST_PP_LIST_FILTER(FEEL_PRED_FUNC, 3, FEEL_TRAITS_TYPES), FEEL_STDCOMPLEX_FUNCS)) | |
Feel::math::BOOST_PP_LIST_FOR_EACH_PRODUCT (FEEL_BINARY_FUNCS_OP, 2,(BOOST_PP_LIST_FILTER(FEEL_PRED_FUNC, 0, FEEL_TRAITS_TYPES), FEEL_STD_BINARY_FUNCS)) | |
Feel::math::BOOST_PP_LIST_FOR_EACH_PRODUCT (FEEL_BINARY_FUNCS_OP, 2,(BOOST_PP_LIST_FILTER(FEEL_PRED_FUNC, 1, FEEL_TRAITS_TYPES), FEEL_MP_BINARY_FUNCS)) | |
Feel::math::BOOST_PP_LIST_FOR_EACH_PRODUCT (FEEL_BINARY_FUNCS_OP, 2,(BOOST_PP_LIST_FILTER(FEEL_PRED_FUNC, 2, FEEL_TRAITS_TYPES), FEEL_GLOBAL_BINARY_FUNCS)) | |
Variables | |
const double | Feel::factor_from_eps = 50 |
const float | Feel::factor_from_eps_fl = 50 |
#define FEEL_BINARY_FUNCS_OP | ( | _, | |
TF | |||
) | FEEL_BINARY_FUNCS_OP_CODE TF \ |
Generate the binary functions for each type
#define FEEL_BINARY_FUNCS_OP_CODE | ( | T, | |
F | |||
) |
template<typename Type2> \ inline \ FEEL_TRAITS_TYPE( T ) FEEL_FUNC_NAME( F )( FEEL_TRAITS_TYPE( T ) const& x, Type2 const& y ) \ { \ return FEEL_FUNC_CALL( F )( x, y ); \ } \
#define FEEL_GLOBAL_BINARY_FUNCS |
BOOST_PP_TUPLE_TO_LIST( \ 1, \ ( \ (pow , ::npwr, npwr ) \ ) \ ) \
#define FEEL_GLOBAL_FUNCS |
BOOST_PP_TUPLE_TO_LIST( \ 18, \ ( \ (abs , ::abs , abs ), /* absolute value*/ \ (sqrt , ::sqrt , sqrt ), /* square root */ \ (norm1 , ::abs , abs ), /* norm1 */ \ (norm2 , ::abs , abs ), /* norm2 */ \ (norm_inf , ::abs , abs ), /* norm_inf */ \ (cos , ::cos , cos ), \ (sin , ::sin , sin ), \ (tan , ::tan , tan ), \ (acos , ::acos , acos ), \ (asin , ::asin , asin ), \ (atan , ::atan , atan ), \ (cosh , ::cosh , cosh ), \ (sinh , ::sinh , sinh ), \ (tanh , ::tanh , tanh ), \ (exp , ::exp , exp ), \ (log , ::log , log ), \ (ceil , ::ceil , ceil ), \ (floor , ::floor, floor) \ ) \ ) \
#define FEEL_MP_BINARY_FUNCS |
BOOST_PP_TUPLE_TO_LIST( \ 1, \ ( \ (pow , mpfr::pow, pow ) \ ) \ ) \
#define FEEL_MP_FUNCS |
BOOST_PP_TUPLE_TO_LIST( \ 18, \ ( \ (abs , mpfr::abs , abs ), /* absolute value*/ \ (sqrt , mpfr::sqrt , sqrt ), /* square root */ \ (norm1 , mpfr::abs , abs ), /* norm1 */ \ (norm2 , mpfr::abs , abs ), /* norm2 */ \ (norm_inf , mpfr::abs , abs ), /* norm_inf */ \ (cos , mpfr::cos , cos ), \ (sin , mpfr::sin , sin ), \ (tan , mpfr::tan , tan ), \ (acos , mpfr::acos , acos ), \ (asin , mpfr::asin , asin ), \ (atan , mpfr::atan , atan ), \ (cosh , mpfr::cosh , cosh ), \ (sinh , mpfr::sinh , sinh ), \ (tanh , mpfr::tanh , tanh ), \ (exp , mpfr::exp , exp ), \ (log , mpfr::log , log ), \ (ceil , mpfr::ceil , ceil ), \ (floor , mpfr::floor, floor) \ ) \ ) \
#define FEEL_STD_BINARY_FUNCS |
BOOST_PP_TUPLE_TO_LIST( \ 1, \ ( \ (pow , std::pow, pow ) \ ) \ ) \
#define FEEL_STD_FUNCS |
BOOST_PP_TUPLE_TO_LIST( \ 19, \ ( \ (abs , std::abs , abs ), /* absolute value*/ \ (sqrt , std::sqrt , sqrt ), /* square root */ \ (norm1 , std::abs , abs ), /* norm1 */ \ (norm2 , std::abs , abs ), /* norm2 */ \ (norm_inf , std::abs , abs ), /* norm_inf */ \ (cos , std::cos , cos ), \ (sin , std::sin , sin ), \ (tan , std::tan , tan ), \ (acos , std::acos , acos ), \ (asin , std::asin , asin ), \ (atan , std::atan , atan ), \ (cosh , std::cosh , cosh ), \ (sinh , std::sinh , sinh ), \ (tanh , std::tanh , tanh ), \ (exp , std::exp , exp ), \ (log , std::log , log ), \ (log10 , std::log10, log10), \ (ceil , std::ceil , ceil ), \ (floor , std::floor, floor) \ ) \ ) \
#define FEEL_STDCOMPLEX_FUNCS |
BOOST_PP_TUPLE_TO_LIST( \ 11, \ ( \ (abs , std::abs , abs ), /* absolute value*/ \ (sqrt , std::sqrt , sqrt ), /* square root */ \ (norm1 , std::abs , abs ), /* norm1 */ \ (norm2 , std::abs , abs ), /* norm2 */ \ (norm_inf , std::abs , abs ), /* norm_inf */ \ (cos , std::cos , cos ), \ (sin , std::sin , sin ), \ (tan , std::tan , tan ), \ (exp , std::exp , exp ), \ (log , std::log , log ), \ (log10 , std::log10, log10 ) \ ) \ ) \
#define FEEL_TRAITS_FUNC_CONJ | ( | T, | |
t | |||
) |
BOOST_PP_IF( FEEL_TRAITS_IS_COMPLEX(T), \ BOOST_PP_IDENTITY( std::conj( t ) ), \ BOOST_PP_IDENTITY( t ) )() \
#define FEEL_TRAITS_FUNC_IMAG | ( | T, | |
t | |||
) |
BOOST_PP_IF( FEEL_TRAITS_IS_COMPLEX(T), \ BOOST_PP_IDENTITY( t.imag() ), \ BOOST_PP_IDENTITY( FEEL_TRAITS_REAL_TYPE(T)( 0.0 ) ) )() \
#define FEEL_TRAITS_FUNC_REAL | ( | T, | |
t | |||
) |
BOOST_PP_IF( FEEL_TRAITS_IS_COMPLEX(T), \ t.real(), \ t ) \
#define FEEL_TRAITS_TYPES |
BOOST_PP_TUPLE_TO_LIST( \ FEEL_NUMERICAL_NTYPES, \ ( \ QD_DD_TYPE \ QD_QD_TYPE \ MPFR_MP_TYPE \ ( float , float , 1, 0, 7 , std::numeric_limits<float>::epsilon()*factor_from_eps_fl , 0 ), \ ( double , double , 1, 0, 8 , std::numeric_limits<double>::epsilon()*factor_from_eps, 0 ), \ ( std::complex<float>, float, 1, 1, 10, std::numeric_limits<float>::epsilon()*factor_from_eps_fl , 3 ), \ ( std::complex<double>, double, 1, 1, 11, std::numeric_limits<double>::epsilon()*factor_from_eps , 3 ) \ ) \ ) \
#define FEEL_UNARY_FUNCS_OP | ( | _, | |
TF | |||
) | FEEL_UNARY_FUNCS_OP_CODE TF \ |
Generate the unary functions for each type
#define FEEL_UNARY_FUNCS_OP_CODE | ( | T, | |
F | |||
) |
inline \ FEEL_TRAITS_TYPE( T ) FEEL_FUNC_NAME( F )( FEEL_TRAITS_TYPE( T ) const& t ) \ { \ return FEEL_FUNC_CALL( F )( t ); \ } \