1#ifndef _RHEOLEF_EXPRESSION_H
2#define _RHEOLEF_EXPRESSION_H
157#include "rheolef/promote.h"
158#include "rheolef/undeterminated.h"
159#include "rheolef/space_constant.h"
161namespace rheolef {
namespace details {
166template<
class Op,
class T1,
class T2,
class R>
169template <
class T>
struct is_error: std::false_type {};
171template<
class Op,
class T1,
class T2,
class R>
176template<
class Op,
class T1,
class T2,
class R>
187template<
class Function>
193 template <
class Arg,
class Result>
196 typedef typename std::decay<typename function_traits<Function>::template arg<0>::type>::type
218 template <
class Arg,
class Result>
240 template <
class Arg,
class Result>
254#define _RHEOLEF_generic_unary_scalar(F) \
257 T operator() (const T& x) const { return F(x); } \
260struct generic_unary_traits<F##_> { \
261 template <class Arg> \
262 struct result_hint { \
263 typedef typename scalar_traits<Arg>::type type; \
265 template <class Arg, class Result> \
267 typedef typename promote< \
268 typename scalar_traits<Arg>::type \
269 ,typename scalar_traits<Result>::type>::type S; \
270 typedef S result_type; \
271 typedef S argument_type; \
273 static space_constant::valued_type \
274 valued_tag (space_constant::valued_type) { \
275 return space_constant::scalar; \
298#undef _RHEOLEF_generic_unary_scalar
313 template <
class A1,
class R>
335 template <
class A1,
class R>
363 template <
class A1,
class R>
390 template <
class A1,
class R>
406template<
class Function>
408 template <
class Arg1,
class Arg2>
412 template <
class Arg1,
class Arg2,
class Result>
414 typedef typename std::decay<typename function_traits<Function>::template arg<0>::type>::type
416 typedef typename std::decay<typename function_traits<Function>::template arg<1>::type>::type
418 typedef typename std::decay<typename function_traits<Function>::result_type>::type
435template <
class A1,
class A2,
class Sfinae =
void>
440template <
class A1,
class A2>
442 typename
std::enable_if<
443 is_rheolef_arithmetic<A1>::value &&
444 is_rheolef_arithmetic<A2>::value
452 typename
std::enable_if<
453 ! is_rheolef_arithmetic<A>::value>::type>
458 template <
class T1,
class T2>
466 template <
class A1,
class A2,
class R>
475 template <
class A1,
class A2,
class R>
482 template <
class A1,
class A2,
class R>
484 typedef typename std::conditional<
493 template <
class A1,
class A2,
class R>
496 typedef typename std::conditional<
504 template <
class A1,
class A2,
class R>
511 template <
class A1,
class A2,
class R>
518 template <
class A1,
class A2,
class R>
525 template <
class A1,
class A2,
class R>
536 template <
class Arg1,
class Arg2>
538 typedef typename hint<Arg1,Arg2,undeterminated_basic<Float> >::result_type
type;
545 template <
class T1,
class T2>
550 template <
class A1,
class A2,
class R>
553 template <
class A1,
class A2>
555 typedef typename hint<A1,A2,undeterminated_basic<Float> >::result_type
type;
605template <
class A1,
class A2>
625template <
class S1,
class S2>
631template <
class S1,
class S2>
642template <
class S1,
class S2>
648template <
class S1,
class S2>
664template <
class S1,
class S2>
670template <
class S1,
class S2>
676template <
class S1,
class S2>
682template <
class S1,
class S2>
688template <
class S1,
class S2>
704template <
class S1,
class S2>
710template <
class S1,
class S2>
716template <
class S1,
class S2>
722template <
class S1,
class S2>
728template <
class S1,
class S2>
734template <
class S1,
class S2>
740template <
class S1,
class S2>
747 template <
class T1,
class T2>
761 template <
class A2,
class R,
class Sfinae =
void>
762 struct first_argument_hint {
766 template <
class A2,
class R>
771 template <
class A2,
class R>
776 template <
class A2,
class R>
781 template <
class A2,
class R>
783 typename
std::enable_if<is_rheolef_arithmetic<A2>::value>::type> {
787 template <
class A2,
class R>
792 template <
class A2,
class R>
797 template <
class A2,
class R>
802 template <
class A2,
class R>
807 template <
class A2,
class R>
812 template <
class A2,
class R>
817 template <
class A2,
class R>
822 template <
class A2,
class R>
827 template <
class A2,
class R>
832 template <
class A2,
class R>
837 template <
class A2,
class R>
842 template <
class A2,
class R>
847 template <
class A2,
class R>
852 template <
class A2,
class R>
854 typename
std::enable_if<is_rheolef_arithmetic<R>::value>::type> {
859 template <
class A2,
class R>
865 template <
class A2,
class R>
871 template <
class A2,
class R>
877 template <
class A2,
class R>
885 template <
class A1,
class R,
class Sfinae =
void>
886 struct second_argument_hint {
890 template <
class A1,
class R>
895 template <
class A1,
class R>
900 template <
class A1,
class R>
905 template <
class A1,
class R>
907 typename
std::enable_if<is_rheolef_arithmetic<A1>::value>::type> {
911 template <
class A1,
class R>
916 template <
class A1,
class R>
921 template <
class A1,
class R>
926 template <
class A1,
class R>
931 template <
class A1,
class R>
936 template <
class A1,
class R>
941 template <
class A1,
class R>
946 template <
class A1,
class R>
951 template <
class A1,
class R>
956 template <
class A1,
class R>
961 template <
class A1,
class R>
966 template <
class A1,
class R>
971 template <
class A1,
class R>
973 typename
std::enable_if<is_rheolef_arithmetic<R>::value>::type> {
977 template <
class A1,
class R>
982 template <
class A1,
class R>
987 template <
class A1,
class R>
992 template <
class A1,
class R>
1000 template <
class A1,
class A2,
class R>
1009 template <
class A1,
class A2,
class R>
1016 template <
class A1,
class A2,
class R>
1026 template <
class A1,
class A2,
class R>
1035 template <
class A1,
class A2,
class R>
1042 template <
class A1,
class A2,
class R>
1049 template <
class A1,
class A2,
class R>
1056 template <
class A1,
class A2,
class R>
1063 template <
class A1,
class A2,
class R>
1070 template <
class A1,
class A2,
class R>
1077 template <
class A1,
class A2,
class R>
1084 template <
class A1,
class A2,
class R>
1091 template <
class A1,
class A2,
class R>
1098 template <
class A1,
class A2,
class R>
1105 template <
class A1,
class A2,
class R>
1112 template <
class A1,
class A2,
class R>
1119 template <
class A1,
class A2,
class R>
1126 template <
class A1,
class A2,
class R>
1133 template <
class A1,
class A2,
class R>
1142 template <
class A1,
class A2,
class R>
1149 template <
class Arg1,
class Arg2>
1150 struct result_hint {
1151 typedef typename hint<Arg1,Arg2,undeterminated_basic<Float> >::result_type
type;
1160template <
class T1,
class T2,
class Sfinae =
void>
1165template <
class T1,
class T2>
1167 typename
std::enable_if<
1168 is_rheolef_arithmetic<T1>::value &&
1169 is_rheolef_arithmetic<T2>::value
1175template <
class T1,
class T2>
1177 typename
std::enable_if<
1178 is_undeterminated<T1>::value &&
1179 is_undeterminated<T2>::value
1182 typedef undeterminated_basic <typename promote<T1,T2>::type>
type;
1187 typename
std::enable_if<
1188 ! is_rheolef_arithmetic<T>::value
1189 && ! is_undeterminated<T>::value
1211template <
class T1,
class T2>
1216template <
class T1,
class T2>
1233template <
class T1,
class T2>
1238template <
class T1,
class T2>
1243template <
class T1,
class T2>
1248template <
class T1,
class T2>
1257template <
class T1,
class T2>
1262template <
class T1,
class T2>
1267template <
class T1,
class T2>
1273 template <
class T1,
class T2>
1279 template <
class Arg1,
class Arg2>
1280 struct result_hint {
1283 template <
class Arg1,
class Arg2,
class Result>
1292 template <
class A1,
class A2,
class R>
1299 template <
class A1,
class A2,
class R>
1302 typedef typename std::conditional<
1310 template <
class A1,
class A2,
class R>
1316 typedef typename std::conditional<
1325 template <
class A1,
class A2,
class R>
1332 template <
class A1,
class A2,
class R>
1339 template <
class A1,
class A2,
class R>
1342 typedef typename std::conditional<
1352 template <
class A1,
class A2,
class R>
1375 template <
class Arg1,
class Arg2>
1379 template <
class A1,
class A2,
class R>
1398 typedef typename std::conditional<
1400 ,
typename std::conditional<
1407 typedef typename std::conditional<
1409 ,
typename std::conditional<
1416 typedef typename std::conditional<
1418 ,
typename std::conditional<
1428#define _RHEOLEF_generic_binary_scalar(F) \
1430 template<class A1, class A2> \
1431 typename promote<A1,A2>::type \
1432 operator() (const A1& x, const A2& y) const { \
1433 typedef typename promote<A1,A2>::type R; \
1434 return F(R(x),R(y)); } \
1437struct generic_binary_traits<F##_> : scalar_binary_traits<F##_> {}; \
1444#undef _RHEOLEF_generic_binary_scalar
1460 template <
class Arg1,
class Arg2>
1461 struct result_hint {
1464 template <
class A1,
class A2,
class R>
1483 typedef typename std::conditional<
1485 ,
typename std::conditional<
1492 typedef typename std::conditional<
1494 ,
typename std::conditional<
1501 typedef typename std::conditional<
1503 ,
typename std::conditional<
1523template <
class A1,
class A2>
1528template <
class A1,
class A2>
1533template <
class A1,
class A2>
1538template <
class A1,
class A2>
1544 template<
class A1,
class A2>
1554 template <
class A1,
class A2,
class R>
1559 typedef typename std::conditional<is_undeterminated<R>::value,
T,R> ::type
result_type;
1562 template <
class A1,
class A2,
class R>
1565 typedef typename std::conditional<
1570 typedef typename std::conditional<
1580 template <
class A1,
class A2,
class R>
1589 template <
class A1,
class A2,
class R>
1598 template <
class A1,
class A2,
class R>
1605 template <
class A1,
class A2,
class R>
1615 template <
class A1,
class A2,
class R>
1629 template <
class A1,
class A2,
class R>
1636 template <
class A1,
class A2,
class R>
1646 template <
class A1,
class A2,
class R>
1653 template <
class A1,
class A2,
class R>
1663 template <
class A1,
class A2,
class R>
1670 template <
class Arg1,
class Arg2>
1671 struct result_hint {
1672 typedef typename hint<Arg1,Arg2,undeterminated_basic<Float> >::result_type
type;
1685template <
class A1,
class A2>
1690template <
class A1,
class A2>
1696 template<
class A1,
class A2>
1706 template <
class A1,
class A2,
class R>
1711 typedef typename std::conditional<is_undeterminated<R>::value,
T,R> ::type
result_type;
1714 template <
class A1,
class A2,
class R>
1717 typedef typename std::conditional<
1722 typedef typename std::conditional<
1732 template <
class A1,
class A2,
class R>
1741 template <
class A1,
class A2,
class R>
1753 template <
class A1,
class A2,
class R>
1766 template <
class A1,
class A2,
class R>
1776 template <
class A1,
class A2,
class R>
1783 template <
class Arg1,
class Arg2>
1784 struct result_hint {
1785 typedef typename hint<Arg1,Arg2,undeterminated_basic<Float> >::result_type
type;
1797template<
class BinaryFunction,
class A1>
1807template<
class BinaryFunction,
class A1>
1810 struct result_hint {
1813 template <
class A2,
class Result>
1819 template <
class A2,
class T>
1825 template <
class R,
class T>
1832 template <
class T1,
class T>
1848template<
class BinaryFunction,
class A2>
1858template<
class BinaryFunction,
class A2>
1861 struct result_hint {
1864 template <
class A1,
class Result>
1870 template <
class A1,
class T>
1876 template <
class R,
class T>
1883 template <
class T1,
class T>
1901template<
class BinaryFunction>
1904 template<
class A1,
class A2>
1910template<
class BinaryFunction>
1912 template <
class A1,
class A2>
1915 template <
class A1,
class A2,
class Result>
1931template<
class Function>
1935template<
class Result,
class Arg>
1937 typedef std::function<Result(Arg)>
type;
1939template<
class Result,
class Arg1,
class Arg2>
1941 typedef std::function<Result(Arg1,Arg2)>
type;
1944template<
class Function>
1951template<
class Result,
class Arg>
1953std::pointer_to_unary_function<Arg,Result>
1956 return std::ptr_fun(
f);
1958template<
class Result,
class Arg1,
class Arg2>
1960std::pointer_to_binary_function<Arg1,Arg2,Result>
1963 return std::ptr_fun(
f);
#define _RHEOLEF_generic_unary_scalar(F)
#define _RHEOLEF_generic_binary_scalar(F)
rheolef::details::is_vec 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.
T ddot(const tensor_basic< T > &a, const tensor_basic< T > &b)
ddot(x,y): see the expression page for the full documentation
U tr(const tensor_basic< U > &a, size_t d=3)
T norm2(const vec< T, M > &x)
norm2(x): see the expression page for the full documentation
T dddot(const tensor3_basic< T > &a, const tensor3_basic< T > &b)
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
generic_binary_traits< BinaryFunction >::template result_hint< A1, A2 >::type operator()(const A2 &x2) const
binder_first(const BinaryFunction &f, const A1 &x1)
generic_binary_traits< BinaryFunction >::template result_hint< A1, A2 >::type operator()(const A1 &x1) const
binder_second(const BinaryFunction &f, const A2 &x2)
dddot_result< A1, A2 >::type operator()(const A1 &x, const A2 &y) const
promote< typenamefloat_traits< A1 >::type, typenamefloat_traits< A2 >::type >::type S
promote< typenamefloat_traits< A1 >::type, typenamefloat_traits< A2 >::type >::type S
binop_error< dddot_, A1, A2, undeterminated_basic< S > > type
ddot_result< A1, A2 >::type operator()(const A1 &x, const A2 &y) const
promote< typenamefloat_traits< A1 >::type, typenamefloat_traits< A2 >::type >::type S
promote< typenamefloat_traits< A1 >::type, typenamefloat_traits< A2 >::type >::type S
promote< typenamefloat_traits< A1 >::type, typenamefloat_traits< A2 >::type >::type S
promote< typenamefloat_traits< A1 >::type, typenamefloat_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< typenamefunction_traits< Function >::result_type >::type result_type
std::decay< typenamefunction_traits< Function >::templatearg< 0 >::type >::type first_argument_type
std::decay< typenamefunction_traits< Function >::templatearg< 1 >::type >::type second_argument_type
function_traits< Function >::result_type type
dddot_result< A1, A2 >::type result_type
std::conditional< is_undeterminated< A1 >::value &&is_error< result_type >::value, result_type, A1 >::type first_argument_type
std::conditional< is_undeterminated< A2 >::value &&is_error< result_type >::value, result_type, A2 >::type second_argument_type
tensor3_basic< A2 > second_argument_type
tensor3_basic< A1 > first_argument_type
binop_error< dddot_, A1, A2, R > E
std::conditional< is_scalar< R >::value, tensor3_basic< A2 >, E >::type second_argument_type
tensor3_basic< A1 > first_argument_type
binop_error< dddot_, A1, A2, R > E
std::conditional< is_scalar< R >::value, tensor3_basic< A2 >, E >::type second_argument_type
std::conditional< is_scalar< R >::value, tensor3_basic< A1 >, E >::type first_argument_type
tensor3_basic< A2 > second_argument_type
tensor3_basic< A1 > first_argument_type
binop_error< dddot_, A1, A2, R > E
tensor3_basic< A2 > second_argument_type
std::conditional< is_scalar< R >::value, tensor3_basic< A1 >, E >::type first_argument_type
binop_error< dddot_, A1, A2, R > T
std::conditional< is_undeterminated< A1 >::value, T, A1 >::type first_argument_type
std::conditional< is_undeterminated< R >::value, T, R >::type result_type
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)
std::conditional< is_undeterminated< A1 >::value &&is_error< result_type >::value, result_type, A1 >::type first_argument_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
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< R >::value, T, R >::type result_type
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< typenamescalar_traits< A1 >::type, typenamescalar_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
scalar_traits< R >::type S
std::conditional< is_undeterminated< A2 >::value, typenamestd::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< R >::value, typenamestd::conditional< is_good::value, S, binop_error< details::dot_, A1, A2, R > >::type, R >::type result_type
scalar_traits< A1 >::type S1
std::conditional< is_undeterminated< A1 >::value, typenamestd::conditional< is_good::value, point_basic< S1 >, binop_error< details::dot_, A1, A2, R > >::type, A1 >::type first_argument_type
scalar_traits< A2 >::type S2
promote< typenamefloat_traits< Arg1 >::type, typenamefloat_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 >, R > type
binop_error< details::multiplies, undeterminated_basic< A2 >, tensor3_basic< A2 >, point_basic< R > > type
binop_error< details::multiplies, undeterminated_basic< S >, tensor4_basic< A2 >, R > type
promote< A2, R >::type type
binop_error< details::multiplies, undeterminated_basic< A2 >, point_basic< A2 >, tensor3_basic< R > > type
binop_error< details::multiplies, undeterminated_basic< A2 >, tensor_basic< A2 >, 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
binop_error< details::multiplies, undeterminated_basic< A2 >, point_basic< A2 >, 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
binop_error< details::multiplies, tensor3_basic< A1 >, undeterminated_basic< A1 >, R > 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
binop_error< details::multiplies, point_basic< A1 >, undeterminated_basic< A1 >, R > type
point_basic< typename promote< A1, R >::type > type
binop_error< details::multiplies, tensor_basic< A1 >, undeterminated_basic< A1 >, R > type
binop_error< details::multiplies, tensor4_basic< A1 >, undeterminated_basic< A1 >, R > 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< typenamefunction_traits< Function >::templatearg< 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)
tensor_basic< S > argument_type
promote< typenamescalar_traits< A1 >::type, typenamescalar_traits< R >::type >::type S
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, typenamestd::conditional< is_good::value, S1, binop_error< F, A1, A2, R > >::type, A1 >::type first_argument_type
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< R >::type S
std::conditional< is_undeterminated< A2 >::value, typenamestd::conditional< is_good::value, S2, binop_error< F, A1, A2, R > >::type, A2 >::type second_argument_type
scalar_traits< A1 >::type S1
std::conditional< is_undeterminated< R >::value, typenamestd::conditional< is_good::value, S, binop_error< F, A1, A2, R > >::type, R >::type result_type
scalar_traits< A2 >::type S2
promote< typenamescalar_traits< Arg1 >::type, typenamescalar_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>