1 #ifndef _RHEOLEF_EXPRESSION_H
2 #define _RHEOLEF_EXPRESSION_H
156 #include "rheolef/promote.h"
157 #include "rheolef/undeterminated.h"
158 #include "rheolef/space_constant.h"
160 namespace rheolef {
namespace details {
165 template<
class Op,
class T1,
class T2,
class R>
168 template <
class T>
struct is_error: std::false_type {};
170 template<
class Op,
class T1,
class T2,
class R>
175 template<
class Op,
class T1,
class T2,
class R>
186 template<
class Function>
192 template <
class Arg,
class Result>
195 typedef typename std::decay<typename function_traits<Function>::template arg<0>::type>
::type
217 template <
class Arg,
class Result>
239 template <
class Arg,
class Result>
253 #define _RHEOLEF_generic_unary_scalar(F) \
256 T operator() (const T& x) const { return F(x); } \
259 struct generic_unary_traits<F##_> { \
260 template <class Arg> \
261 struct result_hint { \
262 typedef typename scalar_traits<Arg>::type type; \
264 template <class Arg, class Result> \
266 typedef typename promote< \
267 typename scalar_traits<Arg>::type \
268 ,typename scalar_traits<Result>::type>::type S; \
269 typedef S result_type; \
270 typedef S argument_type; \
272 static space_constant::valued_type \
273 valued_tag (space_constant::valued_type) { \
274 return space_constant::scalar; \
297 #undef _RHEOLEF_generic_unary_scalar
312 template <
class A1,
class R>
334 template <
class A1,
class R>
362 template <
class A1,
class R>
389 template <
class A1,
class R>
405 template<
class Function>
407 template <
class Arg1,
class Arg2>
411 template <
class Arg1,
class Arg2,
class Result>
413 typedef typename std::decay<typename function_traits<Function>::template arg<0>::type>
::type
415 typedef typename std::decay<typename function_traits<Function>::template arg<1>::type>
::type
417 typedef typename std::decay<typename function_traits<Function>::result_type>
::type
434 template <
class A1,
class A2,
class Sfinae =
void>
439 template <
class A1,
class A2>
441 typename
std::enable_if<
442 is_rheolef_arithmetic<A1>::value &&
443 is_rheolef_arithmetic<A2>::value
451 typename
std::enable_if<
452 ! is_rheolef_arithmetic<A>::value>
::type>
457 template <
class T1,
class T2>
465 template <
class A1,
class A2,
class R>
474 template <
class A1,
class A2,
class R>
481 template <
class A1,
class A2,
class R>
483 typedef typename std::conditional<
492 template <
class A1,
class A2,
class R>
495 typedef typename std::conditional<
503 template <
class A1,
class A2,
class R>
510 template <
class A1,
class A2,
class R>
517 template <
class A1,
class A2,
class R>
524 template <
class A1,
class A2,
class R>
535 template <
class Arg1,
class Arg2>
544 template <
class T1,
class T2>
549 template <
class A1,
class A2,
class R>
552 template <
class A1,
class A2>
604 template <
class A1,
class A2>
624 template <
class S1,
class S2>
630 template <
class S1,
class S2>
641 template <
class S1,
class S2>
647 template <
class S1,
class S2>
663 template <
class S1,
class S2>
669 template <
class S1,
class S2>
675 template <
class S1,
class S2>
681 template <
class S1,
class S2>
687 template <
class S1,
class S2>
703 template <
class S1,
class S2>
709 template <
class S1,
class S2>
715 template <
class S1,
class S2>
721 template <
class S1,
class S2>
727 template <
class S1,
class S2>
733 template <
class S1,
class S2>
739 template <
class S1,
class S2>
746 template <
class T1,
class T2>
760 template <
class A2,
class R,
class Sfinae =
void>
761 struct first_argument_hint {
765 template <
class A2,
class R>
770 template <
class A2,
class R>
775 template <
class A2,
class R>
780 template <
class A2,
class R>
782 typename
std::enable_if<is_rheolef_arithmetic<A2>::value>
::type> {
786 template <
class A2,
class R>
791 template <
class A2,
class R>
796 template <
class A2,
class R>
801 template <
class A2,
class R>
806 template <
class A2,
class R>
811 template <
class A2,
class R>
816 template <
class A2,
class R>
821 template <
class A2,
class R>
826 template <
class A2,
class R>
831 template <
class A2,
class R>
836 template <
class A2,
class R>
841 template <
class A2,
class R>
846 template <
class A2,
class R>
851 template <
class A2,
class R>
853 typename
std::enable_if<is_rheolef_arithmetic<R>::value>
::type> {
858 template <
class A2,
class R>
864 template <
class A2,
class R>
870 template <
class A2,
class R>
876 template <
class A2,
class R>
884 template <
class A1,
class R,
class Sfinae =
void>
885 struct second_argument_hint {
889 template <
class A1,
class R>
894 template <
class A1,
class R>
899 template <
class A1,
class R>
904 template <
class A1,
class R>
906 typename
std::enable_if<is_rheolef_arithmetic<A1>::value>
::type> {
910 template <
class A1,
class R>
915 template <
class A1,
class R>
920 template <
class A1,
class R>
925 template <
class A1,
class R>
930 template <
class A1,
class R>
935 template <
class A1,
class R>
940 template <
class A1,
class R>
945 template <
class A1,
class R>
950 template <
class A1,
class R>
955 template <
class A1,
class R>
960 template <
class A1,
class R>
965 template <
class A1,
class R>
970 template <
class A1,
class R>
972 typename
std::enable_if<is_rheolef_arithmetic<R>::value>
::type> {
976 template <
class A1,
class R>
981 template <
class A1,
class R>
986 template <
class A1,
class R>
991 template <
class A1,
class R>
999 template <
class A1,
class A2,
class R>
1008 template <
class A1,
class A2,
class R>
1015 template <
class A1,
class A2,
class R>
1025 template <
class A1,
class A2,
class R>
1034 template <
class A1,
class A2,
class R>
1041 template <
class A1,
class A2,
class R>
1048 template <
class A1,
class A2,
class R>
1055 template <
class A1,
class A2,
class R>
1062 template <
class A1,
class A2,
class R>
1069 template <
class A1,
class A2,
class R>
1076 template <
class A1,
class A2,
class R>
1083 template <
class A1,
class A2,
class R>
1090 template <
class A1,
class A2,
class R>
1097 template <
class A1,
class A2,
class R>
1104 template <
class A1,
class A2,
class R>
1111 template <
class A1,
class A2,
class R>
1118 template <
class A1,
class A2,
class R>
1125 template <
class A1,
class A2,
class R>
1132 template <
class A1,
class A2,
class R>
1141 template <
class A1,
class A2,
class R>
1148 template <
class Arg1,
class Arg2>
1149 struct result_hint {
1159 template <
class T1,
class T2,
class Sfinae =
void>
1164 template <
class T1,
class T2>
1166 typename
std::enable_if<
1167 is_rheolef_arithmetic<T1>::value &&
1168 is_rheolef_arithmetic<T2>::value
1174 template <
class T1,
class T2>
1176 typename
std::enable_if<
1177 is_undeterminated<T1>::value &&
1178 is_undeterminated<T2>::value
1186 typename
std::enable_if<
1187 ! is_rheolef_arithmetic<T>::value
1188 && ! is_undeterminated<T>::value
1210 template <
class T1,
class T2>
1215 template <
class T1,
class T2>
1232 template <
class T1,
class T2>
1237 template <
class T1,
class T2>
1242 template <
class T1,
class T2>
1247 template <
class T1,
class T2>
1256 template <
class T1,
class T2>
1261 template <
class T1,
class T2>
1266 template <
class T1,
class T2>
1272 template <
class T1,
class T2>
1278 template <
class Arg1,
class Arg2>
1279 struct result_hint {
1282 template <
class Arg1,
class Arg2,
class Result>
1291 template <
class A1,
class A2,
class R>
1298 template <
class A1,
class A2,
class R>
1301 typedef typename std::conditional<
1309 template <
class A1,
class A2,
class R>
1315 typedef typename std::conditional<
1324 template <
class A1,
class A2,
class R>
1331 template <
class A1,
class A2,
class R>
1338 template <
class A1,
class A2,
class R>
1341 typedef typename std::conditional<
1351 template <
class A1,
class A2,
class R>
1374 template <
class Arg1,
class Arg2>
1378 template <
class A1,
class A2,
class R>
1397 typedef typename std::conditional<
1399 ,
typename std::conditional<
1406 typedef typename std::conditional<
1408 ,
typename std::conditional<
1415 typedef typename std::conditional<
1417 ,
typename std::conditional<
1427 #define _RHEOLEF_generic_binary_scalar(F) \
1429 template<class A1, class A2> \
1430 typename promote<A1,A2>::type \
1431 operator() (const A1& x, const A2& y) const { \
1432 typedef typename promote<A1,A2>::type R; \
1433 return F(R(x),R(y)); } \
1436 struct generic_binary_traits<F##_> : scalar_binary_traits<F##_> {}; \
1443 #undef _RHEOLEF_generic_binary_scalar
1459 template <
class Arg1,
class Arg2>
1460 struct result_hint {
1463 template <
class A1,
class A2,
class R>
1482 typedef typename std::conditional<
1484 ,
typename std::conditional<
1491 typedef typename std::conditional<
1493 ,
typename std::conditional<
1500 typedef typename std::conditional<
1502 ,
typename std::conditional<
1522 template <
class A1,
class A2>
1527 template <
class A1,
class A2>
1532 template <
class A1,
class A2>
1537 template <
class A1,
class A2>
1543 template<
class A1,
class A2>
1553 template <
class A1,
class A2,
class R>
1561 template <
class A1,
class A2,
class R>
1564 typedef typename std::conditional<
1569 typedef typename std::conditional<
1579 template <
class A1,
class A2,
class R>
1588 template <
class A1,
class A2,
class R>
1597 template <
class A1,
class A2,
class R>
1604 template <
class A1,
class A2,
class R>
1614 template <
class A1,
class A2,
class R>
1628 template <
class A1,
class A2,
class R>
1635 template <
class A1,
class A2,
class R>
1645 template <
class A1,
class A2,
class R>
1652 template <
class A1,
class A2,
class R>
1662 template <
class A1,
class A2,
class R>
1669 template <
class Arg1,
class Arg2>
1670 struct result_hint {
1683 template<
class BinaryFunction,
class A1>
1693 template<
class BinaryFunction,
class A1>
1696 struct result_hint {
1699 template <
class A2,
class Result>
1705 template <
class A2,
class T>
1711 template <
class R,
class T>
1718 template <
class T1,
class T>
1734 template<
class BinaryFunction,
class A2>
1744 template<
class BinaryFunction,
class A2>
1747 struct result_hint {
1750 template <
class A1,
class Result>
1756 template <
class A1,
class T>
1762 template <
class R,
class T>
1769 template <
class T1,
class T>
1787 template<
class BinaryFunction>
1790 template<
class A1,
class A2>
1796 template<
class BinaryFunction>
1798 template <
class A1,
class A2>
1801 template <
class A1,
class A2,
class Result>
1817 template<
class Function>
1821 template<
class Result,
class Arg>
1823 typedef std::function<Result(Arg)>
type;
1825 template<
class Result,
class Arg1,
class Arg2>
1827 typedef std::function<Result(Arg1,Arg2)>
type;
1830 template<
class Function>
1837 template<
class Result,
class Arg>
1839 std::pointer_to_unary_function<Arg,Result>
1842 return std::ptr_fun(
f);
1844 template<
class Result,
class Arg1,
class Arg2>
1846 std::pointer_to_binary_function<Arg1,Arg2,Result>
1849 return std::ptr_fun(
f);
rheolef::std BinaryFunction
_RHEOLEF_generic_unary_scalar(cos) _RHEOLEF_generic_unary_scalar(sin) _RHEOLEF_generic_unary_scalar(tan) _RHEOLEF_generic_unary_scalar(acos) _RHEOLEF_generic_unary_scalar(asin) _RHEOLEF_generic_unary_scalar(atan) _RHEOLEF_generic_unary_scalar(cosh) _RHEOLEF_generic_unary_scalar(sinh) _RHEOLEF_generic_unary_scalar(tanh) _RHEOLEF_generic_unary_scalar(exp) _RHEOLEF_generic_unary_scalar(log) _RHEOLEF_generic_unary_scalar(log10) _RHEOLEF_generic_unary_scalar(sqrt) _RHEOLEF_generic_unary_scalar(abs) _RHEOLEF_generic_unary_scalar(fabs) _RHEOLEF_generic_unary_scalar(floor) _RHEOLEF_generic_unary_scalar(ceil) _RHEOLEF_generic_unary_scalar(sqr) struct tr_
rheolef::details::is_vec dot
_RHEOLEF_generic_binary_scalar(atan2) _RHEOLEF_generic_binary_scalar(pow) _RHEOLEF_generic_binary_scalar(fmod) _RHEOLEF_generic_binary_scalar(min) _RHEOLEF_generic_binary_scalar(max) struct dot_
Function function_wrap(Function f)
valued_type multiplies_result_tag(space_constant::valued_type tag1, space_constant::valued_type tag2)
valued_type divides_result_tag(space_constant::valued_type tag1, space_constant::valued_type tag2)
This file is part of Rheolef.
csr< T, sequential > trans(const csr< T, sequential > &a)
trans(a): see the form page for the full documentation
T norm(const vec< T, M > &x)
norm(x): see the expression page for the full documentation
T norm2(const vec< T, M > &x)
norm2(x): see the expression page for the full documentation
U tr(const tensor_basic< U > &a, size_t d=3)
T ddot(const tensor_basic< T > &a, const tensor_basic< T > &b)
ddot(x,y): see the expression page for the full documentation
space_mult_list< T, M > pow(const space_basic< T, M > &X, size_t n)
tensor_basic< T > exp(const tensor_basic< T > &a, size_t d)
generic_binary_traits< BinaryFunction >::template result_hint< A1, A2 >::type operator()(const A2 &x2) const
binder_first(const BinaryFunction &f, const A1 &x1)
binder_second(const BinaryFunction &f, const A2 &x2)
generic_binary_traits< BinaryFunction >::template result_hint< A1, A2 >::type operator()(const A1 &x1) const
ddot_result< A1, A2 >::type operator()(const A1 &x, const A2 &y) const
promote< typename float_traits< A1 >::type, typename float_traits< A2 >::type >::type S
promote< typename float_traits< A1 >::type, typename float_traits< A2 >::type >::type S
promote< typename float_traits< A1 >::type, typename float_traits< A2 >::type >::type S
promote< typename float_traits< A1 >::type, typename float_traits< A2 >::type >::type S
binop_error< ddot_, A1, A2, undeterminated_basic< S > > type
undeterminated_basic< typename promote< T1, T2 >::type > type
promote< T1, T2 >::type type
scalar_traits< T >::type S
binop_error< details::divides, T, T, undeterminated_basic< S > > type
binop_error< details::divides, T, point_basic< T >, undeterminated_basic< T > > type
binop_error< details::divides, T, tensor3_basic< T >, undeterminated_basic< T > > type
binop_error< details::divides, T, tensor4_basic< T >, undeterminated_basic< T > > type
binop_error< details::divides, T, tensor_basic< T >, undeterminated_basic< T > > type
promote< T1, T2 >::type S
binop_error< details::divides, point_basic< T1 >, tensor3_basic< T2 >, undeterminated_basic< S > > type
promote< T1, T2 >::type S
binop_error< details::divides, point_basic< T1 >, tensor4_basic< T2 >, undeterminated_basic< S > > type
promote< T1, T2 >::type S
binop_error< details::divides, point_basic< T1 >, tensor_basic< T2 >, undeterminated_basic< S > > type
binop_error< details::divides, tensor3_basic< T1 >, point_basic< T2 >, undeterminated_basic< S > > type
promote< T1, T2 >::type S
promote< T1, T2 >::type S
binop_error< details::divides, tensor3_basic< T1 >, tensor4_basic< T2 >, undeterminated_basic< S > > type
promote< T1, T2 >::type S
binop_error< details::divides, tensor3_basic< T1 >, tensor_basic< T2 >, undeterminated_basic< S > > type
promote< T1, T2 >::type S
binop_error< details::divides, tensor_basic< T1 >, point_basic< T2 >, undeterminated_basic< S > > type
binop_error< details::divides, tensor_basic< T1 >, tensor3_basic< T2 >, undeterminated_basic< S > > type
promote< T1, T2 >::type S
promote< T1, T2 >::type S
binop_error< details::divides, tensor_basic< T1 >, tensor4_basic< T2 >, undeterminated_basic< S > > type
undeterminated_basic< typename promote< typename scalar_traits< T1 >::type, typename scalar_traits< T2 >::type >::type > type
divides_result< T1, T2 >::type operator()(const T1 &a, const T2 &b) const
std::function< Result(Arg1, Arg2)> type
std::function< Result(Arg)> type
std::decay< typename function_traits< Function >::template arg< 0 >::type >::type first_argument_type
std::decay< typename function_traits< Function >::template arg< 1 >::type >::type second_argument_type
std::decay< typename function_traits< Function >::result_type >::type result_type
function_traits< Function >::result_type type
ddot_result< A1, A2 >::type result_type
std::conditional< is_undeterminated< A2 >::value &&is_error< result_type >::value,result_type,A2 >::type second_argument_type
std::conditional< is_undeterminated< A1 >::value &&is_error< result_type >::value,result_type,A1 >::type first_argument_type
tensor4_basic< A1 > first_argument_type
tensor_basic< R > result_type
tensor_basic< A2 > second_argument_type
tensor4_basic< A1 > first_argument_type
tensor_basic< R > result_type
tensor_basic< A2 > second_argument_type
binop_error< ddot_, A1, A2, R > E
std::conditional< is_scalar< R >::value, tensor_basic< A2 >, E >::type second_argument_type
tensor_basic< A1 > first_argument_type
undeterminated_basic< A2 > second_argument_type
undeterminated_basic< R > result_type
tensor_basic< A1 > first_argument_type
tensor_basic< A1 > first_argument_type
tensor_basic< R > result_type
tensor4_basic< A2 > second_argument_type
binop_error< ddot_, A1, A2, R > E
std::conditional< is_scalar< R >::value, tensor_basic< A1 >, E >::type first_argument_type
tensor_basic< A2 > second_argument_type
tensor_basic< A1 > first_argument_type
tensor_basic< R > result_type
tensor4_basic< A2 > second_argument_type
undeterminated_basic< A1 > first_argument_type
undeterminated_basic< R > result_type
tensor_basic< A2 > second_argument_type
undeterminated_basic< A1 > first_argument_type
undeterminated_basic< A2 > second_argument_type
undeterminated_basic< R > result_type
binop_error< ddot_, A1, A2, R > E
std::conditional< is_scalar< R >::value, tensor_basic< A2 >, E >::type second_argument_type
std::conditional< is_scalar< R >::value, tensor_basic< A1 >, E >::type first_argument_type
std::conditional< is_undeterminated< A1 >::value, T, A1 >::type first_argument_type
binop_error< ddot_, A1, A2, R > T
std::conditional< is_undeterminated< A2 >::value, T, A2 >::type second_argument_type
hint< Arg1, Arg2, undeterminated_basic< Float > >::result_type type
std::true_type is_symmetric
static space_constant::valued_type valued_tag(space_constant::valued_type tag1, space_constant::valued_type tag2)
divides_result< A1, A2 >::type result_type
scalar_traits< A2 >::type second_argument_type
promote< typename scalar_traits< A1 >::type, typename scalar_traits< R >::type >::type S
std::conditional< details::is_equal< A1, R >::value, S, binop_error< details::divides, A1, A2, R > >::type second_argument_type
undeterminated_basic< A1 > first_argument_type
undeterminated_basic< R > result_type
first_argument_type result_type
std::conditional< details::is_scalar< A2 >::value, undeterminated_basic< A1 >, binop_error< details::divides, A1, A2, R > >::type first_argument_type
scalar_traits< A2 >::type S2
scalar_traits< A2 >::type second_argument_type
std::conditional< details::is_scalar< A2 >::value, R, binop_error< details::divides, A1, A2, R > >::type first_argument_type
scalar_traits< A2 >::type S2
Arg2 second_argument_type
divides_result< Arg1, Arg2 >::type type
static space_constant::valued_type valued_tag(space_constant::valued_type tag1, space_constant::valued_type tag2)
std::false_type is_symmetric
std::conditional< is_undeterminated< R >::value,typename std::conditional< is_good::value,S,binop_error< details::dot_, A1, A2, R > >::type,R >::type result_type
scalar_traits< R >::type S
std::conditional< is_undeterminated< A2 >::value,typename std::conditional< is_good::value,point_basic< S2 >,binop_error< details::dot_, A1, A2, R > >::type,A2 >::type second_argument_type
details::and_type< details::or_type< details::is_point< A1 >,is_undeterminated< A1 > >,details::or_type< details::is_point< A2 >,is_undeterminated< A2 > >,details::or_type< details::is_scalar< R >,is_undeterminated< R > > >::type is_good
std::conditional< is_undeterminated< A1 >::value,typename std::conditional< is_good::value,point_basic< S1 >,binop_error< details::dot_, A1, A2, R > >::type,A1 >::type first_argument_type
scalar_traits< A1 >::type S1
scalar_traits< A2 >::type S2
promote< typename float_traits< Arg1 >::type, typename float_traits< Arg2 >::type >::type type
std::true_type is_symmetric
static space_constant::valued_type valued_tag(space_constant::valued_type tag1, space_constant::valued_type tag2)
hint< A1, A2, undeterminated_basic< Float > >::result_type type
static space_constant::valued_type valued_tag(space_constant::valued_type tag1, space_constant::valued_type tag2)
std::false_type is_symmetric
binop_error< details::multiplies, undeterminated_basic< A2 >, tensor3_basic< A2 >, point_basic< R > > type
promote< A2, R >::type type
binop_error< details::multiplies, undeterminated_basic< A2 >, point_basic< A2 >, tensor3_basic< R > > type
tensor_basic< typename promote< A2, R >::type > type
undeterminated_basic< typename promote< A2, R >::type > type
binop_error< details::multiplies, undeterminated_basic< A2 >, tensor_basic< A2 >, point_basic< R > > type
binop_error< details::multiplies, undeterminated_basic< S >, tensor4_basic< A2 >, tensor3_basic< R > > type
point_basic< typename promote< A2, R >::type > type
tensor3_basic< typename promote< A2, R >::type > type
undeterminated_basic< typename promote< A2, R >::type > type
tensor3_basic< typename promote< A2, R >::type > type
binop_error< details::multiplies, undeterminated_basic< S >, tensor4_basic< A2 >, point_basic< R > > type
promote< A2, R >::type type
binop_error< details::multiplies, undeterminated_basic< A2 >, tensor3_basic< A2 >, tensor_basic< R > > type
tensor3_basic< typename promote< A2, R >::type > type
binop_error< details::multiplies, undeterminated_basic< S >, tensor4_basic< A2 >, tensor_basic< R > > type
promote< A2, R >::type type
tensor4_basic< typename promote< A2, R >::type > type
binop_error< details::multiplies, undeterminated_basic< A2 >, point_basic< A2 >, tensor4_basic< R > > type
multiplies_result< A1, A2 >::type result_type
undeterminated_basic< A2 > second_argument_type
undeterminated_basic< R > result_type
second_argument_hint< A1, R >::type second_argument_type
point_basic< A1 > first_argument_type
point_basic< R > result_type
undeterminated_basic< A2 > second_argument_type
undeterminated_basic< R > result_type
tensor3_basic< A1 > first_argument_type
tensor4_basic< R > result_type
tensor4_basic< A2 > first_argument_type
undeterminated_basic< A2 > second_argument_type
undeterminated_basic< R > result_type
tensor_basic< A1 > first_argument_type
first_argument_hint< A2, R >::type first_argument_type
undeterminated_basic< A1 > first_argument_type
undeterminated_basic< R > result_type
tensor_basic< A2 > second_argument_type
undeterminated_basic< A1 > first_argument_type
undeterminated_basic< A2 > second_argument_type
undeterminated_basic< R > result_type
undeterminated_basic< A1 > first_argument_type
undeterminated_basic< A2 > second_argument_type
tensor4_basic< R > result_type
undeterminated_basic< A1 > first_argument_type
undeterminated_basic< A2 > second_argument_type
point_basic< R > result_type
undeterminated_basic< A1 > first_argument_type
point_basic< A2 > second_argument_type
undeterminated_basic< R > result_type
tensor4_basic< R > result_type
tensor4_basic< A2 > second_argument_type
undeterminated_basic< A1 > first_argument_type
undeterminated_basic< A2 > second_argument_type
tensor_basic< R > result_type
tensor3_basic< R > result_type
tensor3_basic< A2 > second_argument_type
undeterminated_basic< A1 > first_argument_type
undeterminated_basic< R > result_type
tensor3_basic< R > result_type
undeterminated_basic< A1 > first_argument_type
undeterminated_basic< A2 > second_argument_type
hint< Arg1, Arg2, undeterminated_basic< Float > >::result_type type
binop_error< details::multiplies, tensor_basic< A1 >, undeterminated_basic< A1 >, tensor3_basic< R > > type
undeterminated_basic< typename promote< A1, R >::type > type
binop_error< details::multiplies, tensor4_basic< A1 >, undeterminated_basic< A1 >, point_basic< R > > type
tensor4_basic< typename promote< A1, R >::type > type
promote< A1, R >::type type
binop_error< details::multiplies, tensor4_basic< A1 >, undeterminated_basic< A1 >, tensor_basic< R > > type
point_basic< typename promote< A1, R >::type > type
binop_error< details::multiplies, tensor3_basic< A1 >, undeterminated_basic< A1 >, point_basic< R > > type
tensor3_basic< typename promote< A1, R >::type > type
binop_error< details::multiplies, tensor4_basic< A1 >, undeterminated_basic< A1 >, tensor3_basic< R > > type
binop_error< details::multiplies, point_basic< A1 >, undeterminated_basic< A1 >, tensor3_basic< R > > type
undeterminated_basic< typename promote< A1, R >::type > type
point_basic< typename promote< A1, R >::type > type
tensor_basic< typename promote< A1, R >::type > type
point_basic< typename promote< A1, R >::type > type
binop_error< details::multiplies, tensor_basic< A1 >, undeterminated_basic< A1 >, tensor_basic< R > > type
promote< A1, R >::type type
static space_constant::valued_type valued_tag(space_constant::valued_type tag1, space_constant::valued_type tag2)
std::false_type is_symmetric
plus_result< A1, A2 >::type result_type
std::conditional< details::is_equal< A1, R >::value, R, binop_error< details::plus, A1, A2, R > >::type second_argument_type
undeterminated_basic< A1 > first_argument_type
undeterminated_basic< A2 > second_argument_type
undeterminated_basic< R > result_type
std::conditional< details::is_equal< A2, R >::value, R, binop_error< details::plus, A1, A2, R > >::type first_argument_type
hint< Arg1, Arg2, undeterminated_basic< Float > >::result_type type
std::true_type is_symmetric
static space_constant::valued_type valued_tag(space_constant::valued_type tag1, space_constant::valued_type tag2)
base::second_argument_type first_argument_type
base::result_type result_type
base::first_argument_type second_argument_type
generic_binary_traits< BinaryFunction >::template hint< A2, A1, Result > base
static space_constant::valued_type valued_tag(space_constant::valued_type arg1_tag, space_constant::valued_type arg2_tag)
static space_constant::valued_type valued_tag(space_constant::valued_type, space_constant::valued_type)
std::decay< typename function_traits< Function >::template arg< 0 >::type >::type argument_type
function_traits< Function >::result_type result_type
function_traits< Function >::result_type type
generic_binary_traits< BinaryFunction >::template result_hint< A1, A2 >::type type
static space_constant::valued_type valued_tag(space_constant::valued_type arg_tag)
result_hint< A2 >::type result_type
generic_binary_traits< BinaryFunction >::template hint< A1, undeterminated_basic< T >, R >::second_argument_type argument_type
generic_binary_traits< BinaryFunction >::template hint< A1, undeterminated_basic< T >, undeterminated_basic< T > >::result_type result_type
generic_binary_traits< BinaryFunction >::template hint< A1, undeterminated_basic< T1 >, undeterminated_basic< T > >::second_argument_type argument_type
generic_binary_traits< BinaryFunction >::template hint< undeterminated_basic< T >, A2, R >::first_argument_type argument_type
generic_binary_traits< BinaryFunction >::template hint< undeterminated_basic< T1 >, A2, undeterminated_basic< T > >::first_argument_type argument_type
generic_binary_traits< BinaryFunction >::template hint< undeterminated_basic< T >, A2, undeterminated_basic< T > >::result_type result_type
generic_binary_traits< BinaryFunction >::template result_hint< A1, A2 >::type type
static space_constant::valued_type valued_tag(space_constant::valued_type arg_tag)
result_hint< A1 >::type result_type
promote< Arg, Result >::type result_type
result_type argument_type
static space_constant::valued_type valued_tag(space_constant::valued_type tag)
result_hint< A1 >::type result_type
float_traits< Arg >::type type
static space_constant::valued_type valued_tag(space_constant::valued_type tag)
result_hint< A1 >::type result_type
float_traits< Arg >::type type
static space_constant::valued_type valued_tag(space_constant::valued_type tag)
result_hint< A1 >::type result_type
tensor_basic< result_type > argument_type
scalar_traits< A1 >::type type
static space_constant::valued_type valued_tag(space_constant::valued_type tag)
promote< typename scalar_traits< A1 >::type, typename scalar_traits< R >::type >::type S
tensor_basic< S > argument_type
tensor_basic< S > result_type
tensor_basic< typename scalar_traits< A1 >::type > type
static space_constant::valued_type valued_tag(space_constant::valued_type tag)
promote< Arg, Result >::type result_type
result_type argument_type
static space_constant::valued_type valued_tag(space_constant::valued_type tag)
static space_constant::valued_type valued_tag(space_constant::valued_type)
plus_result< T1, T2 >::type operator()(const T1 &a, const T2 &b) const
binop_error< details::multiplies, point_basic< S1 >, point_basic< S2 >, undeterminated_basic< S > > type
promote< S1, S2 >::type S
binop_error< details::multiplies, point_basic< S1 >, tensor3_basic< S2 >, undeterminated_basic< S > > type
promote< S1, S2 >::type S
binop_error< details::multiplies, point_basic< S1 >, tensor4_basic< S2 >, undeterminated_basic< S > > type
promote< S1, S2 >::type S
binop_error< details::multiplies, point_basic< S1 >, tensor_basic< S2 >, undeterminated_basic< S > > type
promote< S1, S2 >::type S
promote< S1, S2 >::type S
binop_error< details::multiplies, tensor3_basic< S1 >, tensor3_basic< S2 >, undeterminated_basic< S > > type
promote< S1, S2 >::type S
binop_error< details::multiplies, tensor3_basic< S1 >, tensor4_basic< S2 >, undeterminated_basic< S > > type
promote< S1, S2 >::type S
promote< S1, S2 >::type S
binop_error< details::multiplies, tensor4_basic< S1 >, point_basic< S2 >, undeterminated_basic< S > > type
promote< S1, S2 >::type S
binop_error< details::multiplies, tensor4_basic< S1 >, tensor3_basic< S2 >, undeterminated_basic< S > > type
promote< S1, S2 >::type S
binop_error< details::multiplies, tensor4_basic< S1 >, tensor4_basic< S2 >, undeterminated_basic< S > > type
promote< S1, S2 >::type S
binop_error< details::multiplies, tensor4_basic< S1 >, tensor_basic< S2 >, undeterminated_basic< S > > type
promote< S1, S2 >::type S
promote< S1, S2 >::type S
binop_error< details::multiplies, tensor_basic< S1 >, tensor3_basic< S2 >, undeterminated_basic< S > > type
promote< S1, S2 >::type S
binop_error< details::multiplies, tensor_basic< S1 >, tensor4_basic< S2 >, undeterminated_basic< S > > type
promote< S1, S2 >::type S
promote< S1, S2 >::type S
promote< A1, A2 >::type type
multiplies_result< T1, T2 >::type operator()(const T1 &a, const T2 &b) const
T operator()(const T &a) const
float_traits< T >::type operator()(const T &x) const
float_traits< T >::type operator()(const T &x) const
promote< A1, A2 >::type type
binop_error< details::plus, A1, A2, undeterminated_basic< Float > > type
plus_result< T1, T2 >::type operator()(const T1 &a, const T2 &b) const
std::conditional< is_undeterminated< A1 >::value,typename std::conditional< is_good::value,S1,binop_error< F, A1, A2, R > >::type,A1 >::type first_argument_type
scalar_traits< R >::type S
details::and_type< details::or_type< details::is_scalar< A1 >,is_undeterminated< A1 > >,details::or_type< details::is_scalar< A2 >,is_undeterminated< A2 > >,details::or_type< details::is_scalar< R >,is_undeterminated< R > > >::type is_good
scalar_traits< A1 >::type S1
std::conditional< is_undeterminated< A2 >::value,typename std::conditional< is_good::value,S2,binop_error< F, A1, A2, R > >::type,A2 >::type second_argument_type
std::conditional< is_undeterminated< R >::value,typename std::conditional< is_good::value,S,binop_error< F, A1, A2, R > >::type,R >::type result_type
scalar_traits< A2 >::type S2
promote< typename scalar_traits< Arg1 >::type, typename scalar_traits< Arg2 >::type >::type type
static space_constant::valued_type valued_tag(space_constant::valued_type tag1, space_constant::valued_type tag2)
std::false_type is_symmetric
swapper(const BinaryFunction &f)
generic_binary_traits< BinaryFunction >::template result_hint< A2, A1 >::type operator()(const A1 &x1, const A2 &x2) const
tensor_basic< T > operator()(const tensor_basic< T > &a) const
T operator()(const T &a) const
float_traits< R >::type type
helper for std::complex<T>: get basic T type
helper for generic field value_type: T, point_basic<T> or tensor_basic<T>