virtual void archive(archive_node &n) const; \
static ex unarchive(const archive_node &n, const lst &sym_lst);
-/** Macro for inclusion in the declaration of each registered class. */
+/** Macro for inclusion in the declaration of each registered class.
+ * It declares some functions that are common to all classes derived
+ * from 'basic' as well as all required stuff for the GiNaC class
+ * registry (mainly needed for archiving). */
#define GINAC_DECLARE_REGISTERED_CLASS(classname, supername) \
GINAC_DECLARE_REGISTERED_CLASS_NO_CTORS(classname, supername) \
public: \
~classname(); \
classname(const classname & other); \
const classname & operator=(const classname & other); \
+ basic * duplicate() const; \
protected: \
void copy(const classname & other); \
void destroy(bool call_parent); \
+ int compare_same_type(const basic & other) const; \
private:
#define GINAC_IMPLEMENT_REGISTERED_CLASS_NO_CTORS(classname, supername) \
registered_class_info classname::reg_info(#classname, #supername, TINFO_##classname, &classname::unarchive); \
const char *classname::class_name(void) const {return reg_info.name;}
-/** Macro for inclusion in the implementation of each registered class. */
+/** Macro for inclusion in the implementation of each registered class.
+ * It implements some functions that are the same in all classes derived
+ * from 'basic' (such as the destructor, the copy constructor and the
+ * assignment operator). */
#define GINAC_IMPLEMENT_REGISTERED_CLASS(classname, supername) \
GINAC_IMPLEMENT_REGISTERED_CLASS_NO_CTORS(classname, supername) \
classname::~classname() \
copy(other); \
} \
return *this; \
+} \
+basic * classname::duplicate() const \
+{ \
+ debugmsg(#classname " duplicate", LOGLEVEL_DUPLICATE); \
+ return new classname(*this); \
}
+
/** Find TINFO_* key by class name. */
extern unsigned int find_tinfo_key(const std::string &class_name);