|
GiNaC
1.6.2
|
00001 00005 /* 00006 * This file was generated automatically by function.pl. 00007 * Please do not modify it directly, edit the perl script instead! 00008 * function.pl options: $maxargs=14 00009 * 00010 * GiNaC Copyright (C) 1999-2011 Johannes Gutenberg University Mainz, Germany 00011 * 00012 * This program is free software; you can redistribute it and/or modify 00013 * it under the terms of the GNU General Public License as published by 00014 * the Free Software Foundation; either version 2 of the License, or 00015 * (at your option) any later version. 00016 * 00017 * This program is distributed in the hope that it will be useful, 00018 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00020 * GNU General Public License for more details. 00021 * 00022 * You should have received a copy of the GNU General Public License 00023 * along with this program; if not, write to the Free Software 00024 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00025 */ 00026 00027 #ifndef GINAC_FUNCTION_H 00028 #define GINAC_FUNCTION_H 00029 00030 #include "exprseq.h" 00031 00032 // CINT needs <algorithm> to work properly with <vector> 00033 #include <algorithm> 00034 #include <string> 00035 #include <vector> 00036 00037 // the following lines have been generated for max. 14 parameters 00038 #define DECLARE_FUNCTION_1P(NAME) \ 00039 class NAME##_SERIAL { public: static unsigned serial; }; \ 00040 const unsigned NAME##_NPARAMS = 1; \ 00041 template<typename T1> const GiNaC::function NAME(const T1 & p1) { \ 00042 return GiNaC::function(NAME##_SERIAL::serial, GiNaC::ex(p1)); \ 00043 } 00044 00045 #define DECLARE_FUNCTION_2P(NAME) \ 00046 class NAME##_SERIAL { public: static unsigned serial; }; \ 00047 const unsigned NAME##_NPARAMS = 2; \ 00048 template<typename T1, typename T2> const GiNaC::function NAME(const T1 & p1, const T2 & p2) { \ 00049 return GiNaC::function(NAME##_SERIAL::serial, GiNaC::ex(p1), GiNaC::ex(p2)); \ 00050 } 00051 00052 #define DECLARE_FUNCTION_3P(NAME) \ 00053 class NAME##_SERIAL { public: static unsigned serial; }; \ 00054 const unsigned NAME##_NPARAMS = 3; \ 00055 template<typename T1, typename T2, typename T3> const GiNaC::function NAME(const T1 & p1, const T2 & p2, const T3 & p3) { \ 00056 return GiNaC::function(NAME##_SERIAL::serial, GiNaC::ex(p1), GiNaC::ex(p2), GiNaC::ex(p3)); \ 00057 } 00058 00059 #define DECLARE_FUNCTION_4P(NAME) \ 00060 class NAME##_SERIAL { public: static unsigned serial; }; \ 00061 const unsigned NAME##_NPARAMS = 4; \ 00062 template<typename T1, typename T2, typename T3, typename T4> const GiNaC::function NAME(const T1 & p1, const T2 & p2, const T3 & p3, const T4 & p4) { \ 00063 return GiNaC::function(NAME##_SERIAL::serial, GiNaC::ex(p1), GiNaC::ex(p2), GiNaC::ex(p3), GiNaC::ex(p4)); \ 00064 } 00065 00066 #define DECLARE_FUNCTION_5P(NAME) \ 00067 class NAME##_SERIAL { public: static unsigned serial; }; \ 00068 const unsigned NAME##_NPARAMS = 5; \ 00069 template<typename T1, typename T2, typename T3, typename T4, typename T5> const GiNaC::function NAME(const T1 & p1, const T2 & p2, const T3 & p3, const T4 & p4, const T5 & p5) { \ 00070 return GiNaC::function(NAME##_SERIAL::serial, GiNaC::ex(p1), GiNaC::ex(p2), GiNaC::ex(p3), GiNaC::ex(p4), GiNaC::ex(p5)); \ 00071 } 00072 00073 #define DECLARE_FUNCTION_6P(NAME) \ 00074 class NAME##_SERIAL { public: static unsigned serial; }; \ 00075 const unsigned NAME##_NPARAMS = 6; \ 00076 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6> const GiNaC::function NAME(const T1 & p1, const T2 & p2, const T3 & p3, const T4 & p4, const T5 & p5, const T6 & p6) { \ 00077 return GiNaC::function(NAME##_SERIAL::serial, GiNaC::ex(p1), GiNaC::ex(p2), GiNaC::ex(p3), GiNaC::ex(p4), GiNaC::ex(p5), GiNaC::ex(p6)); \ 00078 } 00079 00080 #define DECLARE_FUNCTION_7P(NAME) \ 00081 class NAME##_SERIAL { public: static unsigned serial; }; \ 00082 const unsigned NAME##_NPARAMS = 7; \ 00083 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7> const GiNaC::function NAME(const T1 & p1, const T2 & p2, const T3 & p3, const T4 & p4, const T5 & p5, const T6 & p6, const T7 & p7) { \ 00084 return GiNaC::function(NAME##_SERIAL::serial, GiNaC::ex(p1), GiNaC::ex(p2), GiNaC::ex(p3), GiNaC::ex(p4), GiNaC::ex(p5), GiNaC::ex(p6), GiNaC::ex(p7)); \ 00085 } 00086 00087 #define DECLARE_FUNCTION_8P(NAME) \ 00088 class NAME##_SERIAL { public: static unsigned serial; }; \ 00089 const unsigned NAME##_NPARAMS = 8; \ 00090 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8> const GiNaC::function NAME(const T1 & p1, const T2 & p2, const T3 & p3, const T4 & p4, const T5 & p5, const T6 & p6, const T7 & p7, const T8 & p8) { \ 00091 return GiNaC::function(NAME##_SERIAL::serial, GiNaC::ex(p1), GiNaC::ex(p2), GiNaC::ex(p3), GiNaC::ex(p4), GiNaC::ex(p5), GiNaC::ex(p6), GiNaC::ex(p7), GiNaC::ex(p8)); \ 00092 } 00093 00094 #define DECLARE_FUNCTION_9P(NAME) \ 00095 class NAME##_SERIAL { public: static unsigned serial; }; \ 00096 const unsigned NAME##_NPARAMS = 9; \ 00097 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9> const GiNaC::function NAME(const T1 & p1, const T2 & p2, const T3 & p3, const T4 & p4, const T5 & p5, const T6 & p6, const T7 & p7, const T8 & p8, const T9 & p9) { \ 00098 return GiNaC::function(NAME##_SERIAL::serial, GiNaC::ex(p1), GiNaC::ex(p2), GiNaC::ex(p3), GiNaC::ex(p4), GiNaC::ex(p5), GiNaC::ex(p6), GiNaC::ex(p7), GiNaC::ex(p8), GiNaC::ex(p9)); \ 00099 } 00100 00101 #define DECLARE_FUNCTION_10P(NAME) \ 00102 class NAME##_SERIAL { public: static unsigned serial; }; \ 00103 const unsigned NAME##_NPARAMS = 10; \ 00104 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10> const GiNaC::function NAME(const T1 & p1, const T2 & p2, const T3 & p3, const T4 & p4, const T5 & p5, const T6 & p6, const T7 & p7, const T8 & p8, const T9 & p9, const T10 & p10) { \ 00105 return GiNaC::function(NAME##_SERIAL::serial, GiNaC::ex(p1), GiNaC::ex(p2), GiNaC::ex(p3), GiNaC::ex(p4), GiNaC::ex(p5), GiNaC::ex(p6), GiNaC::ex(p7), GiNaC::ex(p8), GiNaC::ex(p9), GiNaC::ex(p10)); \ 00106 } 00107 00108 #define DECLARE_FUNCTION_11P(NAME) \ 00109 class NAME##_SERIAL { public: static unsigned serial; }; \ 00110 const unsigned NAME##_NPARAMS = 11; \ 00111 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11> const GiNaC::function NAME(const T1 & p1, const T2 & p2, const T3 & p3, const T4 & p4, const T5 & p5, const T6 & p6, const T7 & p7, const T8 & p8, const T9 & p9, const T10 & p10, const T11 & p11) { \ 00112 return GiNaC::function(NAME##_SERIAL::serial, GiNaC::ex(p1), GiNaC::ex(p2), GiNaC::ex(p3), GiNaC::ex(p4), GiNaC::ex(p5), GiNaC::ex(p6), GiNaC::ex(p7), GiNaC::ex(p8), GiNaC::ex(p9), GiNaC::ex(p10), GiNaC::ex(p11)); \ 00113 } 00114 00115 #define DECLARE_FUNCTION_12P(NAME) \ 00116 class NAME##_SERIAL { public: static unsigned serial; }; \ 00117 const unsigned NAME##_NPARAMS = 12; \ 00118 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12> const GiNaC::function NAME(const T1 & p1, const T2 & p2, const T3 & p3, const T4 & p4, const T5 & p5, const T6 & p6, const T7 & p7, const T8 & p8, const T9 & p9, const T10 & p10, const T11 & p11, const T12 & p12) { \ 00119 return GiNaC::function(NAME##_SERIAL::serial, GiNaC::ex(p1), GiNaC::ex(p2), GiNaC::ex(p3), GiNaC::ex(p4), GiNaC::ex(p5), GiNaC::ex(p6), GiNaC::ex(p7), GiNaC::ex(p8), GiNaC::ex(p9), GiNaC::ex(p10), GiNaC::ex(p11), GiNaC::ex(p12)); \ 00120 } 00121 00122 #define DECLARE_FUNCTION_13P(NAME) \ 00123 class NAME##_SERIAL { public: static unsigned serial; }; \ 00124 const unsigned NAME##_NPARAMS = 13; \ 00125 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13> const GiNaC::function NAME(const T1 & p1, const T2 & p2, const T3 & p3, const T4 & p4, const T5 & p5, const T6 & p6, const T7 & p7, const T8 & p8, const T9 & p9, const T10 & p10, const T11 & p11, const T12 & p12, const T13 & p13) { \ 00126 return GiNaC::function(NAME##_SERIAL::serial, GiNaC::ex(p1), GiNaC::ex(p2), GiNaC::ex(p3), GiNaC::ex(p4), GiNaC::ex(p5), GiNaC::ex(p6), GiNaC::ex(p7), GiNaC::ex(p8), GiNaC::ex(p9), GiNaC::ex(p10), GiNaC::ex(p11), GiNaC::ex(p12), GiNaC::ex(p13)); \ 00127 } 00128 00129 #define DECLARE_FUNCTION_14P(NAME) \ 00130 class NAME##_SERIAL { public: static unsigned serial; }; \ 00131 const unsigned NAME##_NPARAMS = 14; \ 00132 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14> const GiNaC::function NAME(const T1 & p1, const T2 & p2, const T3 & p3, const T4 & p4, const T5 & p5, const T6 & p6, const T7 & p7, const T8 & p8, const T9 & p9, const T10 & p10, const T11 & p11, const T12 & p12, const T13 & p13, const T14 & p14) { \ 00133 return GiNaC::function(NAME##_SERIAL::serial, GiNaC::ex(p1), GiNaC::ex(p2), GiNaC::ex(p3), GiNaC::ex(p4), GiNaC::ex(p5), GiNaC::ex(p6), GiNaC::ex(p7), GiNaC::ex(p8), GiNaC::ex(p9), GiNaC::ex(p10), GiNaC::ex(p11), GiNaC::ex(p12), GiNaC::ex(p13), GiNaC::ex(p14)); \ 00134 } 00135 00136 00137 // end of generated lines 00138 00139 #define REGISTER_FUNCTION(NAME,OPT) \ 00140 unsigned NAME##_SERIAL::serial = \ 00141 GiNaC::function::register_new(GiNaC::function_options(#NAME, NAME##_NPARAMS).OPT); 00142 00143 namespace GiNaC { 00144 00145 class function; 00146 class symmetry; 00147 00148 typedef ex (* eval_funcp)(); 00149 typedef ex (* evalf_funcp)(); 00150 typedef ex (* conjugate_funcp)(); 00151 typedef ex (* real_part_funcp)(); 00152 typedef ex (* imag_part_funcp)(); 00153 typedef ex (* derivative_funcp)(); 00154 typedef ex (* power_funcp)(); 00155 typedef ex (* series_funcp)(); 00156 typedef void (* print_funcp)(); 00157 00158 // the following lines have been generated for max. 14 parameters 00159 typedef ex (* eval_funcp_1)(const ex &); 00160 typedef ex (* eval_funcp_2)(const ex &, const ex &); 00161 typedef ex (* eval_funcp_3)(const ex &, const ex &, const ex &); 00162 typedef ex (* eval_funcp_4)(const ex &, const ex &, const ex &, const ex &); 00163 typedef ex (* eval_funcp_5)(const ex &, const ex &, const ex &, const ex &, const ex &); 00164 typedef ex (* eval_funcp_6)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00165 typedef ex (* eval_funcp_7)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00166 typedef ex (* eval_funcp_8)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00167 typedef ex (* eval_funcp_9)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00168 typedef ex (* eval_funcp_10)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00169 typedef ex (* eval_funcp_11)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00170 typedef ex (* eval_funcp_12)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00171 typedef ex (* eval_funcp_13)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00172 typedef ex (* eval_funcp_14)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00173 00174 typedef ex (* evalf_funcp_1)(const ex &); 00175 typedef ex (* evalf_funcp_2)(const ex &, const ex &); 00176 typedef ex (* evalf_funcp_3)(const ex &, const ex &, const ex &); 00177 typedef ex (* evalf_funcp_4)(const ex &, const ex &, const ex &, const ex &); 00178 typedef ex (* evalf_funcp_5)(const ex &, const ex &, const ex &, const ex &, const ex &); 00179 typedef ex (* evalf_funcp_6)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00180 typedef ex (* evalf_funcp_7)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00181 typedef ex (* evalf_funcp_8)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00182 typedef ex (* evalf_funcp_9)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00183 typedef ex (* evalf_funcp_10)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00184 typedef ex (* evalf_funcp_11)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00185 typedef ex (* evalf_funcp_12)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00186 typedef ex (* evalf_funcp_13)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00187 typedef ex (* evalf_funcp_14)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00188 00189 typedef ex (* conjugate_funcp_1)(const ex &); 00190 typedef ex (* conjugate_funcp_2)(const ex &, const ex &); 00191 typedef ex (* conjugate_funcp_3)(const ex &, const ex &, const ex &); 00192 typedef ex (* conjugate_funcp_4)(const ex &, const ex &, const ex &, const ex &); 00193 typedef ex (* conjugate_funcp_5)(const ex &, const ex &, const ex &, const ex &, const ex &); 00194 typedef ex (* conjugate_funcp_6)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00195 typedef ex (* conjugate_funcp_7)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00196 typedef ex (* conjugate_funcp_8)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00197 typedef ex (* conjugate_funcp_9)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00198 typedef ex (* conjugate_funcp_10)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00199 typedef ex (* conjugate_funcp_11)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00200 typedef ex (* conjugate_funcp_12)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00201 typedef ex (* conjugate_funcp_13)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00202 typedef ex (* conjugate_funcp_14)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00203 00204 typedef ex (* real_part_funcp_1)(const ex &); 00205 typedef ex (* real_part_funcp_2)(const ex &, const ex &); 00206 typedef ex (* real_part_funcp_3)(const ex &, const ex &, const ex &); 00207 typedef ex (* real_part_funcp_4)(const ex &, const ex &, const ex &, const ex &); 00208 typedef ex (* real_part_funcp_5)(const ex &, const ex &, const ex &, const ex &, const ex &); 00209 typedef ex (* real_part_funcp_6)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00210 typedef ex (* real_part_funcp_7)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00211 typedef ex (* real_part_funcp_8)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00212 typedef ex (* real_part_funcp_9)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00213 typedef ex (* real_part_funcp_10)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00214 typedef ex (* real_part_funcp_11)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00215 typedef ex (* real_part_funcp_12)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00216 typedef ex (* real_part_funcp_13)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00217 typedef ex (* real_part_funcp_14)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00218 00219 typedef ex (* imag_part_funcp_1)(const ex &); 00220 typedef ex (* imag_part_funcp_2)(const ex &, const ex &); 00221 typedef ex (* imag_part_funcp_3)(const ex &, const ex &, const ex &); 00222 typedef ex (* imag_part_funcp_4)(const ex &, const ex &, const ex &, const ex &); 00223 typedef ex (* imag_part_funcp_5)(const ex &, const ex &, const ex &, const ex &, const ex &); 00224 typedef ex (* imag_part_funcp_6)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00225 typedef ex (* imag_part_funcp_7)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00226 typedef ex (* imag_part_funcp_8)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00227 typedef ex (* imag_part_funcp_9)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00228 typedef ex (* imag_part_funcp_10)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00229 typedef ex (* imag_part_funcp_11)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00230 typedef ex (* imag_part_funcp_12)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00231 typedef ex (* imag_part_funcp_13)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00232 typedef ex (* imag_part_funcp_14)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00233 00234 typedef ex (* derivative_funcp_1)(const ex &, unsigned); 00235 typedef ex (* derivative_funcp_2)(const ex &, const ex &, unsigned); 00236 typedef ex (* derivative_funcp_3)(const ex &, const ex &, const ex &, unsigned); 00237 typedef ex (* derivative_funcp_4)(const ex &, const ex &, const ex &, const ex &, unsigned); 00238 typedef ex (* derivative_funcp_5)(const ex &, const ex &, const ex &, const ex &, const ex &, unsigned); 00239 typedef ex (* derivative_funcp_6)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, unsigned); 00240 typedef ex (* derivative_funcp_7)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, unsigned); 00241 typedef ex (* derivative_funcp_8)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, unsigned); 00242 typedef ex (* derivative_funcp_9)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, unsigned); 00243 typedef ex (* derivative_funcp_10)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, unsigned); 00244 typedef ex (* derivative_funcp_11)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, unsigned); 00245 typedef ex (* derivative_funcp_12)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, unsigned); 00246 typedef ex (* derivative_funcp_13)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, unsigned); 00247 typedef ex (* derivative_funcp_14)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, unsigned); 00248 00249 typedef ex (* power_funcp_1)(const ex &, const ex &); 00250 typedef ex (* power_funcp_2)(const ex &, const ex &, const ex &); 00251 typedef ex (* power_funcp_3)(const ex &, const ex &, const ex &, const ex &); 00252 typedef ex (* power_funcp_4)(const ex &, const ex &, const ex &, const ex &, const ex &); 00253 typedef ex (* power_funcp_5)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00254 typedef ex (* power_funcp_6)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00255 typedef ex (* power_funcp_7)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00256 typedef ex (* power_funcp_8)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00257 typedef ex (* power_funcp_9)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00258 typedef ex (* power_funcp_10)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00259 typedef ex (* power_funcp_11)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00260 typedef ex (* power_funcp_12)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00261 typedef ex (* power_funcp_13)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00262 typedef ex (* power_funcp_14)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &); 00263 00264 typedef ex (* series_funcp_1)(const ex &, const relational &, int, unsigned); 00265 typedef ex (* series_funcp_2)(const ex &, const ex &, const relational &, int, unsigned); 00266 typedef ex (* series_funcp_3)(const ex &, const ex &, const ex &, const relational &, int, unsigned); 00267 typedef ex (* series_funcp_4)(const ex &, const ex &, const ex &, const ex &, const relational &, int, unsigned); 00268 typedef ex (* series_funcp_5)(const ex &, const ex &, const ex &, const ex &, const ex &, const relational &, int, unsigned); 00269 typedef ex (* series_funcp_6)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const relational &, int, unsigned); 00270 typedef ex (* series_funcp_7)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const relational &, int, unsigned); 00271 typedef ex (* series_funcp_8)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const relational &, int, unsigned); 00272 typedef ex (* series_funcp_9)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const relational &, int, unsigned); 00273 typedef ex (* series_funcp_10)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const relational &, int, unsigned); 00274 typedef ex (* series_funcp_11)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const relational &, int, unsigned); 00275 typedef ex (* series_funcp_12)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const relational &, int, unsigned); 00276 typedef ex (* series_funcp_13)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const relational &, int, unsigned); 00277 typedef ex (* series_funcp_14)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const relational &, int, unsigned); 00278 00279 typedef void (* print_funcp_1)(const ex &, const print_context &); 00280 typedef void (* print_funcp_2)(const ex &, const ex &, const print_context &); 00281 typedef void (* print_funcp_3)(const ex &, const ex &, const ex &, const print_context &); 00282 typedef void (* print_funcp_4)(const ex &, const ex &, const ex &, const ex &, const print_context &); 00283 typedef void (* print_funcp_5)(const ex &, const ex &, const ex &, const ex &, const ex &, const print_context &); 00284 typedef void (* print_funcp_6)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const print_context &); 00285 typedef void (* print_funcp_7)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const print_context &); 00286 typedef void (* print_funcp_8)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const print_context &); 00287 typedef void (* print_funcp_9)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const print_context &); 00288 typedef void (* print_funcp_10)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const print_context &); 00289 typedef void (* print_funcp_11)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const print_context &); 00290 typedef void (* print_funcp_12)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const print_context &); 00291 typedef void (* print_funcp_13)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const print_context &); 00292 typedef void (* print_funcp_14)(const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const ex &, const print_context &); 00293 00294 // end of generated lines 00295 00296 // Alternatively, an exvector may be passed into the static function, instead 00297 // of individual ex objects. Then, the number of arguments is not limited. 00298 typedef ex (* eval_funcp_exvector)(const exvector &); 00299 typedef ex (* evalf_funcp_exvector)(const exvector &); 00300 typedef ex (* conjugate_funcp_exvector)(const exvector &); 00301 typedef ex (* real_part_funcp_exvector)(const exvector &); 00302 typedef ex (* imag_part_funcp_exvector)(const exvector &); 00303 typedef ex (* derivative_funcp_exvector)(const exvector &, unsigned); 00304 typedef ex (* power_funcp_exvector)(const exvector &, const ex &); 00305 typedef ex (* series_funcp_exvector)(const exvector &, const relational &, int, unsigned); 00306 typedef void (* print_funcp_exvector)(const exvector &, const print_context &); 00307 00308 00309 class function_options 00310 { 00311 friend class function; 00312 friend class fderivative; 00313 public: 00314 function_options(); 00315 function_options(std::string const & n, std::string const & tn=std::string()); 00316 function_options(std::string const & n, unsigned np); 00317 ~function_options(); 00318 void initialize(); 00319 00320 function_options & dummy() { return *this; } 00321 function_options & set_name(std::string const & n, std::string const & tn=std::string()); 00322 function_options & latex_name(std::string const & tn); 00323 // the following lines have been generated for max. 14 parameters 00324 function_options & eval_func(eval_funcp_1 e); 00325 function_options & eval_func(eval_funcp_2 e); 00326 function_options & eval_func(eval_funcp_3 e); 00327 function_options & eval_func(eval_funcp_4 e); 00328 function_options & eval_func(eval_funcp_5 e); 00329 function_options & eval_func(eval_funcp_6 e); 00330 function_options & eval_func(eval_funcp_7 e); 00331 function_options & eval_func(eval_funcp_8 e); 00332 function_options & eval_func(eval_funcp_9 e); 00333 function_options & eval_func(eval_funcp_10 e); 00334 function_options & eval_func(eval_funcp_11 e); 00335 function_options & eval_func(eval_funcp_12 e); 00336 function_options & eval_func(eval_funcp_13 e); 00337 function_options & eval_func(eval_funcp_14 e); 00338 00339 function_options & evalf_func(evalf_funcp_1 ef); 00340 function_options & evalf_func(evalf_funcp_2 ef); 00341 function_options & evalf_func(evalf_funcp_3 ef); 00342 function_options & evalf_func(evalf_funcp_4 ef); 00343 function_options & evalf_func(evalf_funcp_5 ef); 00344 function_options & evalf_func(evalf_funcp_6 ef); 00345 function_options & evalf_func(evalf_funcp_7 ef); 00346 function_options & evalf_func(evalf_funcp_8 ef); 00347 function_options & evalf_func(evalf_funcp_9 ef); 00348 function_options & evalf_func(evalf_funcp_10 ef); 00349 function_options & evalf_func(evalf_funcp_11 ef); 00350 function_options & evalf_func(evalf_funcp_12 ef); 00351 function_options & evalf_func(evalf_funcp_13 ef); 00352 function_options & evalf_func(evalf_funcp_14 ef); 00353 00354 function_options & conjugate_func(conjugate_funcp_1 d); 00355 function_options & conjugate_func(conjugate_funcp_2 d); 00356 function_options & conjugate_func(conjugate_funcp_3 d); 00357 function_options & conjugate_func(conjugate_funcp_4 d); 00358 function_options & conjugate_func(conjugate_funcp_5 d); 00359 function_options & conjugate_func(conjugate_funcp_6 d); 00360 function_options & conjugate_func(conjugate_funcp_7 d); 00361 function_options & conjugate_func(conjugate_funcp_8 d); 00362 function_options & conjugate_func(conjugate_funcp_9 d); 00363 function_options & conjugate_func(conjugate_funcp_10 d); 00364 function_options & conjugate_func(conjugate_funcp_11 d); 00365 function_options & conjugate_func(conjugate_funcp_12 d); 00366 function_options & conjugate_func(conjugate_funcp_13 d); 00367 function_options & conjugate_func(conjugate_funcp_14 d); 00368 00369 function_options & real_part_func(real_part_funcp_1 d); 00370 function_options & real_part_func(real_part_funcp_2 d); 00371 function_options & real_part_func(real_part_funcp_3 d); 00372 function_options & real_part_func(real_part_funcp_4 d); 00373 function_options & real_part_func(real_part_funcp_5 d); 00374 function_options & real_part_func(real_part_funcp_6 d); 00375 function_options & real_part_func(real_part_funcp_7 d); 00376 function_options & real_part_func(real_part_funcp_8 d); 00377 function_options & real_part_func(real_part_funcp_9 d); 00378 function_options & real_part_func(real_part_funcp_10 d); 00379 function_options & real_part_func(real_part_funcp_11 d); 00380 function_options & real_part_func(real_part_funcp_12 d); 00381 function_options & real_part_func(real_part_funcp_13 d); 00382 function_options & real_part_func(real_part_funcp_14 d); 00383 00384 function_options & imag_part_func(imag_part_funcp_1 d); 00385 function_options & imag_part_func(imag_part_funcp_2 d); 00386 function_options & imag_part_func(imag_part_funcp_3 d); 00387 function_options & imag_part_func(imag_part_funcp_4 d); 00388 function_options & imag_part_func(imag_part_funcp_5 d); 00389 function_options & imag_part_func(imag_part_funcp_6 d); 00390 function_options & imag_part_func(imag_part_funcp_7 d); 00391 function_options & imag_part_func(imag_part_funcp_8 d); 00392 function_options & imag_part_func(imag_part_funcp_9 d); 00393 function_options & imag_part_func(imag_part_funcp_10 d); 00394 function_options & imag_part_func(imag_part_funcp_11 d); 00395 function_options & imag_part_func(imag_part_funcp_12 d); 00396 function_options & imag_part_func(imag_part_funcp_13 d); 00397 function_options & imag_part_func(imag_part_funcp_14 d); 00398 00399 function_options & derivative_func(derivative_funcp_1 d); 00400 function_options & derivative_func(derivative_funcp_2 d); 00401 function_options & derivative_func(derivative_funcp_3 d); 00402 function_options & derivative_func(derivative_funcp_4 d); 00403 function_options & derivative_func(derivative_funcp_5 d); 00404 function_options & derivative_func(derivative_funcp_6 d); 00405 function_options & derivative_func(derivative_funcp_7 d); 00406 function_options & derivative_func(derivative_funcp_8 d); 00407 function_options & derivative_func(derivative_funcp_9 d); 00408 function_options & derivative_func(derivative_funcp_10 d); 00409 function_options & derivative_func(derivative_funcp_11 d); 00410 function_options & derivative_func(derivative_funcp_12 d); 00411 function_options & derivative_func(derivative_funcp_13 d); 00412 function_options & derivative_func(derivative_funcp_14 d); 00413 00414 function_options & power_func(power_funcp_1 d); 00415 function_options & power_func(power_funcp_2 d); 00416 function_options & power_func(power_funcp_3 d); 00417 function_options & power_func(power_funcp_4 d); 00418 function_options & power_func(power_funcp_5 d); 00419 function_options & power_func(power_funcp_6 d); 00420 function_options & power_func(power_funcp_7 d); 00421 function_options & power_func(power_funcp_8 d); 00422 function_options & power_func(power_funcp_9 d); 00423 function_options & power_func(power_funcp_10 d); 00424 function_options & power_func(power_funcp_11 d); 00425 function_options & power_func(power_funcp_12 d); 00426 function_options & power_func(power_funcp_13 d); 00427 function_options & power_func(power_funcp_14 d); 00428 00429 function_options & series_func(series_funcp_1 s); 00430 function_options & series_func(series_funcp_2 s); 00431 function_options & series_func(series_funcp_3 s); 00432 function_options & series_func(series_funcp_4 s); 00433 function_options & series_func(series_funcp_5 s); 00434 function_options & series_func(series_funcp_6 s); 00435 function_options & series_func(series_funcp_7 s); 00436 function_options & series_func(series_funcp_8 s); 00437 function_options & series_func(series_funcp_9 s); 00438 function_options & series_func(series_funcp_10 s); 00439 function_options & series_func(series_funcp_11 s); 00440 function_options & series_func(series_funcp_12 s); 00441 function_options & series_func(series_funcp_13 s); 00442 function_options & series_func(series_funcp_14 s); 00443 00444 template <class Ctx> function_options & print_func(print_funcp_1 p) 00445 { 00446 test_and_set_nparams(1); 00447 set_print_func(Ctx::get_class_info_static().options.get_id(), print_funcp(p)); 00448 return *this; 00449 } 00450 template <class Ctx> function_options & print_func(print_funcp_2 p) 00451 { 00452 test_and_set_nparams(2); 00453 set_print_func(Ctx::get_class_info_static().options.get_id(), print_funcp(p)); 00454 return *this; 00455 } 00456 template <class Ctx> function_options & print_func(print_funcp_3 p) 00457 { 00458 test_and_set_nparams(3); 00459 set_print_func(Ctx::get_class_info_static().options.get_id(), print_funcp(p)); 00460 return *this; 00461 } 00462 template <class Ctx> function_options & print_func(print_funcp_4 p) 00463 { 00464 test_and_set_nparams(4); 00465 set_print_func(Ctx::get_class_info_static().options.get_id(), print_funcp(p)); 00466 return *this; 00467 } 00468 template <class Ctx> function_options & print_func(print_funcp_5 p) 00469 { 00470 test_and_set_nparams(5); 00471 set_print_func(Ctx::get_class_info_static().options.get_id(), print_funcp(p)); 00472 return *this; 00473 } 00474 template <class Ctx> function_options & print_func(print_funcp_6 p) 00475 { 00476 test_and_set_nparams(6); 00477 set_print_func(Ctx::get_class_info_static().options.get_id(), print_funcp(p)); 00478 return *this; 00479 } 00480 template <class Ctx> function_options & print_func(print_funcp_7 p) 00481 { 00482 test_and_set_nparams(7); 00483 set_print_func(Ctx::get_class_info_static().options.get_id(), print_funcp(p)); 00484 return *this; 00485 } 00486 template <class Ctx> function_options & print_func(print_funcp_8 p) 00487 { 00488 test_and_set_nparams(8); 00489 set_print_func(Ctx::get_class_info_static().options.get_id(), print_funcp(p)); 00490 return *this; 00491 } 00492 template <class Ctx> function_options & print_func(print_funcp_9 p) 00493 { 00494 test_and_set_nparams(9); 00495 set_print_func(Ctx::get_class_info_static().options.get_id(), print_funcp(p)); 00496 return *this; 00497 } 00498 template <class Ctx> function_options & print_func(print_funcp_10 p) 00499 { 00500 test_and_set_nparams(10); 00501 set_print_func(Ctx::get_class_info_static().options.get_id(), print_funcp(p)); 00502 return *this; 00503 } 00504 template <class Ctx> function_options & print_func(print_funcp_11 p) 00505 { 00506 test_and_set_nparams(11); 00507 set_print_func(Ctx::get_class_info_static().options.get_id(), print_funcp(p)); 00508 return *this; 00509 } 00510 template <class Ctx> function_options & print_func(print_funcp_12 p) 00511 { 00512 test_and_set_nparams(12); 00513 set_print_func(Ctx::get_class_info_static().options.get_id(), print_funcp(p)); 00514 return *this; 00515 } 00516 template <class Ctx> function_options & print_func(print_funcp_13 p) 00517 { 00518 test_and_set_nparams(13); 00519 set_print_func(Ctx::get_class_info_static().options.get_id(), print_funcp(p)); 00520 return *this; 00521 } 00522 template <class Ctx> function_options & print_func(print_funcp_14 p) 00523 { 00524 test_and_set_nparams(14); 00525 set_print_func(Ctx::get_class_info_static().options.get_id(), print_funcp(p)); 00526 return *this; 00527 } 00528 00529 // end of generated lines 00530 function_options & eval_func(eval_funcp_exvector e); 00531 function_options & evalf_func(evalf_funcp_exvector ef); 00532 function_options & conjugate_func(conjugate_funcp_exvector d); 00533 function_options & real_part_func(real_part_funcp_exvector d); 00534 function_options & imag_part_func(imag_part_funcp_exvector d); 00535 function_options & derivative_func(derivative_funcp_exvector d); 00536 function_options & power_func(power_funcp_exvector d); 00537 function_options & series_func(series_funcp_exvector s); 00538 00539 template <class Ctx> function_options & print_func(print_funcp_exvector p) 00540 { 00541 print_use_exvector_args = true; 00542 set_print_func(Ctx::get_class_info_static().options.get_id(), print_funcp(p)); 00543 return *this; 00544 } 00545 00546 function_options & set_return_type(unsigned rt, const return_type_t* rtt = 0); 00547 function_options & do_not_evalf_params(); 00548 function_options & remember(unsigned size, unsigned assoc_size=0, 00549 unsigned strategy=remember_strategies::delete_never); 00550 function_options & overloaded(unsigned o); 00551 function_options & set_symmetry(const symmetry & s); 00552 00553 std::string get_name() const { return name; } 00554 unsigned get_nparams() const { return nparams; } 00555 00556 protected: 00557 bool has_derivative() const { return derivative_f != NULL; } 00558 bool has_power() const { return power_f != NULL; } 00559 void test_and_set_nparams(unsigned n); 00560 void set_print_func(unsigned id, print_funcp f); 00561 00562 std::string name; 00563 std::string TeX_name; 00564 00565 unsigned nparams; 00566 00567 eval_funcp eval_f; 00568 evalf_funcp evalf_f; 00569 conjugate_funcp conjugate_f; 00570 real_part_funcp real_part_f; 00571 imag_part_funcp imag_part_f; 00572 derivative_funcp derivative_f; 00573 power_funcp power_f; 00574 series_funcp series_f; 00575 std::vector<print_funcp> print_dispatch_table; 00576 00577 bool evalf_params_first; 00578 00579 bool use_return_type; 00580 unsigned return_type; 00581 return_type_t return_type_tinfo; 00582 00583 bool use_remember; 00584 unsigned remember_size; 00585 unsigned remember_assoc_size; 00586 unsigned remember_strategy; 00587 00588 bool eval_use_exvector_args; 00589 bool evalf_use_exvector_args; 00590 bool conjugate_use_exvector_args; 00591 bool real_part_use_exvector_args; 00592 bool imag_part_use_exvector_args; 00593 bool derivative_use_exvector_args; 00594 bool power_use_exvector_args; 00595 bool series_use_exvector_args; 00596 bool print_use_exvector_args; 00597 00598 unsigned functions_with_same_name; 00599 00600 ex symtree; 00601 }; 00602 00603 00606 class do_taylor {}; 00607 00608 00611 class function : public exprseq 00612 { 00613 GINAC_DECLARE_REGISTERED_CLASS(function, exprseq) 00614 00615 // CINT has a linking problem 00616 #ifndef __MAKECINT__ 00617 friend void ginsh_get_ginac_functions(); 00618 #endif // def __MAKECINT__ 00619 00620 friend class remember_table_entry; 00621 // friend class remember_table_list; 00622 // friend class remember_table; 00623 00624 // member functions 00625 00626 // other constructors 00627 public: 00628 function(unsigned ser); 00629 // the following lines have been generated for max. 14 parameters 00630 function(unsigned ser, const ex & param1); 00631 function(unsigned ser, const ex & param1, const ex & param2); 00632 function(unsigned ser, const ex & param1, const ex & param2, const ex & param3); 00633 function(unsigned ser, const ex & param1, const ex & param2, const ex & param3, const ex & param4); 00634 function(unsigned ser, const ex & param1, const ex & param2, const ex & param3, const ex & param4, const ex & param5); 00635 function(unsigned ser, const ex & param1, const ex & param2, const ex & param3, const ex & param4, const ex & param5, const ex & param6); 00636 function(unsigned ser, const ex & param1, const ex & param2, const ex & param3, const ex & param4, const ex & param5, const ex & param6, const ex & param7); 00637 function(unsigned ser, const ex & param1, const ex & param2, const ex & param3, const ex & param4, const ex & param5, const ex & param6, const ex & param7, const ex & param8); 00638 function(unsigned ser, const ex & param1, const ex & param2, const ex & param3, const ex & param4, const ex & param5, const ex & param6, const ex & param7, const ex & param8, const ex & param9); 00639 function(unsigned ser, const ex & param1, const ex & param2, const ex & param3, const ex & param4, const ex & param5, const ex & param6, const ex & param7, const ex & param8, const ex & param9, const ex & param10); 00640 function(unsigned ser, const ex & param1, const ex & param2, const ex & param3, const ex & param4, const ex & param5, const ex & param6, const ex & param7, const ex & param8, const ex & param9, const ex & param10, const ex & param11); 00641 function(unsigned ser, const ex & param1, const ex & param2, const ex & param3, const ex & param4, const ex & param5, const ex & param6, const ex & param7, const ex & param8, const ex & param9, const ex & param10, const ex & param11, const ex & param12); 00642 function(unsigned ser, const ex & param1, const ex & param2, const ex & param3, const ex & param4, const ex & param5, const ex & param6, const ex & param7, const ex & param8, const ex & param9, const ex & param10, const ex & param11, const ex & param12, const ex & param13); 00643 function(unsigned ser, const ex & param1, const ex & param2, const ex & param3, const ex & param4, const ex & param5, const ex & param6, const ex & param7, const ex & param8, const ex & param9, const ex & param10, const ex & param11, const ex & param12, const ex & param13, const ex & param14); 00644 00645 // end of generated lines 00646 function(unsigned ser, const exprseq & es); 00647 function(unsigned ser, const exvector & v, bool discardable = false); 00648 function(unsigned ser, std::auto_ptr<exvector> vp); 00649 00650 // functions overriding virtual functions from base classes 00651 public: 00652 void print(const print_context & c, unsigned level = 0) const; 00653 unsigned precedence() const {return 70;} 00654 ex expand(unsigned options=0) const; 00655 ex eval(int level=0) const; 00656 ex evalf(int level=0) const; 00657 ex eval_ncmul(const exvector & v) const; 00658 unsigned calchash() const; 00659 ex series(const relational & r, int order, unsigned options = 0) const; 00660 ex thiscontainer(const exvector & v) const; 00661 ex thiscontainer(std::auto_ptr<exvector> vp) const; 00662 ex conjugate() const; 00663 ex real_part() const; 00664 ex imag_part() const; 00665 void archive(archive_node& n) const; 00666 void read_archive(const archive_node& n, lst& syms); 00667 protected: 00668 ex derivative(const symbol & s) const; 00669 bool is_equal_same_type(const basic & other) const; 00670 bool match_same_type(const basic & other) const; 00671 unsigned return_type() const; 00672 return_type_t return_type_tinfo() const; 00673 00674 // new virtual functions which can be overridden by derived classes 00675 // none 00676 00677 // non-virtual functions in this class 00678 protected: 00679 ex pderivative(unsigned diff_param) const; // partial differentiation 00680 static std::vector<function_options> & registered_functions(); 00681 bool lookup_remember_table(ex & result) const; 00682 void store_remember_table(ex const & result) const; 00683 public: 00684 ex power(const ex & exp) const; 00685 static unsigned register_new(function_options const & opt); 00686 static unsigned current_serial; 00687 static unsigned find_function(const std::string &name, unsigned nparams); 00688 unsigned get_serial() const {return serial;} 00689 std::string get_name() const; 00690 00691 // member variables 00692 00693 protected: 00694 unsigned serial; 00695 }; 00696 GINAC_DECLARE_UNARCHIVER(function); 00697 00698 // utility functions/macros 00699 00700 template <typename T> 00701 inline bool is_the_function(const ex & x) 00702 { 00703 return is_exactly_a<function>(x) 00704 && ex_to<function>(x).get_serial() == T::serial; 00705 } 00706 00707 // Check whether OBJ is the specified symbolic function. 00708 #define is_ex_the_function(OBJ, FUNCNAME) (GiNaC::is_the_function<FUNCNAME##_SERIAL>(OBJ)) 00709 00710 } // namespace GiNaC 00711 00712 #endif // ndef GINAC_FUNCTION_H 00713