File indexing completed on 2024-04-06 12:24:21
0001 #ifndef PhysicsTools_Utilities_Simplify_begin_h
0002 #define PhysicsTools_Utilities_Simplify_begin_h
0003 #undef PhysicsTools_Utilities_Simplify_end_h
0004 #define TYP0
0005
0006 #define TYPT1 typename A
0007 #define TYPT2 typename A, typename B
0008 #define TYPT3 typename A, typename B, typename C
0009 #define TYPT4 typename A, typename B, typename C, typename D
0010
0011 #define TYPN1 int n
0012 #define TYPN2 int n, int m
0013 #define TYPN3 int n, int m, int k
0014 #define TYPN4 int n, int m, int k, int l
0015
0016 #define TYPN1T1 int n, typename A
0017 #define TYPN1T2 int n, typename A, typename B
0018 #define TYPN2T1 int n, int m, typename A
0019 #define TYPN2T2 int n, int m, typename A, typename B
0020 #define TYPN3T1 int n, int m, int k, typename A
0021
0022 #define TYPX typename X
0023
0024 #define TYPXT1 typename X, typename A
0025 #define TYPXT2 typename X, typename A, typename B
0026
0027 #define TYPXN1 typename X, int n
0028 #define TYPXN2 typename X, int n, int m
0029
0030 #define TYPXN1T1 typename X, int n, typename A
0031 #define TYPXN2T1 typename X, int n, int m, typename A
0032
0033 #define TEMPL(X) template <TYP##X>
0034
0035 #define NUM(N) Numerical<N>
0036 #define FRACT(N, M) typename Fraction<N, M>::type
0037 #define SUM_S(A, B) SumStruct<A, B>
0038 #define MINUS_S(A) MinusStruct<A>
0039 #define PROD_S(A, B) ProductStruct<A, B>
0040 #define RATIO_S(A, B) RatioStruct<A, B>
0041 #define POWER_S(A, B) PowerStruct<A, B>
0042 #define FRACT_S(N, M) FractionStruct<N, M>
0043 #define SQRT_S(A) SqrtStruct<A>
0044 #define EXP_S(A) ExpStruct<A>
0045 #define LOG_S(A) LogStruct<A>
0046 #define SIN_S(A) SinStruct<A>
0047 #define COS_S(A) CosStruct<A>
0048 #define TAN_S(A) TanStruct<A>
0049 #define ABS_S(A) AbsStruct<A>
0050 #define SGN_S(A) SgnStruct<A>
0051
0052 #define SUM(A, B) typename Sum<A, B>::type
0053 #define DIFF(A, B) typename Difference<A, B>::type
0054 #define MINUS(A) typename Minus<A>::type
0055 #define PROD(A, B) typename Product<A, B>::type
0056 #define RATIO(A, B) typename Ratio<A, B>::type
0057 #define POWER(A, B) typename Power<A, B>::type
0058 #define SQUARE(A) typename Square<A>::type
0059 #define SQRT(A) typename Sqrt<A>::type
0060 #define EXP(A) typename Exp<A>::type
0061 #define LOG(A) typename Log<A>::type
0062 #define SIN(A) typename Sin<A>::type
0063 #define COS(A) typename Cos<A>::type
0064 #define SIN2(A) typename Sin2<A>::type
0065 #define COS2(A) typename Cos2<A>::type
0066 #define TAN(A) typename Tan<A>::type
0067 #define ABS(A) typename Abs<A>::type
0068 #define SGN(A) typename Sgn<A>::type
0069
0070 #define COMBINE(A, B, RES) \
0071 inline static type combine(const A& _1, const B& _2) { return RES; } \
0072 struct __useless_ignoreme
0073
0074 #define MINUS_RULE(TMPL, T, RES, COMB) \
0075 template <TMPL> \
0076 struct Minus<T> { \
0077 typedef RES type; \
0078 inline static type operate(const T& _) { return COMB; } \
0079 }
0080
0081 #define SUM_RULE(TMPL, T1, T2, RES, COMB) \
0082 template <TMPL> \
0083 struct Sum<T1, T2> { \
0084 typedef RES type; \
0085 inline static type combine(const T1& _1, const T2& _2) { return COMB; } \
0086 }
0087
0088 #define DIFF_RULE(TMPL, T1, T2, RES, COMB) \
0089 template <TMPL> \
0090 struct Difference<T1, T2> { \
0091 typedef RES type; \
0092 inline static type combine(const T1& _1, const T2& _2) { return COMB; } \
0093 }
0094
0095 #define PROD_RULE(TMPL, T1, T2, RES, COMB) \
0096 template <TMPL> \
0097 struct Product<T1, T2> { \
0098 typedef RES type; \
0099 inline static type combine(const T1& _1, const T2& _2) { return COMB; } \
0100 }
0101
0102 #define RATIO_RULE(TMPL, T1, T2, RES, COMB) \
0103 template <TMPL> \
0104 struct Ratio<T1, T2> { \
0105 typedef RES type; \
0106 inline static type combine(const T1& _1, const T2& _2) { return COMB; } \
0107 }
0108
0109 #define POWER_RULE(TMPL, T1, T2, RES, COMB) \
0110 template <TMPL> \
0111 struct Power<T1, T2> { \
0112 typedef RES type; \
0113 inline static type combine(const T1& _1, const T2& _2) { return COMB; } \
0114 }
0115
0116 #define EXP_RULE(TMPL, T, RES, COMB) \
0117 template <TMPL> \
0118 struct Exp<T> { \
0119 typedef RES type; \
0120 inline static type compose(const T& _) { return COMB; } \
0121 }
0122
0123 #define LOG_RULE(TMPL, T, RES, COMB) \
0124 template <TMPL> \
0125 struct Log<T> { \
0126 typedef RES type; \
0127 inline static type compose(const T& _) { return COMB; } \
0128 }
0129
0130 #define SIN_RULE(TMPL, T, RES, COMB) \
0131 template <TMPL> \
0132 struct Sin<T> { \
0133 typedef RES type; \
0134 inline static type compose(const T& _) { return COMB; } \
0135 }
0136
0137 #define COS_RULE(TMPL, T, RES, COMB) \
0138 template <TMPL> \
0139 struct Cos<T> { \
0140 typedef RES type; \
0141 inline static type compose(const T& _) { return COMB; } \
0142 }
0143
0144 #define TAN_RULE(TMPL, T, RES, COMB) \
0145 template <TMPL> \
0146 struct Tan<T> { \
0147 typedef RES type; \
0148 inline static type compose(const T& _) { return COMB; } \
0149 }
0150
0151 #define GET(A, RES) \
0152 inline static type get(const A& _) { return RES; } \
0153 \
0154 struct __useless_ignoreme
0155
0156 #define DERIV(X, A) typename Derivative<X, A>::type
0157 #define PRIMIT(X, A) typename Primitive<A, X>::type
0158
0159 #define DERIV_RULE(TMPL, T, RES, COMB) \
0160 template <TMPL> \
0161 struct Derivative<X, T> { \
0162 typedef RES type; \
0163 inline static type get(const T& _) { return COMB; } \
0164 }
0165
0166 #define PRIMIT_RULE(TMPL, T, RES, COMB) \
0167 template <TMPL> \
0168 struct Primitive<T, X> { \
0169 typedef RES type; \
0170 inline static type get(const T& _) { return COMB; } \
0171 }
0172
0173 #endif