-/** Unarchiving function (static member function of every GiNaC class). */
-typedef ex (*unarch_func)(const archive_node &n, lst &sym_lst);
-
+template<typename T> inline return_type_t make_return_type_t(const unsigned rl = 0)
+{
+ return_type_t ret;
+ ret.rl = rl;
+ ret.tinfo = &typeid(T);
+ return ret;
+}
+
+/** 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)
+ : 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; }
+ const std::vector<print_functor> &get_print_dispatch_table() const { return print_dispatch_table; }
+
+ template <class Ctx, class T, class C>
+ registered_class_options & print_func(void f(const T &, const C & c, unsigned))
+ {
+ set_print_func(Ctx::get_class_info_static().options.get_id(), f);
+ return *this;
+ }