* Implementation of relations between expressions */
/*
- * GiNaC Copyright (C) 1999-2006 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2008 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
// default constructor
//////////
-relational::relational() : basic(&relational::tinfo_static) {}
+relational::relational() { }
//////////
// other constructors
// public
-relational::relational(const ex & lhs, const ex & rhs, operators oper) : basic(&relational::tinfo_static), lh(lhs), rh(rhs), o(oper) {}
+relational::relational(const ex & lhs, const ex & rhs, operators oper) :
+ lh(lhs), rh(rhs), o(oper) { }
//////////
// archiving
//////////
-relational::relational(const archive_node &n, lst &sym_lst) : inherited(n, sym_lst)
+void relational::read_archive(const archive_node& n, lst& sym_lst)
{
+ inherited::read_archive(n, sym_lst);
unsigned int opi;
if (!(n.find_unsigned("op", opi)))
throw (std::runtime_error("unknown relational operator in archive"));
n.find_ex("lh", lh, sym_lst);
n.find_ex("rh", rh, sym_lst);
}
+GINAC_BIND_UNARCHIVER(relational);
void relational::archive(archive_node &n) const
{
n.add_unsigned("op", o);
}
-DEFAULT_UNARCHIVE(relational)
-
//////////
// functions overriding virtual functions from base classes
//////////
return lh.return_type();
}
-const basic* relational::return_type_tinfo() const
+return_type_t relational::return_type_tinfo() const
{
GINAC_ASSERT(lh.return_type_tinfo()==rh.return_type_tinfo());
return lh.return_type_tinfo();
unsigned relational::calchash() const
{
- unsigned v = golden_ratio_hash((p_int)tinfo());
+ const void* this_tinfo = (const void*)typeid(*this).name();
+ unsigned v = golden_ratio_hash((p_int)this_tinfo);
unsigned lhash = lh.gethash();
unsigned rhash = rh.gethash();