GiNaC  1.6.2
function.h
Go to the documentation of this file.
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 

This page is part of the GiNaC developer's reference. It was generated automatically by doxygen. For an introduction, see the tutorial.