+// Alternatively, an exvector may be passed into the static function, instead
+// of individual ex objects. Then, the number of arguments is not limited.
+typedef ex (* eval_funcp_exvector)(const exvector &);
+typedef ex (* evalf_funcp_exvector)(const exvector &);
+typedef ex (* derivative_funcp_exvector)(const exvector &, unsigned);
+typedef ex (* series_funcp_exvector)(const exvector &, const relational &, int, unsigned);
+
+class function_options
+{
+ friend class function;
+ friend class fderivative;
+public:
+ function_options();
+ function_options(std::string const & n, std::string const & tn=std::string());
+ ~function_options();
+ void initialize(void);
+ function_options & set_name(std::string const & n, std::string const & tn=std::string());
+ function_options & latex_name(std::string const & tn);
+// the following lines have been generated for max. ${maxargs} parameters
+$eval_func_interface
+$evalf_func_interface
+$derivative_func_interface
+$series_func_interface
+// end of generated lines
+ function_options & eval_func(eval_funcp_exvector e);
+ function_options & evalf_func(evalf_funcp_exvector ef);
+ function_options & derivative_func(derivative_funcp_exvector d);
+ function_options & series_func(series_funcp_exvector s);
+
+ function_options & set_return_type(unsigned rt, unsigned rtt=0);
+ function_options & do_not_evalf_params(void);
+ function_options & remember(unsigned size, unsigned assoc_size=0,
+ unsigned strategy=remember_strategies::delete_never);
+ function_options & overloaded(unsigned o);
+ function_options & set_symmetry(const symmetry & s);
+ void test_and_set_nparams(unsigned n);
+ std::string get_name(void) const { return name; }
+ unsigned get_nparams(void) const { return nparams; }
+ bool has_derivative(void) const { return derivative_f != NULL; }
+
+protected:
+ std::string name;
+ std::string TeX_name;
+
+ unsigned nparams;
+
+ eval_funcp eval_f;
+ evalf_funcp evalf_f;
+ derivative_funcp derivative_f;
+ series_funcp series_f;
+
+ bool evalf_params_first;
+
+ bool use_return_type;
+ unsigned return_type;
+ unsigned return_type_tinfo;
+
+ bool use_remember;
+ unsigned remember_size;
+ unsigned remember_assoc_size;
+ unsigned remember_strategy;
+
+ bool eval_use_exvector_args;
+ bool evalf_use_exvector_args;
+ bool derivative_use_exvector_args;
+ bool series_use_exvector_args;
+
+ unsigned functions_with_same_name;
+
+ ex symtree;