X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fregistrar.h;h=5311c254efddb1546d68a20acf25faa897e93be5;hp=2bf97a5a48b8314250dee700b5a237365a23c709;hb=e5eeee53d814cedc12cd725e76b0eb87859cdd77;hpb=def26469ff96228c66e877bb5594e7d9a24b638f diff --git a/ginac/registrar.h b/ginac/registrar.h index 2bf97a5a..5311c254 100644 --- a/ginac/registrar.h +++ b/ginac/registrar.h @@ -3,7 +3,7 @@ * GiNaC's class registrar (for class basic and all classes derived from it). */ /* - * GiNaC Copyright (C) 1999-2008 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2011 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 @@ -20,17 +20,17 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef __GINAC_REGISTRAR_H__ -#define __GINAC_REGISTRAR_H__ - -#include -#include -#include -#include +#ifndef GINAC_REGISTRAR_H +#define GINAC_REGISTRAR_H #include "class_info.h" #include "print.h" +#include +#include +#include +#include + namespace GiNaC { class ex; @@ -76,22 +76,16 @@ template inline return_type_t make_return_type_t(const unsigned rl = return ret; } -/** Unarchiving function (static member function of every GiNaC class). */ -typedef ex (*unarch_func)(const archive_node &n, lst &sym_lst); - - /** This class stores information about a registered GiNaC class. */ class registered_class_options { public: registered_class_options(const char *n, const char *p, - const std::type_info& ti, - unarch_func f) - : name(n), parent_name(p), tinfo_key(&ti), unarchive(f) {} + const std::type_info& ti) + : name(n), parent_name(p), tinfo_key(&ti) { } const char *get_name() const { return name; } const char *get_parent_name() const { return parent_name; } std::type_info const* get_id() const { return tinfo_key; } - unarch_func get_unarch_func() const { return unarchive; } const std::vector &get_print_dispatch_table() const { return print_dispatch_table; } template @@ -126,7 +120,6 @@ private: const char *name; /**< Class name. */ const char *parent_name; /**< Name of superclass. */ std::type_info const* tinfo_key; /**< Type information key. */ - unarch_func unarchive; /**< Pointer to unarchiving function. */ std::vector print_dispatch_table; /**< Method table for print() dispatch */ }; @@ -144,11 +137,6 @@ public: \ virtual const GiNaC::registered_class_info &get_class_info() const { return classname::get_class_info_static(); } \ virtual GiNaC::registered_class_info &get_class_info() { return classname::get_class_info_static(); } \ virtual const char *class_name() const { return classname::get_class_info_static().options.get_name(); } \ - \ - classname(const GiNaC::archive_node &n, GiNaC::lst &sym_lst); \ - virtual void archive(GiNaC::archive_node &n) const; \ - static GiNaC::ex unarchive(const GiNaC::archive_node &n, GiNaC::lst &sym_lst); \ - \ class visitor { \ public: \ virtual void visit(const classname &) = 0; \ @@ -179,24 +167,17 @@ private: /** Macro for inclusion in the implementation of each registered class. */ #define GINAC_IMPLEMENT_REGISTERED_CLASS(classname, supername) \ - GiNaC::registered_class_info classname::reg_info = GiNaC::registered_class_info(GiNaC::registered_class_options(#classname, #supername, typeid(classname), &classname::unarchive)); + GiNaC::registered_class_info classname::reg_info = GiNaC::registered_class_info(GiNaC::registered_class_options(#classname, #supername, typeid(classname))); /** Macro for inclusion in the implementation of each registered class. * Additional options can be specified. */ #define GINAC_IMPLEMENT_REGISTERED_CLASS_OPT(classname, supername, options) \ - GiNaC::registered_class_info classname::reg_info = GiNaC::registered_class_info(GiNaC::registered_class_options(#classname, #supername, typeid(classname), &classname::unarchive).options); + GiNaC::registered_class_info classname::reg_info = GiNaC::registered_class_info(GiNaC::registered_class_options(#classname, #supername, typeid(classname)).options); /** Macro for inclusion in the implementation of each registered class. * Additional options can be specified. */ #define GINAC_IMPLEMENT_REGISTERED_CLASS_OPT_T(classname, supername, options) \ - GiNaC::registered_class_info classname::reg_info = GiNaC::registered_class_info(GiNaC::registered_class_options(#classname, #supername, typeid(classname), &classname::unarchive).options); - - -/** Find type information key by class name. */ -extern std::type_info const* find_tinfo_key(const std::string &class_name); - -/** Find unarchiving function by class name. */ -extern unarch_func find_unarch_func(const std::string &class_name); + GiNaC::registered_class_info classname::reg_info = GiNaC::registered_class_info(GiNaC::registered_class_options(#classname, #supername, typeid(classname)).options); /** Add or replace a print method. */ @@ -216,4 +197,4 @@ extern void set_print_func(void (T::*f)(const C &, unsigned)) } // namespace GiNaC -#endif // ndef __GINAC_REGISTRAR_H__ +#endif // ndef GINAC_REGISTRAR_H