# function.pl options: \$maxargs=${maxargs}
#
-# GiNaC Copyright (C) 1999-2008 Johannes Gutenberg University Mainz, Germany
+# GiNaC Copyright (C) 1999-2010 Johannes Gutenberg University Mainz, Germany
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
* Please do not modify it directly, edit the perl script instead!
* function.pl options: \$maxargs=${maxargs}
*
- * GiNaC Copyright (C) 1999-2008 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2010 Johannes Gutenberg University Mainz, Germany
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __GINAC_FUNCTION_H__
-#define __GINAC_FUNCTION_H__
+#ifndef GINAC_FUNCTION_H
+#define GINAC_FUNCTION_H
-#include <string>
-#include <vector>
+#include "exprseq.h"
// CINT needs <algorithm> to work properly with <vector>
#include <algorithm>
-
-#include "exprseq.h"
+#include <string>
+#include <vector>
// the following lines have been generated for max. ${maxargs} parameters
$declare_function_macro
static unsigned register_new(function_options const & opt);
static unsigned current_serial;
static unsigned find_function(const std::string &name, unsigned nparams);
+ static std::vector<function_options> get_registered_functions() { return registered_functions(); };
unsigned get_serial() const {return serial;}
std::string get_name() const;
} // namespace GiNaC
-#endif // ndef __GINAC_FUNCTION_H__
+#endif // ndef GINAC_FUNCTION_H
END_OF_INTERFACE
* Please do not modify it directly, edit the perl script instead!
* function.pl options: \$maxargs=${maxargs}
*
- * GiNaC Copyright (C) 1999-2008 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2010 Johannes Gutenberg University Mainz, Germany
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <iostream>
-#include <string>
-#include <stdexcept>
-#include <list>
-#include <limits>
-
#include "function.h"
#include "operators.h"
#include "fderivative.h"
#include "inifcns.h"
#include "tostring.h"
#include "utils.h"
+#include "hash_seed.h"
#include "remember.h"
+#include <iostream>
+#include <limits>
+#include <list>
+#include <stdexcept>
+#include <string>
+
namespace GiNaC {
//////////
unsigned function::calchash() const
{
- const void* this_tinfo = (const void*)typeid(*this).name();
- unsigned v = golden_ratio_hash(golden_ratio_hash((p_int)this_tinfo) ^ serial);
+ unsigned v = golden_ratio_hash(make_hash_seed(typeid(*this)) ^ serial);
for (size_t i=0; i<nops(); i++) {
v = rotate_left(v);
v ^= this->op(i).gethash();
const function_options & opt = registered_functions()[serial];
if (opt.conjugate_f==0) {
- return exprseq::conjugate();
+ return conjugate_function(*this).hold();
}
if (opt.conjugate_use_exvector_args) {
// No derivative defined? Then return abstract derivative object
if (opt.power_f == NULL)
- return (new power::power(*this, power_param))->setflag(status_flags::dynallocated |
- status_flags::evaluated);
+ return (new GiNaC::power(*this, power_param))->setflag(status_flags::dynallocated |
+ status_flags::evaluated);
current_serial = serial;
if (opt.power_use_exvector_args)