00001 00002 #include <basix/int.hpp> 00003 #include <numerix/tangent.hpp> 00004 #include <basix/glue.hpp> 00005 00006 #define int_literal(x) as_int (as_string (x)) 00007 00008 namespace mmx { 00009 static tangent<generic, generic> 00010 GLUE_1 (const generic &arg_1) { 00011 return tangent<generic, generic > (arg_1); 00012 } 00013 00014 static tangent<generic, generic> 00015 GLUE_2 (const generic &arg_1, const generic &arg_2) { 00016 return tangent<generic, generic > (arg_1, arg_2); 00017 } 00018 00019 static generic 00020 GLUE_3 (const tangent<generic, generic> &arg_1) { 00021 return base (arg_1); 00022 } 00023 00024 static generic 00025 GLUE_4 (const tangent<generic, generic> &arg_1) { 00026 return slope (arg_1); 00027 } 00028 00029 static tangent<generic, generic> 00030 GLUE_5 (const tangent<generic, generic> &arg_1) { 00031 return -arg_1; 00032 } 00033 00034 static tangent<generic, generic> 00035 GLUE_6 (const tangent<generic, generic> &arg_1) { 00036 return square (arg_1); 00037 } 00038 00039 static tangent<generic, generic> 00040 GLUE_7 (const tangent<generic, generic> &arg_1, const tangent<generic, generic> &arg_2) { 00041 return arg_1 + arg_2; 00042 } 00043 00044 static tangent<generic, generic> 00045 GLUE_8 (const tangent<generic, generic> &arg_1, const tangent<generic, generic> &arg_2) { 00046 return arg_1 - arg_2; 00047 } 00048 00049 static tangent<generic, generic> 00050 GLUE_9 (const tangent<generic, generic> &arg_1, const tangent<generic, generic> &arg_2) { 00051 return arg_1 * arg_2; 00052 } 00053 00054 static bool 00055 GLUE_10 (const tangent<generic, generic> &arg_1, const tangent<generic, generic> &arg_2) { 00056 return arg_1 == arg_2; 00057 } 00058 00059 static bool 00060 GLUE_11 (const tangent<generic, generic> &arg_1, const tangent<generic, generic> &arg_2) { 00061 return arg_1 != arg_2; 00062 } 00063 00064 static tangent<generic, generic> 00065 GLUE_12 (const tangent<generic, generic> &arg_1, const tangent<generic, generic> &arg_2) { 00066 return arg_1 / arg_2; 00067 } 00068 00069 static tangent<generic, generic> 00070 GLUE_13 (const tangent<generic, generic> &arg_1) { 00071 return sqrt (arg_1); 00072 } 00073 00074 static tangent<generic, generic> 00075 GLUE_14 (const tangent<generic, generic> &arg_1) { 00076 return exp (arg_1); 00077 } 00078 00079 static tangent<generic, generic> 00080 GLUE_15 (const tangent<generic, generic> &arg_1) { 00081 return log (arg_1); 00082 } 00083 00084 static tangent<generic, generic> 00085 GLUE_16 (const tangent<generic, generic> &arg_1, const tangent<generic, generic> &arg_2) { 00086 return pow (arg_1, arg_2); 00087 } 00088 00089 static tangent<generic, generic> 00090 GLUE_17 (const tangent<generic, generic> &arg_1) { 00091 return cos (arg_1); 00092 } 00093 00094 static tangent<generic, generic> 00095 GLUE_18 (const tangent<generic, generic> &arg_1) { 00096 return sin (arg_1); 00097 } 00098 00099 static tangent<generic, generic> 00100 GLUE_19 (const tangent<generic, generic> &arg_1) { 00101 return tan (arg_1); 00102 } 00103 00104 static tangent<generic, generic> 00105 GLUE_20 (const tangent<generic, generic> &arg_1) { 00106 return acos (arg_1); 00107 } 00108 00109 static tangent<generic, generic> 00110 GLUE_21 (const tangent<generic, generic> &arg_1) { 00111 return asin (arg_1); 00112 } 00113 00114 static tangent<generic, generic> 00115 GLUE_22 (const tangent<generic, generic> &arg_1) { 00116 return atan (arg_1); 00117 } 00118 00119 void 00120 glue_tangent_generic () { 00121 static bool done = false; 00122 if (done) return; 00123 done = true; 00124 call_glue (string ("glue_int")); 00125 call_glue (string ("glue_generic")); 00126 define_type<tangent<generic, generic> > (gen (lit ("Tangent"), lit ("Generic"), lit ("Generic"))); 00127 define ("tangent", GLUE_1); 00128 define ("tangent", GLUE_2); 00129 define ("base", GLUE_3); 00130 define ("slope", GLUE_4); 00131 define ("-", GLUE_5); 00132 define ("square", GLUE_6); 00133 define ("+", GLUE_7); 00134 define ("-", GLUE_8); 00135 define ("*", GLUE_9); 00136 define ("=", GLUE_10); 00137 define ("!=", GLUE_11); 00138 define ("/", GLUE_12); 00139 define ("sqrt", GLUE_13); 00140 define ("exp", GLUE_14); 00141 define ("log", GLUE_15); 00142 define ("^", GLUE_16); 00143 define ("cos", GLUE_17); 00144 define ("sin", GLUE_18); 00145 define ("tan", GLUE_19); 00146 define ("arccos", GLUE_20); 00147 define ("arcsin", GLUE_21); 00148 define ("arctan", GLUE_22); 00149 } 00150 }