+/** Implementation of ex::real_part for functions. */
+ex function::real_part() const
+{
+ GINAC_ASSERT(serial<registered_functions().size());
+ const function_options & opt = registered_functions()[serial];
+
+ if (opt.real_part_f==0)
+ return basic::real_part();
+
+ if (opt.real_part_use_exvector_args)
+ return ((real_part_funcp_exvector)(opt.real_part_f))(seq);
+
+ switch (opt.nparams) {
+ // the following lines have been generated for max. ${maxargs} parameters
+${real_part_switch_statement}
+ // end of generated lines
+ }
+ throw(std::logic_error("function::real_part(): invalid nparams"));
+}
+
+/** Implementation of ex::imag_part for functions. */
+ex function::imag_part() const
+{
+ GINAC_ASSERT(serial<registered_functions().size());
+ const function_options & opt = registered_functions()[serial];
+
+ if (opt.imag_part_f==0)
+ return basic::imag_part();
+
+ if (opt.imag_part_use_exvector_args)
+ return ((imag_part_funcp_exvector)(opt.imag_part_f))(seq);
+
+ switch (opt.nparams) {
+ // the following lines have been generated for max. ${maxargs} parameters
+${imag_part_switch_statement}
+ // end of generated lines
+ }
+ throw(std::logic_error("function::imag_part(): invalid nparams"));
+}
+