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 }